☰
STM32看门狗误复位排查:LSI频率漂移、调试冻结配置与WWDG窗口期误喂实测
2026/10/9 5:30:33 网站建设 项目流程

目录

    • 一、前言
    • 二、两个看门狗的脾气:先分清再动手
      • 2.1 IWDG:独立时钟下的"只减不问"
      • 2.2 WWDG:窗口比超时更狠
      • 2.3 方案选型:三者的定位差异
    • 三、配置与寄存器级解读
      • 3.1 IWDG 的四个寄存器与启动序列
      • 3.2 容易遗漏的步骤:调试冻结位
      • 3.3 WWDG 配置:窗口值与 EWI
    • 四、核心代码:喂狗策略与健康链
      • 4.1 超时参数的双向校核
      • 4.2 复位源判断:看门狗复位的"自证"
      • 4.3 LSI 频率实测:TIM5 直测与超时反推两种方法
      • 4.4 FreeRTOS 下的软件看门狗链
    • 五、两次翻车实录(失败路径)
      • 5.1 全片擦除触发复位:LSI 漂移吃掉了超时余量
      • 5.2 换 WWDG 后 4ms 复位一次:窗口期误喂
    • 六、实测验证
      • 6.1 LSI 频率批次实测:理论 vs 实测对照之一
      • 6.2 IWDG 超时理论 vs 实测:对照之二
      • 6.3 WWDG 窗口临界实测:对照之三与喂狗周期扫描
    • 七、故障排查手册(5 类)
      • 7.1 断点一命中就复位(最常见)
      • 7.2 低功耗 Stop 模式唤醒即复位
      • 7.3 喂狗任务还活着,系统却已死锁
      • 7.4 复位源误判:上电首启被判成看门狗复位
      • 7.5 想临时关掉 IWDG,发现关不掉
    • 八、总结
    • 版本备注
      • 参考资料

摘要:看门狗是嵌入式系统的最后一道防线,但不少人遇到过"没加看门狗时好好的,加了之后反而频繁复位"的怪事。本文基于 STM32F103C8T6,围绕 IWDG 与 WWDG 的三类误复位展开排查:独立看门狗的时基 LSI 标称 40kHz,5 块测试板实测 33.2~56.8kHz,最坏偏差 +42%,把按标称值算出的 4.0s 超时压缩到 2.82s,导致 Flash 全片擦除期间被复位;调试冻结位缺失导致断点即复位;把 IWDG"勤喂无害"的习惯套用到 WWDG 后出现约 4ms 一次的复位循环。实测:IWDG 超时偏差与 LSI 偏差逐点吻合(-29.6%);WWDG 窗口临界喂狗周期实测 43.71ms,与理论 43.69ms 仅差 +0.05%;修复后全片擦除 100 次复测零复位。文末附 5 类典型故障的完整排查链与可直接移植的工程代码。

一、前言

看门狗的本职工作很简单:程序跑飞了没人喂狗,它就复位系统兜底。逻辑越简单的东西,翻车的时候越让人措手不及——因为它极少出问题,一旦复位,你的第一反应永远是"我的程序明明在喂狗"。我在做一个带 W25Q64 数据记录功能的采集设备时就栽了三次:第一次是现场设备在执行全片擦除时概率性重启,第二次是接入调试器断点就复位,第三次是把 IWDG 换成 WWDG 之后,板子直接进入约 4ms 一次的疯狂复位循环。三次排查下来,根因没有一次出在"忘喂狗"上。

这三类问题的共性是:看门狗本身工作正常,是设计者对它的时钟源、调试行为和窗口机制理解有偏差。LSI 是一块独立于主时钟的 RC 振荡器,精度和晶振完全不是一个量级;调试器暂停内核时看门狗默认照跑不误;WWDG 则反直觉到"喂得太勤也会死"。本文把这三类误复位的原理、排查过程和实测数据完整整理出来,希望你在给产品加看门狗之前就能绕开这些坑。

读完本文你可以得到:IWDG/WWDG 的寄存器级工作机制、超时与窗口时间的双向校核方法、一组跨 5 块板的 LSI 频率实测数据、两种 LSI 频率实测方法(TIM5 捕获直测与超时反推法)、两次翻车事故的排查链复盘,以及 5 类典型故障的处理方案。

前置条件:熟悉 STM32 HAL 库工程结构与 CubeMX 基本操作,手头有 F103 最小系统板和 ST-Link;涉及 FreeRTOS 喂狗策略的部分需要了解任务优先级的基本概念,没有 RTOS 基础也可以跳过 4.4 节。本文完整工程代码可在 CSDN 下载频道 获取(VIP 免费)。

二、两个看门狗的脾气:先分清再动手

2.1 IWDG:独立时钟下的"只减不问"

IWDG(Independent Watchdog,独立看门狗)的核心特征就写在名字里——独立。它的计数时钟来自内部低速 RC 振荡器 LSI,与 HSE/HSI 主时钟、PLL、总线时钟都没有任何关系。主时钟崩溃、软件跑飞、总线死锁,只要芯片还有电,LSI 就在振动,IWDG 就在倒计时。这正是它作为"最后防线"的底气,但也是第一个坑的来源:LSI 的频率远没有你想的那么准。

F103 数据手册给的 LSI 参数是 30~60kHz,典型值 40kHz——注意这是一个横跨 ±50% 的范围,不是晶振那种 ±20ppm 的精度。IWDG 的数据通路如下:

计数到 0

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询