看门狗(watch dog)是一个定时器,可以设置一个定时时间,计时到时会把MCU复位,所以MCU必须要在定时时间到之前将计数值重置(这个动作通常称为喂狗)。
在嵌入式系统中加入看门狗,可以监测MCU是否还在正常运行,如果软件跑进死循环、或者出现其他错误,导致不能及时重置看门狗计时器,则时间一到MCU就会被复位,重新回到初始状态,以此跳出错误状态。
Stm32内部带有独立看门狗、窗口看门狗。独立看门狗使用时,只要喂狗时间不大于设定的时间就可以,是最常用的看门狗用法;而窗口看门狗,需要喂狗时间在一个上下限范围内,才能重置看门狗计时器。
下面我们就分别学习一下这两种看门狗的使用。
1)stm32的独立看门狗(IWDG)
我们在之前的串口中断工程上修改,以便于打印数值查看。
使用cubemx打开串口中断的工程,然后另存为IWDG工程,打开独立看门狗,并设置分频系数和重载计数值:
然后,切换到clock configuration页面,可以看到IWDG的时钟来自于内部的低速RC振荡器,频率是40kHz: