11.1 独立看门狗简介
看门狗(Watchdog)就是MCU上的一种特殊的定时器,用于监视系统的运行。在程序正常运行时,定时喂狗,修改计数器的值,保证递减计数器值大于0;在程序发生错误(例如程序出现死循环)时,无法喂狗,独立看门狗作为一个自由运行递减计数器,当递减计数器值达到 0x000 时,软件自动复位。这种机制能够确保系统的稳定性和可靠性,避免由于系统崩溃或死机等问题对整个系统造成的影响。
11.2 IWDG 主要寄存器
关键字寄存器(KR),初始化时先使能,后续喂狗指的是在此寄存器里写入值0xAAAA
PR寄存器用来设置时钟分频,独立看门狗本身就是定时器,此寄存器用来设置分频系数。
RLR重载寄存器,用来存放重载值,当喂狗后,经此寄存器的值写入计数器,计数器重新递减。看门狗的喂狗时间间隔主要跟此值相关。
11.3 应用代码
//初始化独立看门狗
//prer:分频数:0~7(只有低3位有效!)
//rlr:自动重装载值,0~0XFFF.
//分频因子=4*2^prer.但最大值只能是256!
//rlr:重装载寄存器值:低11位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms).
void IWDG_Init()
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对IWDG->PR IWDG->RLR的写
IWDG_SetPrescaler(4); //设置IWDG分频系数
IWDG_SetReload(1000); //设置IWDG装载值
IWDG_ReloadCounter(); //reload
IWDG_Enable(); //使能看门狗
}
//喂独立看门狗
void IWDG_Feed(void)
{
IWDG_ReloadCounter(); //reload
}