WDG简介
•WDG(Watchdog)看门狗
•看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性
•看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号
•STM32内置两个看门狗
独立看门狗(IWDG):独立工作,对时间精度要求较低
窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用(使用APB1时钟)
IWDG框图

看门狗的结构和定时器比较相似。看门狗定时器溢出,产生复位信号。
喂狗操作,就是重置这个计数器,看门狗计数器是一个递减计数器,运行时不断自减,程序必须在它减到0之前,及时复位这个计数器。
如果没有及时复位这个计数器,减到0之后,自动复位。
看门狗预分频器之前的输入时钟,是LSI内部低速时钟,时钟进入预分频器进行分频,IWDG_PR可以配置分频系数。为了避免程序复位,需要提前在IWDG_RLR写一个值,在IWDG_KR寄存器里写一个特定数据,控制电路进行喂狗,这时重装值会复制到当前的计数器中。
IWDG键寄存器
•键寄存器本质上是控制寄存器,用于控制硬件电路的工作
•在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率
| 写入键寄存器的值 | 作用 |
|---|---|
| 0xCCCC | 启用独立看门狗 |
| 0xAAAA | IWDG_RLR中的值重新加载到计数器(喂狗) |
| 0x5555 | 解除IWDG_PR和IWDG_RLR的写保护 |
| 0x5555之外的其他值 | 启用IWDG_PR和IWDG_RLR的写保护 |
IWDG超时时间


例如,PR写入0时,预分频为4,最短时间RL给0,最长时间RL给0xFF。
TLSI为1/40k=0.025ms,TIWDG为0.025x4x1 = 0.1ms和0.025x4x4096 = 409.6ms
WWDG框图

左下角是时钟源部分PCLK1(APB1的时钟,36MHz),右侧是预分频器WDGTB,上面是6位递减计数器CNT,这个计数器位于控制寄存器的CR中,窗口看门狗没有重装寄存器,只需要直接在CNT写入数据进行喂狗。上方为窗口值,即喂狗最早时间,左侧为输出信号的操作逻辑。
递减计数器为6位,最高位T6是溢出标志位,T6为1时,表示计数器未溢出,为0时,计数器溢出。
WDGA是窗口看门狗的激活位,写入1代表启用窗口看门狗。
喂狗时间最早界限,由WWDG_CFR部分控制,最早界限计数值写入到W0-W6中。
WWDG工作特性
•递减计数器T[6:0]的值小于0x40时,WWDG产生复位
•递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
•递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位
定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位
WWDG超时时间

IWDG和WWDG对比
| IWDG独立看门狗 | WWDG窗口看门狗 | |
|---|---|---|
| 中断 | 无 | 早期唤醒中断 |
| 时钟源 | LSI(40KHz) | PCLK1(36MHz) |
| 预分频系数 | 4、8、32、64、128、256 | 1、2、4、8 |
| 计数器 | 12位 | 6位(有效计数) |
| 超时时间 | 0.1ms~26214.4ms | 113us~58.25ms |
| 喂狗方式 | 写入键寄存器,重装固定值RLR | 直接写入计数器,写多少重装多少 |
| 防误操作 | 键寄存器和写保护 | 无 |
| 用途 | 独立工作,对时间精度要求较低 | 要求看门狗在精确计时窗口起作用 |