看门狗准确来说就是在单片机构成的系统中,可能会收到外界电磁波的干扰,造成程序跑飞,陷入死循环中,这样系统就不能够正常的工作,看门狗就是用来监控这种非正常的程序,如果系统因为故障没有能够及时的去喂狗,然后,这狗就完了,最终导致系统的重启,程序重新执行。
**看门狗的原理:**单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号)
STM32系统中的看门狗有两种——独立看门狗与串口看门狗:
**1.**独立看门狗IWDG–独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要用于监视硬件错误。
**2.**窗口看门狗WWDG----系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去了作用了,主要用于监视软件错误。
一、独立看门狗
独立看门狗的主要性能:
● *运行的递减计数器
● 时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
● 看门狗被**后,则在计数器计数至0x000时产生复位
独立看门狗的功能描述:
在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。
寄存器访问保护:
IWDG_PR和IWDG_RLR寄存器具有写保护功能。要修改这两个寄存器的值,必须先向
IWDG_KR寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。状态寄存器指示预分频值和递减计数器是否正在被更新。
独立看门狗超时时间:
其中prer为寄存器的值,而(4乘以2^prer)就是它的预分频系数,(预分频系数/40)就是它的时钟,最后乘以rlr就是它的溢出时间。
独立看门狗操作库函数:
独立看门狗操作步骤:
如:
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作
IWDG_SetPrescaler(prer); //设置IWDG预分频值:设置IWDG预分频值为64
IWDG_SetReload(rlr); //设置IWDG重装载值
IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器
IWDG_Enable(); //使能IWDG
}
void IWDG_Feed(void)//喂独立看门狗
{
IWDG_ReloadCounter();
}
注:新人上路,网上整理资料,学习专用。