
WDG简介WDGWatchdog看门狗看门狗可以监控程序的运行状态当程序因为设计漏洞、硬件故障、电磁干扰等原因出现卡死或跑飞现象时看门狗能及时复位程序避免程序陷入长时间的罢工状态保证系统的可靠性和安全性看门狗本质上是一个定时器当指定时间范围内程序没有执行喂狗重置计数器操作时看门狗硬件电路就自动产生复位信号STM32内置两个看门狗独立看门狗IWDG独立工作对时间精度要求较低窗口看门狗WWDG要求看门狗在精确计时窗口起作用独立看门狗IWDG独立看门狗的时钟是专用的LSI(40KHz)内部低速时钟IWDG键寄存器键寄存器本质上是控制寄存器用于控制硬件电路的工作在可能存在干扰的情况下一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能以降低硬件电路受到干扰的概率写入键寄存器的值作用0xCCCC启用独立看门狗0xAAAAIWDG_RLR中的值重新加载到计数器喂狗0x5555解除IWDG_PR和IWDG_RLR的写保护0x5555之外的其他值启用IWDG_PR和IWDG_RLR的写保护IWDG 其他寄存器详解寄存器位作用IWDG_PR预分频PR[2:0]000/4001/8010/16011/32100/64101/128110~/256IWDG_RLR重装载RL[11:0]重装载值 0~4095喂狗时把 RL1 装入计数器IWDG_SR状态PVU / RVU写 PR/RLR 之前必须等这两个位清零否则写入无效关键IWDG 一旦写入 0xCCCC 启动除了系统复位无法关闭可通过选项字节改为硬件启动。所以调试时要么条件编译要么先注释掉启动代码。IWDG超时时间超时时间TIWDGTLSI×PR预分频系数×(RL1)T_{IWDG} T_{LSI} \times PR预分频系数 \times (RL 1)TIWDGTLSI×PR预分频系数×(RL1)其中TLSI1/FLSIT_{LSI} 1 / F_{LSI}TLSI1/FLSI注意注明LSI 实际范围是30~60kHz所以所有超时都是估算值设计时留 20% 以上余量。窗口看门狗WWDG使用APB1的时钟,PCLK1(36HMz)WWDG工作特性递减计数器T[6:0]的值小于0x40时WWDG产生复位递减计数器T[6:0]在窗口W[6:0]外被重新装载时WWDG产生复位递减计数器T[6:0]等于0x40时可以产生早期唤醒中断EWI用于重装载计数器以避免WWDG复位定期写入WWDG_CR寄存器喂狗以避免WWDG复位WWDG寄存器详解寄存器位作用WWDG_CRWDGAbit7 T[6:0]WDGA 使能看门狗置 1 后同样无法关闭T 是 7 位递减计数器WWDG_CFRWDGTB[1:0] W[6:0] EWIWDGTB 分频00/101/210/411/8W 是窗口上边界EWI 使能早期唤醒中断WWDG_SREWIF早期唤醒中断标志写 0 清除窗口机制窗口机制喂狗只能发生在 “计数器从 W 递减到 0x40” 这一段区间内—— 喂太早计数器 W复位喂太晚计数器 0x40 即下溢也复位。WWDG超时时间TWWDGTPCLK1×4096×2WDGTB×(T[6:0]1)T_{WWDG} T_{PCLK1} \times 4096 \times 2^{WDGTB} \times (T[6:0] 1)TWWDGTPCLK1×4096×2WDGTB×(T[6:0]1)以 PCLK1 36MHzT_PCLK1 ≈ 27.78ns为例IWDG 与 WWDG 对比总结对比项IWDG 独立看门狗WWDG 窗口看门狗时钟源专用 LSI30~60kHzPCLK1APB1需开 RCC 时钟喂狗限制任意时刻喂狗均可必须在 [0x40, W] 窗口内喂狗超时范围约 100µs ~ 26s毫秒级36MHz 下最大约 116ms计时精度低RC 振荡器误差大较高跟随主时钟复位条件超时未喂狗超时未喂狗或窗口外喂狗能否关闭启动后不可关闭除复位启动后不可关闭除复位应用场景主程序跑飞 / 死循环兜底对执行时序有严格要求的任务选型建议只求 程序别死→ 用 IWDG简单可靠程序对时序敏感、需要防 异常快速喂狗→ 用 WWDG极端可靠性场景可两者同时启用。