看门狗(watch dog)是一个定时器,可以设置一个定时时间,计时到时会把mcu复位,所以mcu必须要在定时时间到之前将计数值重置(这个动作通常称为喂狗)。
在嵌入式系统中加入看门狗,可以监测mcu是否还在正常运行,如果软件跑进死循环、或者出现其他错误,导致不能及时重置看门狗计时器,则时间一到mcu就会被复位,重新回到初始状态,以此跳出错误状态。
stm32内部带有独立看门狗、窗口看门狗。独立看门狗使用时,只要喂狗时间不大于设定的时间就可以,是最常用的看门狗用法;而窗口看门狗,需要喂狗时间在一个上下限范围内,才能重置看门狗计时器。
下面我们就分别学习一下这两种看门狗的使用。
1)stm32的独立看门狗(iwdg)
我们在之前的串口中断工程上修改,以便于打印数值查看。
使用cubemx打开串口中断的工程,然后另存为iwdg工程,打开独立看门狗,并设置分频系数和重载计数值:
然后,切换到clock configuration页面,可以看到iwdg的时钟来自于内部的低速rc振荡器,频率是40khz:
结合设置的分频系数和重载计数值,我们可以计算出看门狗的定时时间:
64*1000/40khz = 1.6s
生成keil工程文件,打开,我们可以看到main函数中已经有初始化iwdg的代码,mx_iwdg_init()这个函数设置了我们的分频和计数值,并启动了看门狗。
在使用时,我们在主循环中,需要在每1.6s之内喂一次狗(调用一次hal_iwdg_refresh()函数)。如下图所示,代码中是每1s喂一次狗,右边的运行结果可以看出,程序一直在正常运行,没有被复位:
而如果我们改变延时的参数,变成每2s喂狗一次,则可以看到,程序会被复位:
2)stm32的窗口看门狗(wwdg)
仍然在之前的串口中断工程上修改,以便于打印数值查看。
使用cubemx打开串口中断的工程,然后另存为wwdg工程,打开窗口看门狗,并设置分频系数、窗口值、计数值,并使能早期唤醒中断:
这几个参数的含义解释一下:
分频系数比较好理解,wwdg的主时钟是pclk1(apb1的时钟),这里设置为8,则分频为pclk1/8/4096;
窗口看门狗的计时器是减法计数,从设置的wwdg free-running downcounter value向下计数,如果不喂狗,计到0x3f时,会复位mcu;因此wwdg free-running downcounter value设置的值必须大于0x3f;而其最大值不能超过0x7f,图中设置的就是最大值0x7f;
wwdg window value的值必须在0x3f和wwdg free-running downcounter value之间,图中设置的值时0x70,表示wwdg计时器从0x7f向下递减时,要减到0x70之下后,才能有效喂狗(即喂狗的窗口区间在0x3f ~ wwdg window value之间)。
使能早期唤醒中断,并开启中断,这里使用中断主要是为了方便指示出是否已到窗口时间内:
然后,到clock configuration页面下,可以看到pclk1的频率为36m:
依据以上信息,可以计算出喂狗的窗口:
pclk1/8/4096 = 1099hz;
(0x7f-0x3f)/ 1099 = 58ms;
(0x7f-0x70)/1099 = 14ms;
所以,喂狗的窗口时间约为14ms~58ms。
生成keil工程,打开后,在wwdg.c中添加早期窗口看门狗中断额回调函数,只是置一个标志位:
在主循环中,检测标志位,如果有,则说明已经到窗口时间,需要尽快喂狗;
程序代码和运行结果如下图:
可以看到,喂狗的操作起到了作用,程序没有被复位。
3)关于看门狗使用的几个要点
在实际工程应用中,使用看门狗要注意几个要点,否则可能发挥不了它的作用:
a)喂狗的操作,必须要在主循环里,而不能放在定时器中断里!这是很多初学者容易犯的错误!因为,如果出现了主循环跑飞或者陷入某个死循环,定时器中断可能还在正常运行,定期进入中断喂狗,则看门狗不能复位系统,起不到监测系统正常运行的作用;
b)如果是多任务系统,比如使用了实时操作系统,有多个任务在运行,使用看门狗时,需要依据任务功能来设置喂狗规则:在一定时间内必定会运行的一组任务,需要每个任务都执行到之后才喂狗一次,保证所有任务都被监测;可能会被阻塞、或者间隔时间很长(超过看门狗计时时间)运行一次的任务,则不能与喂狗操作相关联,避免正常运行时被意外复位。
好了,本节看门狗相关的知识就讲解到这里。
如何用非易失性存储和NVMe SSD构建未来云存储解决方案
如何获得较大的物联网成功
电子元器件供应商有哪些_电子元器件供应商十大排名
浅谈3D打印在家居制造中的优势
东芝新推CMOS多功能门逻辑器件,满足移动设备需求
STM32独立看门狗和窗口看门狗的使用
截止目前:全球共有122个5G商用网络推出
AMOLED显示屏引起行业内外广泛关注,PMOLED工艺制程简单技术难度较小
瞄准智能家居,你需要知道哪些公司?
手机触摸屏失灵的六种解决方法
ADI 公司推出集成变压器驱动器和 PWM 控制器的数字隔离
数控机床几何精度标准_数控机床几何精度怎么检测_数控机床几何精度检验方法
如何正确挑选一款效能好的导热硅胶片
JAVA语言优缺点
大疆/零度智控/昊翔CES2017带来哪些无人机?
来了!“金猴”甄会选618全揭秘,多渠道直播助力业绩表现
开关磁阻电机的工作原理及优缺点
维修自动压力调节阀的一般程序是怎样的
基于红外遥控的数字调节开关电源设计与实现
华为星河AI网络解决方案荣获AI训练场景最佳实践沙利文“全球技术领导奖”