分类: 嵌入式
2021-04-20 10:49:02
voidIWDG_Configuraon(void)
{
//写入0x5555,用于允许狗狗寄存器写入功能
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
//狗狗时钟分频,40K/256=156HZ(6.4ms)T = 1/f
IWDG_SetPrescaler(IWDG_Prescaler_256);
//喂狗时间5s/6.4MS=781。注意不能大于0xfff
IWDG_SetReload(781);
//喂狗
IWDG_ReloadCounter();
//使能狗狗
IWDG_Enable();
}
//窗口看门狗初始化配置(具体可参考原文)
voidWWDG_Configuraon(void)
{
//窗口看门狗时钟允许
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
//看门狗节拍=(36M/4096)/8=1098Hz就是说一秒钟计数器减1098下
WWDG_SetPrescaler(WWDG_Prescaler_8);
//窗口值用0x42就是说计数器满是0x7f在减到0x42之前喂狗了就算喂早了-复位
WWDG_SetWindowValue(0x42);
//看门狗使能并初始化定时器为0x7f最大就是0x7f计数器减到到0x3F(T6位清零)时,则产生一个复位
WWDG_Enable(0x7F);
//ClearEWIflag清中断标记
WWDG_ClearFlag();
//使能EWinterrupt这个会在计数器减到0x40的时候产生一个“死前”中断当然你也可以在这个中断里赶紧
//喂狗-省的狗咬你(复位)
WWDG_EnableIT();
}