1、 介绍:
(1) 为什么需要看门狗?
在MCU微型计算机系统中,MCU运行程序很容易受到外界电磁场的干扰,从而造成程序运行错误甚至发生跑飞现象,从而陷入死循环,程序的正常运行被打乱,从而造成不可预料的严重后果,于是人们就设计了一款用于实时监测计算机运行状态的芯片,我们就将其称为“看门狗”。
(2) 看门狗的作用
看门狗在我们程序正常工作的时候是不工作的,也就是说他根本没有任何作用,只有在单片机发生程序跑飞现象的时候看门狗才会产生一个复位脉冲强制单片机复位,从而使单片机正常运行。
(3) STM32中内置了两种看门狗,一个是独立看门狗,另外一个是窗口看门狗,那么这两种看门狗有什么区别呢?

2、 看门狗的工作原理:
(1) 键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗。
(2) 看门狗开始从复位值 0xFFF 递减计数,每次递减1
(3) 计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。
不管何时,我们都可以给键值寄存器(IWDG_KR)中写入0xAAAA,那么单片机就会自动将IWDG_RLR(自动重装载计数器)中的值重新写入键值寄存器(IWDG_KR)中,键值寄存器会从自动重装载计数器的值的基础上,重新向下计数,这就是人们俗称的“喂狗”。那么看门狗是如何实现实时监测程序的呢?看门狗会无时无刻的去喂狗,如果程序发生跑飞的现象,那么单片机程序就不能继续去喂狗,继而计数器计数到0,看门狗产生复位脉冲信号。
IWDG_PR (预分频寄存器)和 IWDG_RLR(自动重装载计数器) 寄存器具有写保护功能,自动写保护功能我们在单片机中已经见到很多了,写保护在现在计算机当中经常遇到,亩的就是保护计算机的程序被随意修改阅读,从而造成程序跑飞等现象。要想取消这两个寄存器的写保护,就要分别向两个寄存器中写入命令,IWDG_KR 寄存器中写入0x5555取消写保护。
IWDG_PR (预分频寄存器)用来设置看门狗的分频系数,刚才我们说到,我们的独立看门狗是LSI(40KHZ)的外部时钟振荡器得到的时钟系数,我们设置了分频系数就可以改变输入看门狗的时钟振荡频率。比如我们设置与分频系数为4,那么得到的分频频率就是10HZ。
3、 独立看门狗常用操作库函数:
(1) IWDG_WriteAccessCmd//取消写保护 向其中写入0x5555
(2) IWDG_SetPrescaler//设置预分频系数
(3) IWDG_SetReload//设置重装载值
(4) IWDG_ReloadCounter//喂狗,写入0xAAAA
(5) IWDG_Enable//使能看门狗
(6) IWDG_GetFlagStatus//获取看门狗此时的状态
4、 独立看门狗的操作步骤
(1) 取消写保护
IWDG_WriteAccessCmd();
(2)设置独立看门狗的预分频系数
IWDG_SetPrescaler();
(3)设置独立看门狗的重装载值
IWDG_SetReload();
(4)使能看门狗
IWDG_Enable();
(5)看门狗喂狗
IWDG_ReloadCounter();
5、 源码分享:

主函数:
