WDG(Watchdog)看门狗
看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。
看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号。
STM32内置两个看门狗
独立看门狗(IWDG):独立工作,对时间精度要求较低。(专用的LSI,40kHz,即使主时钟出现问题了,独立看门狗也可以正常工作)独立看门狗只有一个最晚喂狗界限,只要喂狗不超过这个界限就行,否则看门狗就会硬件复位电路。
窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。(使用APB1的时钟,即36MHz,没有专门的时钟,所以不算独立) 要求看门狗在精确计时窗口起作用,相当于有最早和最晚喂狗界限,提前喂狗和超过最晚界限都会产生复位。
注意事项
在大型项目中,各种状态和可能都非常多,写程序时一不小心就会留下bug,让你的程序卡死或崩溃。
解决办法:
1.程序员设计时就考虑程序运行的各种情况,避免常见的BUG,合理规划程序。
2.定期对程序进行迭代更新,修复存在的BUG。
3.看门狗,出现卡死/崩溃,让看门狗帮我们硬件复位一下。
硬件故障:例如想读取传感器的内容,但传感器坏了,程序就有可能死等去获取数据。
电磁干扰:强的电磁干扰可能让电子元器件失灵/程序跑飞的现象,有看门狗的话,程序进行复位,就会再次正常运行。
独立看门狗的框图
独立看门狗的框图与定时器很像,主要的部分都是预分频器PSC、自动重载器ARR、计数器CNT。
独立看门狗的预分频器(IWDG_PR)是8位的,最大值是2^8-1=255,最大可进行256分频。
独立看门狗的重装载寄存器和递减计数器是12位的,(IWDG_RLR)重装载数值与计数器值的最大值是2^12-1=4095,最多可计数4096次。
定时器的重要结构
需要注意的是定时器的PSC/ARR/CNT均为16位。
IWDG_KR寄存器
0xCCCC:1100 1100 1100 1100
0xAAAA:1010 1010 1010 1010
0x5555:0101 0101 0101 0101
IWDG_SR(状态寄存器)是可读不可写的。
IWDG超时时间
IWDG的预分频值有PR[2:0]决定,并不像定时器那样PSC值+1,而是有特定的预分频系数。
RL[11:0]由于是12位的,最小值是0,最大值是2^12-1,对应的计数值就是1-2^12(4096)。
WWDG框图
WWDG工作特性
超时时间是喂狗的最晚时间,即定时器减到0的时间。
窗口时间是最早的喂狗时间,由之前的框图,T[5:0]=W[5:0]时就可以喂狗了。