嵌入式系统中的看门狗使用策略

JUMU实名认证 发表于 2026-07-10 00:41 | 显示全部楼层 | 复制链接分享      上一主题  翻页  下一主题
一、独立看门狗 vs 窗口看门狗STM32提供两种看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。
  • IWDG:由独立内部40kHz LSI时钟驱动,即使主时钟失效也能工作。只要在计数器归零前喂狗即可,灵活性高。超时时间:T=4×2^prer×rlr/40000。
  • WWDG:由APB1时钟(PCLK1)驱动,主时钟失效时也失效。要求在特定时间窗口内喂狗(下限0x40,上限可设),过早或过晚都触发复位。适用于需要精确监测程序运行周期的场景。
  • 选择建议:大多数应用用IWDG即可。需要检测程序运行频率是否异常时选择WWDG(如安全关键系统)。
二、喂狗时机选择喂狗时机是看门狗设计最容易出错的地方:
  • 禁止在主循环中无条件喂狗:这是最危险的错误。如果主循环中有死循环,喂狗依然执行,看门狗形同虚设。
  • 推荐做法:每个关键任务完成后设置标志位,主循环中检查所有标志位都置位后才喂狗。例如:if(task1_ok && task2_ok && task3_ok){IWDG_Refresh(); task1_ok=0; task2_ok=0; task3_ok=0;}。
  • 定时器中断中喂狗:绝对禁止。即使程序死锁,定时器中断通常仍能运行。
  • 合理设置超时时间:应比正常任务周期长50%-100%,避免正常波动引起误复位。
三、多任务系统中的看门狗设计在FreeRTOS等多任务系统中,看门狗设计需考虑以下要点:
  • 任务监控:每个任务定期更新自己的"心跳"计数器,独立监控任务定期检查所有心跳。任一心跳超时则不喂狗。
  • 中断监控:关键中断(如DMA完成)也应纳入心跳监控。
  • 空闲任务钩子:可在空闲任务钩子中确认所有任务都在正常运行,但需确保空闲任务本身不会死锁。
  • 堆栈溢出检测:启用FreeRTOS的堆栈溢出检测钩子,检测到溢出时主动触发复位。
四、看门狗失效场景分析
  • 喂狗放在了中断中:主程序死锁,但中断仍按时喂狗——看门狗失效。
  • 主循环无条件喂狗:只要主循环还在跑(哪怕卡在某个子循环)就喂狗——看门狗失效。
  • RTC闹钟唤醒后IWDG不工作:STM32从Standby模式唤醒后IWDG保持运行,但如果Standby前未正确配置,唤醒后IWDG可能异常。
  • 硬件看门狗被禁用:调试阶段容易因断点触发看门狗复位,有些开发者直接禁用看门狗却忘记发布前重新启用。
五、硬件看门狗芯片选型对于高可靠性要求的应用,外置硬件看门狗芯片比内部看门狗更可靠:
  • MAX823/824:经典三脚看门狗(VCC/GND/RST),超时1.6s,SOT23封装,简单易用。
  • SP706:带手动复位输入和1.6s超时,适合需要外部按钮复位的场景。
  • TPS3823:窗口看门狗,超时时间可调(200ms-1.6s),带看门狗禁用引脚(调试时接地)。
  • 选型要点:超时时间、是否带MR手动复位、是否带电源监控(低于阈值自动复位)、封装和功耗。
设计嵌入式系统时,看门狗是最后一道防线,合理的设计可以大幅提高系统可靠性。

相关主题

  距米网  

找到您想要的设计

工程师、学生在线交流学习平台
关注我们

手机版- JMCAD苏ICP备18040927号-1

©2017-2026 常州居居米智能技术有限公司 苏公网安备32041102000587号