关于看门狗一词,它是一个为了防止程序由于各种原因跑飞而设计的一种相当计数器的玩意,想一下,如果你的程序突然死机或出现了bug,没办法运行了,你要手动去重启机器,而看门狗的作用便是帮你检测程序是否出现问题,如果程序因为某些原因而跑飞了,这只狗就帮你重启机器。
具体运行:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗。stm32有两个看门狗,一个是IWDG(独立看门狗),它是由LSI(低速内部时钟)驱动,所以在机器主时钟损坏的时候依然有效。
看门狗的四个寄存器:
IWDG_KR(键寄存器),IWDG_PR(预分频寄存器),IWDG_PLR(重装载寄存器),IWDG_SR(状态寄存器)
寄存器的配置:
#include “IWDG.h”
/* 时间Tout = prv/40 * rlv (s) prv:预分频系数 rlv重装值*/
void Iwdg_Init()
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//设置KR;往KR写入0x5555才能访问PR和PLR寄存器
IWDG_SetPrescaler(4);//设置预分频系数,即配置PR寄存器
IWDG_SetReload(625);//设置重装载值,即配置PLR寄存器
IWDG_ReloadCounter();//装值0xaaaa,开始计数
IWDG_Enable();//使能看门狗
}
void Feed_Iwdg()
{
IWDG_ReloadCounter();//重装0xaaaa,看门狗重新计数,不会发出reset信号
}
代码便是这些了,至于主程序,可以在主程序while循环,让LED0在闪烁,设置KEY0为中断,按下KEY0键后,看门狗喂食,不在闪烁。