这一章在干嘛?

独立看门狗 IWDG 实验:LSI 32 kHz 时钟、12 位递减计数器、喂狗时机。学会在 main 里周期性喂狗,系统卡死后自动复位。

18.1 IWDG 简介

18.2 硬件设计

18.3 程序设计

18.4 下载验证

18.1 IWDG 简介

IWDG(Independent Watchdog)= 独立看门狗。

  • 时钟源:LSI(内部 RC 32 kHz,独立于主时钟);
  • 计数器:12 位递减计数器(0~4095);
  • 行为:计数到 0 → 复位 MCU。

原书图 18.1.1:IWDG 框图原书图 18.1.1:IWDG 框图

核心公式:

其中 为预分频值, 为重装载值。

prv分频最小超时最大
0/40.125 ms512 ms
1/80.25 ms1024 ms
2/160.5 ms2048 ms
3/321 ms4096 ms
4/642 ms8192 ms
5/1284 ms16384 ms
6/2568 ms32768 ms
7/2568 ms32768 ms(手册表有重复,最大算 32 秒)

典型:prv=64 (2 ms),rlr=2500 → Tout ≈ 5 秒。

18.2 硬件设计

无外部电路,纯片内外设。

18.3 程序设计

18.3.1 编程步骤

  1. IWDG_HandleTypeDef hiwdg; 定义;
  2. hiwdg.Instance = IWDG; hiwdg.Init.Prescaler = 64; hiwdg.Init.Reload = 2500; 配置;
  3. HAL_IWDG_Init(&hiwdg);
  4. 主循环里 HAL_IWDG_Refresh(&hiwdg); 喂狗。

18.3.2 关键代码

while (1) {
    delay_ms(1000);
    HAL_IWDG_Refresh(&hiwdg);   // 喂狗,告诉 MCU「我还活着」
}

原书图 18.3.2.1:IWDG 喂狗流程图原书图 18.3.2.1:IWDG 喂狗流程图

IWDG 一旦启动无法关闭,只能刷新。要停止 IWDG 必须系统复位。

实验: 注释掉喂狗代码 → 5 秒后开发板自动复位,看 LED 停止闪烁。

18.4 下载验证

正常运行时 LED 闪烁;注释掉 HAL_IWDG_Refresh 后 5 秒 LED 全部灭掉重启。

原书图 18.4.1:喂狗失败导致复位现象原书图 18.4.1:喂狗失败导致复位现象