1.看门狗介绍
看门狗这东西虽然简单,但我相信绝大多程序员没有足够重视它。使用看门狗保证系统正常地运行是非常有必要的。我们在设计产品时,代码以及硬件设计缺陷或是外界电磁干扰都有可能使系统死机,如果不能正常对其进行复位,系统的可靠性将大打折扣。看门狗分为软件看门狗和硬件看门狗两类,其原理都是使用一个独立定时器来计时,超出时间就会产生复位信号,主要区别看是否具有独立的硬件结构,如果有,就是硬件看门狗,如果是一个普通定时器实现的那么就是软件看门狗。STM32片内有两个看门狗:独立看门狗IWDG以及窗口看门狗WWDG。
2.两个狗的区别
-
独立看门狗没有中断,窗口看门狗有中断
-
独立看门狗有硬件软件之分,窗口看门狗只能软件控制
-
独立看门狗只有下限,窗口看门狗有下限和上限
-
独立看门狗是12位递减的。窗口看门狗是7位递减的
-
独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR
独立看门狗(IWDG)没有中断功能,只要在计数器减到0(下限)之前,重新装载计数器的值,就不会产生复位,独立看门够有硬件和软件之分,硬件是通过烧写器的“设定选项几节等”配置,一旦开启了硬件看门狗,那么就停不下来了,只能在重新配置“设定选项几节等”才能关掉硬件看门狗,软件看门狗只需要设置IWDG->KR=0XCCCC;就可以启动看门狗了,软件狗可以在系统复位时关掉,如果在在初始化里开启软件看门狗,那就开启了软件看门狗,
独立看门狗是12位递减的寄存器,使用片子内部的RC振荡器,这个振荡器是关不掉的。
窗口看门狗(WWDG)有中断,这个中断的作用是在计数器达到下限0x40的时候,产生中断,让你喂狗,如果你不喂狗,计数器的值变为0x3f的时候,将会产生系统复位,即使是喂狗,也应该在中断里快速喂狗,要不时间长了计数器减一也会变成0x3f产生复位,这个时间根据芯片手册的公式进行计算即可得到,窗口看门狗只有软件开启方式,还有一个上限值,这个值如果大于计数器的初始值,那么就没有任何作用了,这个值小于计数器的初始值得时候,当计数器的值大于上限值时你对计数器进行装载,将会产生复位,只有在计数器减到小于上限值时,你才能重新装载计数器,意思就是说只有计数器的值在上限值和下限值之间你才能装载计数器,否则就会产生系统复位,当上限值小于下限值,也没有意义。
独立看门狗(IWDG)是独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器。主要用于监视硬件错误。
窗口看门狗(WWDG)是系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。主要用于监视软件错误。