理解
看门狗的作用主要用于监控程序的运行,处理bug,如果不在规定的时间内喂狗,则认为程序运行出错,重置或者执行其它的步骤。
关键代码
void IWDG_Config(uint8_t prv ,uint16_t rlv)
{
// 使能 预分频寄存器PR和重装载寄存器RLR可写
//IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
// 设置预分频器值
IWDG_SetPrescaler( prv );
// 设置重装载寄存器值
IWDG_SetReload( rlv );
// 把重装载寄存器的值放到计数器中
IWDG_ReloadCounter();
// 使能 IWDG
IWDG_Enable();
}
独立看门狗复位判断
/* 检查是否为独立看门狗复位 */
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
{
/* 独立看门狗复位 */
/* 亮红灯 */
LED_RED;
/* 清除标志 */
RCC_ClearFlag();
/*如果一直不喂狗,会一直复位,加上前面的延时,会看到红灯闪烁
在1s 时间内喂狗的话,则会持续亮绿灯*/
}
else
{
/*不是独立看门狗复位(可能为上电复位或者手动按键复位之类的) */
/* 亮蓝灯 */
LED_BLUE;
}
4、超时时间计算
Tout = prv/40 * rlv (s),其中prv=[4,8,16,32,64,128,256]中的一个,rlv:预分频器值,取值范围为:0-0XFFF。
例如:IWDG_Config(IWDG_Prescaler_64 ,625); 其中IWDG_Prescaler_64=prv=64,
即 Tout=64/40 * 625=1.6*625=1000ms=1s。溢出时间为1s。