什么是看门狗:
是一种专门用于监测单片机程序运行状态的模块或芯片,俗称“看门狗”。
为什么需要看门狗:
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到外界电磁场的干扰,造成程序的跑飞,陷入死循环,程序不正常运行,导致由单片机控制的系统无法继续工作,所以为了对单片机运行状态的实时监测,产生了“看门狗“。
什么叫做跑飞
程序跑飞是指系统受到某种干扰后,程序计数器PC的值偏离了给定的唯一变化历程,导致程序运行偏离正常的运行路径.程序跑飞因素及后果往往是不可预计的.在很多情况下,程序跑飞后系统会进入死循环而导致死机 。
这种情况称为程序跑飞.程序跑飞后的去向有两种可能.一种可能是转入某种无意义的循环中而出不来.另一种可能是PC值不断增大当PC值增大到0xFFFFH值之后转为执行地址从0x0000H开始的程序相当于重新启动控制程序。
——来源搜狗百科
看门狗要解决什么问题:
1.在程序启动正常运行的时候,系统不能复位。
2.在系统跑飞时,系统复位,程序重新执行。
独立看门狗
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
功能描述:
在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。在stm32不完全手册第更加详细的介绍会在第十章实验讲到。
应该如何应用:
单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环, 看门狗电路就是为了避免这种情况的发生。 看门狗的作用就是在一定时间内(通过定时计数器实现) 没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号)。
比如一个程序正常运行的时间是100ms,在运行完这个段程序之后紧接着进行喂狗,我们设置独立看门狗的定时溢出时间为120ms,比我们需要监控的程序 100ms 多一点,如果超过 120ms 还没有喂狗,那就说明我们监控的程序出故障了,跑飞了,那么就会产生系统复位,让程序重新运行。
int main()
{
看门狗初始化;//调用初始化函数
while(1)
{
被监测的代码段;
喂狗;//调用喂狗函数
}
}
以下代码具体介绍其如何配置:
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG->KR=0X5555;//使能对IWDG->PR和IWDG->RLR的写
IWDG->PR=prer; //设置分频系数
IWDG->RLR=rlr; //重加载寄存器 IWDG->RLR Tout=((4×2^prer) ×rlr) /40
//Tout即喂狗溢出时间,若超出时间,则表示异常
IWDG->KR=0XCCCC;//使能看门狗
}
//喂独立看门狗
void IWDG_Feed(void)
{
IWDG->KR=0XAAAA;//reload,将IWDG->RLR 的值给递减计数器
}
具体详情可查阅stm32不完全手册。
以上就是本人对独立看门狗的理解,如有不当之处,还请之处。