1.为什么要看门狗
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗"(watchdog)。
2.独立看门狗需要用的几个寄存器
1)键值寄存器 IWDG_KR
在键寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位
值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。 无
论何时,只要键寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新加载到
计数器中从而避免产生看门狗复位 。
2)分频寄存器(IWDG_PR)
该寄存器用来设置看门狗时钟的分频系数,
最低为 4,最高位 256,该寄存器是一个 32 位的寄存器,但是我们只用了最低 3 位,其他都是
保留位。预分频寄存器各位定义如图:
3)重装载寄存器
该寄存器用来保存重装载到计数
器中的值。该寄存器也是一个 32 位寄存器,但是只有低 12 位是有效的,该寄存器的各位描述
如图所示:
下面通过一个 LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗
3.硬件设计
本实验用到的硬件资源有:
1) 指示灯 DS0
2) KEY 按键
3) 独立看门狗
喂狗采用板上的 KEY1 键来操作
指示当前状态通过 DS0 来显示
4.软件设计
iwdg.c 里面的代码如下:
设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间(也就是看门狗溢
出时间),该时间的计算方式为:
Tout=((4×2^prer) ×rlr) /40
main.c里面的代码如下
5.下载验证
在编译成功之后,我们就可以下载代码到 MiniSTM32 开发板上,实际验证一下,我们的程
序是否正确。下载代码后,可以看到 DS0 不停的闪烁,证明程序在不停的复位,否则只会 DS0
常亮。这时我们试试不停的按 KEY1 按键,可以看到 DS0 就常亮了,不会再闪烁。说明我们
的实验是成功的。