stm32 看门狗
STM32 看门狗
定义
WD, 说白了就是一个递减的计数器
IWDG, 独立看门狗,倒计时结束就会触发复位重启
WWDG, 窗口看门狗,有一个窗口值, 高于窗口上限feed,会导致复位;到0x3f也会导致复位,只有在窗口间feed才能成功恢复看门狗计数。
WWDG
时钟
WWDG属于APB1总线的设备,所以是36M的时钟
寄存器
- WWDG_CR
- WDGA位 (启用,使能WWDG)
- T[6:0]位 当前计数器
- WWDG_CFR
- EWI位 (0x40时提前唤醒中断使能)
- TB[1:0] (分频系数)
- W[6:0] (窗口上限)
- WWDG_SR (记录是否有提前唤醒,0x40时 SR=1)
(注意:你既然使用中断,就要记得使能NVIC来响应中断)
为什么Tr设置大于Wr
为什么 “Tr> Wr” 是合理的?
以你的配置为例:Tr=0x7F(127),Wr=0x5F(95),计数器的工作过程如下:
初始化后,计数器从 0x7F(127)开始向下计数:
127 → 126 → ... → 96(这些值都 > Wr=95)。
此时如果喂狗(重装载 Tr),会因为 “计数器值> Wr” 触发复位(这是窗口机制的保护作用,防止过早喂狗)。
但不喂狗的话,计数器会继续正常递减,不会复位(复位只在计数器到 0x3F 时发生)。
当计数器减到 95(= Wr)及以下(95 → 94 → ... → 65(0x41)):
此时进入 “允许喂狗区间”(计数器值 ≤ Wr 且 > 0x40),喂狗操作会被正常执行(计数器重新装载为 Tr=127,重复上述过程)。
若一直不喂狗,计数器会继续减到 64(0x40)时触发 EWI 中断(如果使能),再减到 63(0x3F)时触发复位。
一开始设置的Tr是一个重装载的值,你feed dog的时间要在W和0x40之间,feed成功后,Tr有可以重装载进去