📖 第 18 章:独立看门狗(IWDG)实验(IWDG)

1次阅读
没有评论
这一章在干嘛?

独立看门狗 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 章:独立看门狗(IWDG)实验(IWDG)原书图 18.1.1:IWDG 框图

核心公式:

$$T_{out} = frac{4 times 2^{PRV} times RLR}{32,mathrm{kHz}}$$

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

prv 分频 最小超时 最大
0 /4 0.125 ms 512 ms
1 /8 0.25 ms 1024 ms
2 /16 0.5 ms 2048 ms
3 /32 1 ms 4096 ms
4 /64 2 ms 8192 ms
5 /128 4 ms 16384 ms
6 /256 8 ms 32768 ms
7 /256 8 ms 32768 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 章:独立看门狗(IWDG)实验(IWDG)原书图 18.3.2.1:IWDG 喂狗流程图

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

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

18.4 下载验证

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

📖 第 18 章:独立看门狗(IWDG)实验(IWDG)原书图 18.4.1:喂狗失败导致复位现象

IWDG 的时钟源是什么?

LSI 内部 32 kHz RC,独立于主时钟。

IWDG 启动后还能关闭吗?

不能,只能刷新。

喂狗函数?

HAL_IWDG_Refresh(&hiwdg);

。

正文完
 0