嵌入式开发--STM32片上外设--独立看门狗IWDG

嵌入式开发–STM32片上外设–独立看门狗IWDG

看门狗

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。

看门狗,又叫 watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。 看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。

以上是复制的内容,说白话就是单片机可能因为干扰造成工作异常,或软件编写问题错误造成程序跑飞,比如本来应该在程序区取指令,结果由于指针异常,跑到数据区去取指令。或者反过来。可想而知程序执行会有意料不到的后果。

于是我们设置一个硬件机制,必须在固定的时间间隔内,对某种硬件电路发送信号,如果超过这个时间间隔,该硬件电路会将单片机复位,使得程序重新执行。如此增加了系统的可靠性。这个硬件机制就叫看门狗。发送信号叫喂狗。一旦超时狗会叫,单片机会复位。

STM32的看门狗

STM32全系列都带有看门狗,而且是独立看门狗(IWDG)和窗口看门狗(WWDG)都带。今天讲述的是独立看门狗。
顾名思义,这种看门狗是独立运行的,它使用的是低速内部时钟LSI作为时钟源,在不同的产品系列中,LSI的频率为32或40KHz,由于LSI的频率误差较大,可能会达到2%以上,在编程时要考虑这点。如下图,频率误差1K,即3%
在这里插入图片描述
在这里插入图片描述

独立看门狗的使用

很简单,2步即可。初始化和喂狗。

初始化

在这里插入图片描述
点击Activated即可开启独立看门狗。
右下角的是初始化参数,以40KHz的芯片为例,如图配置就是40000/4/4095=2.5次/秒,即每400ms发生一次重置。必须在400ms以内喂狗,任意两次喂狗的间隔不能大于400ms,一旦超时,狗会叫,单片机会立即重启。

喂狗

在需要喂狗的文件中加入此引用

#include "iwdg.h"		//在需要喂狗的文件中加入此引用

下面这一行是喂狗。

HAL_IWDG_Refresh(&hiwdg);	//喂狗

喂狗的注意点

1 主循环中喂狗,这是最基本的方式
2 闪灯函数内喂狗,这个容易忽略
3 在功能函数中喂狗,如果某个功能执行函数执行时间比较长,要注意狗叫
4 在延时函数中喂狗。
无看门狗时,延时可以这样写

HAL_Delay(1000);	//延时1秒

启用看门狗时,上面的写法狗就会叫,系统会复位,要写成如下样子:

//延时1秒
for(i=0; i<10; i++)
{
    
    
	HAL_Delay(100);				//每次延时0.1秒
	HAL_IWDG_Refresh(&hiwdg);	//喂狗
}

5 不建议开一个定时器中断来专门喂狗

猜你喜欢

转载自blog.csdn.net/13011803189/article/details/130042669