资讯动态

【STM32入门】看门狗(IWDG WWDG)详解:独立看门狗与窗口看门狗

发布时间:2026/8/15 11:44:23 来源:尧图企业网站定制
STM32入门笔记看门狗一旦配置错误会导致单片机反复复位调试时建议先关闭看门狗或设置较长的超时时间。一、前言程序跑飞了谁来拉它一把不知道你在调 STM32 的时候有没有遇到过这种情况程序莫名其妙卡在某个while循环里出不来了或者受到电磁干扰后跑飞了去执行一些乱七八糟的地址整个系统直接死机。这时候你按复位键它又好了但你总不能一直守着板子按复位吧这时候就需要请出我们今天的主角——看门狗WatchdogWDG。说白了看门狗就是单片机里雇的一个保安。它的工作很简单盯着程序运行一旦发现程序罢工或者发疯就立马给单片机一个复位信号让它重新做人保证系统的可靠性。STM32F103 里面内置了两个看门狗独立看门狗IWDG独立工作对时间精度要求不高像个粗放的保安。窗口看门狗WWDG要求在精确的计时窗口内喂狗像个准时的闹钟。下面我就结合江科大的课程把这两个看门狗的内部结构、工作原理和超时计算给你掰扯清楚。二、看门狗的本质一个特殊的定时器在深入之前我们先建立一个核心认知看门狗本质上就是一个递减计数器。它的工作逻辑特别简单就三步设一个倒计时时间比如 1 秒。程序正常运行时要不断喂狗——也就是把计数器重新装满。如果程序卡死了来不及喂狗计数器减到 0看门狗就触发复位单片机重启。我的理解你可以把看门狗想象成一个定时炸弹你必须在爆炸前拆掉它喂狗。如果你牺牲了程序跑飞没人拆炸弹它就炸了复位。三、独立看门狗 IWDG停不下来的独立保安3.1 IWDG 框图解析图 2独立看门狗框图图 157摘自《STM32F10xxx 参考手册》我们对着框图一点点看时钟源 LSI40kHz这是独立看门狗的命脉。注意它用的是独立的内部低速时钟 LSI不依赖外部晶振也不依赖系统时钟。这意味着即使主时钟挂了IWDG 照样能工作。8 位预分频器把 40kHz 的时钟分频降低计数速度。12 位递减计数器从重装值开始往下减减到 0 就复位。重装载寄存器 IWDG_RLR存放要重装到计数器里的值。预分频寄存器 IWDG_PR设置分频系数。键寄存器 IWDG_KR这是 IWDG 的命门后面重点讲。状态寄存器 IWDG_SR反映当前配置状态。我的理解这意味着 IWDG 是24 小时值班的保安哪怕单片机睡着了它也在计数。如果你用低功耗模式一定要考虑 IWDG 会不会在睡眠时把单片机复位。3.2 键寄存器 IWDG_KR为什么叫键​图 3IWDG 键寄存器功能表很多同学第一次看到键寄存器都懵这又不是键盘哪来的键其实这里的键是钥匙的意思。江科大 PPT 里讲得很清楚在可能存在电磁干扰的工业环境中如果用一个控制位来启停看门狗很可能因为干扰导致位翻转误触发复位。所以 ST 设计了一个钥匙机制——必须往整个寄存器写入特定的 16 位值才能执行对应操作。写入键寄存器的值作用0xCCCC启用独立看门狗。一旦写入IWDG 就开始计数且软件无法停止。0xAAAA喂狗。把 IWDG_RLR 的值重新加载到计数器中。0x5555解除写保护。只有先写这个才能修改 IWDG_PR 和 IWDG_RLR。0x5555之外的其他值启用写保护。防止误操作改配置。我的理解这个设计就像保险柜的密码锁。你不能只拨动一个开关必须输入完整的密码特定值电路才会执行动作。这大大降低了误触发的概率在工业现场特别重要。标准配置流程伪代码逻辑1. 写入 0x5555 解锁 2. 配置预分频系数 PR 3. 配置重装载值 RLR 4. 写入非 0x5555 的值上锁可选推荐 5. 写入 0xCCCC 启动看门狗 6. 主循环中定期写入 0xAAAA 喂狗3.3 IWDG 超时时间计算​图 4看门狗超时时间表公式TIWDG​TLSI​×PR预分频系数​×(RL1)其中 TLSI​1/FLSI​1/40kHz25μs结合表格看最短时间PR /4RL 0x000约0.1 ms最长时间PR /256RL 0xFFF约26214.4 ms26.2 秒我的理解IWDG 的超时时间范围非常大从 0.1 毫秒到 26 秒都能覆盖。实际项目中如果你的主循环周期是 10ms那你可以把超时时间设成 100ms~1s既给程序留足运行时间又能在卡死时快速复位。计算示例如果我要设置 1 秒的超时时间选 PR /64对应 1.6ms ~ 6553.6ms 的档位反推 RL1000ms25μs×64×(RL1) → RL1≈625 → RL624 0x270四、窗口看门狗 WWDG有时间窗口的精确闹钟如果说 IWDG 是只要在炸弹爆炸前拆掉就行那 WWDG 就是你必须在特定的时间段内拆掉炸弹拆早了或拆晚了都不行。4.1 WWDG 框图解析​图 5窗口看门狗框图图 158摘自《STM32F10xxx 参考手册》对着框图看结构时钟源 PCLK136MHzWWDG 挂在 APB1 总线上用的是系统外设时钟不是独立时钟。这意味着如果主时钟停了WWDG 也歇菜。看门狗预分频器 WDGTB对 PCLK1 进行 1、2、4、8 分频。6 位递减计数器T[6:0]注意虽然叫 6 位但实际上是 7 位T6~T0其中T6 是溢出标志位。看门狗控制寄存器 WWDG_CR包含使能位 WDGA 和计数器值 T[6:0]。看门狗配置寄存器 WWDG_CFR存放窗口值 W[6:0]。比较器实时比较 T[6:0] 和 W[6:0]。4.2 WWDG 工作特性什么是窗口​图 6窗口看门狗工时序图WWDG 的复位规则比 IWDG 复杂记住三条铁律规则说明① 计数器减到 0x3F 以下复位当 T[6:0] 0x40即 T6 位变成 0时产生复位。这是超时未喂狗。② 在窗口外喂狗复位当 T[6:0] W[6:0] 时过早喂狗也会产生复位这就是窗口的含义。③ 0x40 时产生早期唤醒中断 EWI当计数器减到 0x40 时如果使能了中断会触发 EWI给你最后一次喂狗的机会。结合时序图理解不允许刷新区计数器值还很大的时候T W你不能喂狗喂了就复位。刷新窗口计数器值在 W 和 0x40 之间时这是安全区必须在这个区间内喂狗。危险区计数器减到 0x40 以下来不及喂狗就复位。我的理解WWDG 的设计非常巧妙。它不仅能检测程序卡死没喂狗还能检测程序跑飞后在异常位置喂狗。比如你的程序正常 10ms 喂一次狗如果跑飞后 1ms 就执行到了喂狗代码WWDG 会发现喂太早了直接复位。这是 IWDG 做不到的安全特性。4.3 WWDG 超时时间计算​图 7WWDG 超时时间与窗口时间计算公式超时时间公式TWWDG​TPCLK1​×4096×2WDGTB×(T[5:0]1)窗口时间公式TWIN​TPCLK1​×4096×2WDGTB×(T[5:0]−W[5:0])其中 TPCLK1​1/FPCLK1​ 在 36MHz 下 TPCLK1​≈27.78ns结合表格PCLK1 36MHzWDGTB最小超时最大超时0113 μs7.28 ms1227 μs14.56 ms2455 μs29.12 ms3910 μs58.25 ms注意WWDG 的超时时间非常短最长也只有 58ms 左右这和 IWDG 能到 26 秒完全不是一个量级。所以 WWDG 通常用于对时间精度要求极高的场合检测程序是否在规定时间内完成了特定任务。五、IWDG vs WWDG一张表搞定选择困难症图 8IWDG 与 WWDG 对比总结表江科大 STM32 入门教程 PPT为了让大家更直观地理解两者的区别我把江科大 PPT 里的对比表再细化一下对比项IWDG 独立看门狗WWDG 窗口看门狗复位条件12 位计数器减到 06 位计数器 T[5:0] 减到 0或过早喂狗中断支持❌ 无✅ 早期唤醒中断 EWI时钟源LSI40kHz独立时钟PCLK136MHz系统时钟预分频系数/4、/8、/16、/32、/64、/128、/2561、2、4、8即 2WDGTB 计数器位数12 位6 位有效计数T[5:0]超时时间范围0.1 ms ~ 26214.4 ms113 μs ~ 58.25 ms喂狗方式写键寄存器 0xAAAA重装固定值 RLR直接写 WWDG_CR写多少重装多少防误操作机制✅ 键寄存器 写保护❌ 无低功耗行为停机/待机模式仍工作依赖系统时钟主时钟停则停典型应用场景防止程序死循环、跑飞对时间精度要求低检测程序是否按时执行对时间精度要求高我的理解简单记一句话——要不死就行选 IWDG要准时准点选 WWDG。比如电机控制、RTOS 任务调度这种对时序敏感的场景WWDG 的窗口检测就特别有用。六、个人理解与心得6.1 IWDG 和 WWDG 不是竞争关系而是互补关系刚开始学的时候我也纠结到底用哪个看门狗后来实际做项目才明白它们完全可以同时用。IWDG放在后台当最后的保险哪怕主时钟挂了、程序彻底跑飞它也能靠 LSI 把系统拉回来。WWDG放在前台当时序监督员监测关键任务比如传感器采集、通信心跳包是否在预定的时间窗口内完成。6.2 关于喂狗位置的思考看门狗的核心价值在于它必须能反映主程序的运行状态。如果程序卡死在某个任务里但定时器中断还在跑看门狗被中断喂了系统就永远不会复位。正确做法喂狗操作应该放在主循环的关键节点或者在中断里喂狗前先检查主循环的心跳标志位。6.3 超时时间不是越长越好IWDG 最长能到 26 秒但真别设这么长。超时时间太长程序卡死后你要等很久才能复位太短了程序正常运行时可能因为某次耗时操作比如 Flash 写入没来得及喂狗导致误复位。建议根据主循环最大执行时间的3~5 倍来设置。七、踩坑记录IWDG 一旦启动软件无法关闭这是 ST 的硬件设计IWDG 没有软件关闭的开关。如果你开启了 IWDG就必须一直喂狗直到系统复位。调试阶段如果忘了喂狗程序会不断复位让你怀疑人生。八、总结要点核心内容看门狗本质递减计数器超时未喂狗则复位系统IWDG 特点独立时钟 LSI、12 位计数器、超时范围大、有键寄存器防误操作、低功耗下仍工作WWDG 特点系统时钟 PCLK1、6 位计数器、有窗口限制过早/过晚都复位、支持 EWI 中断、超时时间短选型建议两者互补IWDG 保不死WWDG 保准时关键风险IWDG 启动后无法关闭WWDG 窗口值配置错误会导致反复复位写这篇文章的时候我把江科大的视频又回顾了一遍边看边对着《STM32F10xxx 参考手册》里的框图和时序图一点点抠细节。说实话看门狗这个知识点单独看江科大课程可能觉得就这但真到了项目里你会发现一个配置不当的看门狗比 bug 还让人头疼——它不会报错只会默默地、不断地、让你怀疑人生地复位。所以建议大家不要只停留在看懂最好动手写个测试程序先故意不喂狗看看复位现象再故意在 WWDG 的窗口外喂狗看看会不会复位真正把原理吃透。开发环境Keil5 STM32F103C8T6 最小系统板 ST-Link参考资料江科大 STM32 入门教程、《STM32F10xxx 参考手册》如果本文对你有帮助欢迎点赞 收藏 ⭐ 有任何问题欢迎在评论区交流一起学习进步

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价