📂 分类:嵌入式单片机📊 经验级别:初级⭐ 难度:★★☆☆☆📝 题型:外设配置题
本文概述
看门狗定时器是嵌入式系统可靠性的最后一道防线,核心原理是计数器溢出前软件必须喂狗,否则触发复位。独立看门狗用独立低速时钟,即使主时钟挂了也能工作;窗口看门狗挂在APB总线上,能检测程序跑飞得太快或太慢。配置关键是选对超时时间和喂狗时机,调试时要注意看门狗在断点暂停时是否继续计数。
核心要点速览
独立看门狗用LSI时钟,不怕主时钟故障,但精度不高
窗口看门狗有上下窗口,太早太晚喂狗都复位
喂狗要放在主循环合适位置,不能在中断里喂
调试时注意看门狗在断点下是否继续计数
低功耗模式下看门狗是否工作要看芯片设计
考察候选人对看门狗工作原理的理解,以及实际项目中是否正确使用看门狗,判断是否知道不同类型看门狗的区别和适用场景。
面试官考察点
回答思路
1
第一步:选对看门狗类型
单片机通常有两种看门狗。独立看门狗用内部低速RC时钟,频率约32千赫兹左右,有自己独立的时钟源,即使主晶振失效也能工作,适合做系统级的最后保护。窗口看门狗挂在APB总线上,时钟来自PCLK,不仅能检测程序跑飞太久不喂狗,还能检测喂得太快太早,适合检测程序跑飞后乱执行恰好碰到喂狗指令的情况。
2
第二步:计算超时时间
独立看门狗的超时时间等于分频系数乘以重装载值再除以LSI时钟频率。比如STM32的IWDG,LSI约32千赫兹,分频器选256,重装载值4095的话,超时约32.7秒。实际项目中超时时间要大于主循环最长执行时间,留一定裕量,通常建议1.5到2倍关系。窗口看门狗还要设置上窗口值,喂狗只能在上下窗口之间进行。
3
第三步:确定喂狗位置
喂狗函数要放在主循环的合适位置,放在任务调度的主循环末尾最合理,这样只有所有任务都正常跑完一圈才会喂狗。不能在中断里喂狗,因为主循环跑飞了但中断还在工作的话,看门狗就失去了作用。也不要每隔一段时间用定时器中断来喂狗,那样程序跑飞了还在定时喂狗,等于自废武功。
4
第四步:调试和验证
调试时一个常见的坑是看门狗在断点暂停时继续计数,一停下来就复位。很多芯片可以配置调试模式下看门狗暂停,比如STM32用DBGMCU寄存器冻结IWDG。实际测试时要故意制造几种异常场景验证看门狗是否真的能复位,比如死循环、非法跳转、关闭中断等,不能只看正常喂狗不复位就完事。
面试官追问(3-5个)
追问 1:独立看门狗和窗口看门狗有什么区别?
参考回答:独立看门狗用独立LSI时钟,不怕主时钟故障,但只有下限检测(超时不喂就复位);窗口看门狗用APB时钟,有上下窗口,太早太晚喂都复位,还能提前产生中断,但主时钟挂了它也挂。两者配合使用可靠性更高。
追问 2:喂狗为什么不能放中断里?
参考回答:很多程序跑飞的场景是主循环死循环或栈溢出,但中断系统可能还正常工作。如果在定时器中断里喂狗,主循环已经异常了但还在定时喂狗,看门狗就检测不到故障,失去了保护作用。
追问 3:低功耗模式下看门狗还工作吗?
参考回答:要看芯片设计和低功耗模式等级。独立看门狗用自己的时钟,停机模式下可能还继续工作,这时候就需要考虑是否在低功耗前关闭看门狗,或者在低功耗期间也要定时唤醒喂狗。窗口看门狗通常随主时钟一起停。
追问 4:看门狗复位后怎么知道是看门狗触发的?
参考回答:单片机有复位状态寄存器,可以读取复位标志位来判断是上电复位、复位引脚复位、软件复位还是看门狗复位。程序启动时检查这个标志,可以记录复位原因用于故障分析。
失分表达(避免这样说)
看门狗就是定时喂狗,很简单
用定时器中断来喂狗最方便
两种看门狗没区别,随便用哪个都行
看门狗不会误触发,越短越好
准备动作
理解独立看门狗和窗口看门狗的工作原理和差异
掌握看门狗超时时间的计算方法
了解调试模式下看门狗的处理方式
在实际项目中做一次看门狗有效性验证测试
核心关键词:单片机看门狗,独立看门狗IWDG,窗口看门狗WWDG,喂狗,超时时间,嵌入式面试,STM32,低功耗模式,复位原因,程序跑飞

扫码关注




























