
如何检查看门狗复位状态?
看门狗复位是嵌入式系统中用于监控系统运行状态的重要机制,通过在规定时间内进行“喂狗”操作来防止系统进入死循环或异常状态,当看门狗计数器达到设定的超时值而未被重置时,系统将触发复位,从而恢复正常运行,以下将详细介绍如何查找和判断看门狗复位的原因:

独立看门狗(IWDG)和窗口看门狗(WWDG)
1、独立看门狗(IWDG)
工作原理:独立看门狗由内部40Khz低速时钟驱动,即使主时钟发生故障,它仍然有效,通过配置相关寄存器来实现对看门狗的控制,包括启动、停止以及喂狗操作,主要寄存器包括IWDG_KR、IWDG_PR和IWDG_RLR。
初始化步骤:
向IWDG_KR寄存器写入0X5555,取消写保护。
设置IWDG_PR和IWDG_RLR的值,以确定看门狗的溢出时间。
向IWDG_KR寄存器写入0XAAAA,重新加载计数值。
向IWDG_KR寄存器写入0XCCCC,启动看门狗。

喂狗操作:定期向IWDG_KR寄存器写入0XAAAA,以防止看门狗计数器溢出导致系统复位。

代码示例:
void IWDG_Init(u8 prer, u16 rlr) { IWDG>KR = 0X5555; // 使能对IWDG_PR和IWDG_RLR的写 IWDG>PR = prer; // 设置分频系数 IWDG>RLR = rlr; // 重载值 IWDG>KR = 0XAAAA; // reload IWDG>KR = 0XCCCC; // 使能看门狗 } void IWDG_Feed(void) { IWDG>KR = 0XAAAA; // reload }
2、窗口看门狗(WWDG)
工作原理:窗口看门狗具有更严格的时间控制要求,需要在特定的时间窗口内进行喂狗操作,如果计数器在窗口外被喂狗,系统将复位,主要寄存器包括WWDG_CR、WWDG_CFR和WWDG_SR。
初始化步骤:
使能WWDG时钟。
配置WWDG_CFR和WWDG_CR寄存器,设置计数器初值、窗口值和分频数。
开启中断并编写中断服务函数。
代码示例:
void WWDG_Init(u8 tr, u8 wr, u8 fprer) { RCC>APB1ENR |= 1 << 11; // 使能wwdg时钟 WWDG_CNT = tr & WWDG_CNT; // 初始化WWDG_CNT WWDG>CFR |= fprer << 7; WWDG>CFR &= 0XFF80; WWDG>CFR |= wr; // 设定窗口值 WWDG>CR |= WWDG_CNT; // 设定计数器值 WWDG>CR |= 1 << 7; // 开启看门狗 MY_NVIC_Init(2, 3, WWDG_IRQn, 2); WWDG>SR = 0X00; // 清除提前唤醒中断标志位 WWDG>CFR |= 1 << 9; // 使能提前唤醒中断 } void WWDG_Set_Counter(u8 cnt) { WWDG>CNT = cnt; }
看门狗复位的检测方法
1、硬件复位:通过给NRST引脚输入低电平复位单片机。
2、软件复位:使用软件命令触发系统复位,例如调用特定的复位函数。
3、查看复位原因:某些微控制器具有记录复位原因的功能,可以通过读取特定寄存器来判断是否是看门狗复位,Cypress的某些芯片可以通过读取一个寄存器来确定复位原因。
常见问题与解决方案
1、参数丢失问题:看门狗复位会导致RAM中的数据清零,但SFR中的数据不会变化,解决方法是将重要参数保存到EEPROM或其他非易失性存储器中,并在系统初始化时恢复这些参数。
2、中断冲突问题:在看门狗中断处理程序中执行跳转指令可能导致其他中断无法正常工作,建议在中断处理程序中仅执行必要的最小操作,避免复杂的逻辑处理。
看门狗复位是嵌入式系统中确保系统稳定运行的重要机制,通过合理配置和使用独立看门狗和窗口看门狗,可以有效地监控系统状态并在异常情况下自动复位,了解如何检测看门狗复位的原因,可以帮助开发者更好地调试和维护系统。
作者:豆面本文地址:https://www.jerry.net.cn/articals/12494.html发布于 2025-01-07 08:49:29
文章转载或复制请以超链接形式并注明出处杰瑞科技发展有限公司