一句话
普通看门狗只要求「别忘喂」,窗口看门狗更狠:喂早了算错、喂晚了算错、不喂也算错——专治「程序跑飞但还在机械喂狗」的假活。

三段时间线
- T_INIT(初始窗口,典型 600ms):nRESET 拉高后开始,等第一次有效喂狗。默认只认 SPI 喂狗(防止 WDI 脚上电抖动误触发)
- T_MIN(禁止区):一次有效喂狗后的固定时长——这段时间喂狗 = 犯规(程序跑飞常伴随后高速空转喂狗)
- T_MARGIN(窗口区):T_MIN 结束后的开放窗口——必须在窗口内喂,拖到超时也算错
三段循环往复,节奏由 SPI 配置(WDCYC 时基 + CW/OW 计数),可配到 ms 级到秒级。
错误计数的赏罚规则
| 情形 | 计数变化 |
|---|---|
| 窗口内有效喂狗 | -1(下限 0) |
| 禁止区喂狗 / 窗口超时未喂 | +2,并发中断 |
| 计数 ≥ 阈值 WWDETHR(可配 0~15) | nRESET 拉低,回 INIT |
故意设计成「错一次 +2、对一次只 -1」:连续错几次就积累到阈值,偶发一次错会被后续正确喂狗洗掉——平衡灵敏度与误报。

上手玩一下
初始化阶段的「三条命」
INIT 态里若一直没有效喂狗:第一次超时 → 软复位(电源不断,nRESET 拉低);第二次 → 硬复位(电源全断重上);第三次 → 直接进 FAILSAFE。MCU 固件一定要在启动后第一时间把喂狗流程跑通。
自测一下
程序跑飞后死循环里高频喂狗,为什么瞒不过窗口看门狗?
答案:高频喂狗大概率落在 T_MIN 禁止区,每次 +2 错误计数,很快超阈值触发复位——而普通看门狗只看间隔是否超时,反而是「喂得勤」的跑飞最难被抓住。窗口机制正是为堵这个漏洞。