stm32 看门狗

STM32 看门狗

定义

WD, 说白了就是一个递减的计数器

IWDG, 独立看门狗,倒计时结束就会触发复位重启
WWDG, 窗口看门狗,有一个窗口值, 高于窗口上限feed,会导致复位;到0x3f也会导致复位,只有在窗口间feed才能成功恢复看门狗计数。

WWDG

时钟

WWDG属于APB1总线的设备,所以是36M的时钟

寄存器

  1. WWDG_CR
    1. WDGA位 (启用,使能WWDG)
    2. T[6:0]位 当前计数器
  2. WWDG_CFR
    1. EWI位 (0x40时提前唤醒中断使能)
    2. TB[1:0] (分频系数)
    3. W[6:0] (窗口上限)
  3. 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有可以重装载进去