首页/外设速查/看门狗
🐕

看门狗 IWDG/WWDG

系统外设
程序跑飞/死循环时的最后防线:超时不喂狗就复位 MCU,产品必开。
🧩 核心原理
📈 时序 / 工作过程图
看门狗窗口机制IWDG 兜底防死机 · WWDG 带窗口校验执行节奏窗口期禁止喂狗窗口期:必须在此喂狗超时未喂 → 复位IWDG:独立时钟(LSI),喂早喂晚都可,关不掉 → 适合兜底WWDG:窗口期内才能喂(喂早=复位),可监测代码执行时序是否正常
⚙️ 配置 / 使用要点
  1. 使能 IWDG:配置预分频/重载值
  2. 周期喂狗:IWDG_Refresh()
  3. WWDG:配置窗口值+计数器,窗口内刷新
  4. 异常时系统复位,重启后判断复位原因
🛠️ 项目示例
独立看门狗配置与喂狗(1s 溢出)
// LSI ≈ 32kHz,预分频 32 → 1kHz,重载 999 → 1s
IWDG_HandleTypeDef hiwdg = {0};
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_32;
hiwdg.Init.Reload = 999;
HAL_IWDG_Init(&hiwdg);

// 主循环每 <1s 喂一次:
while(1){
  /* 任务逻辑 */
  HAL_IWDG_Refresh(&hiwdg);   // 喂狗:重置计数
}
// 若死循环/跑飞 → 1s 后硬件复位,设备自动恢复
❓ 面试高频
IWDG和WWDG区别?
IWDG独立LSI时钟关不掉,超时复位,兜底用;WWDG时钟来自APB1且带窗口,喂早了也复位,还能查程序执行节奏
喂狗时机怎么选?
主循环周期末端喂:周期远小于超时时间;多任务时由空闲任务喂,防止单任务卡死不喂
调试时看门狗老复位怎么办?
调试器冻结:DBGMCU 配置 IWDG_STOP/WWDG_STOP,调试暂停时不喂狗也不复位
✅ 自查清单 (点击勾选,本地保存)
0/0
知道IWDG/WWDG区别
会算溢出时间
知道窗口概念
会选喂狗时机
知道调试冻结