独立看门狗步骤:
l 取消寄存器写保护:
n IWDG_WriteAccessCmd();
l 设置独立看门狗的预分频系数,确定时钟:
n IWDG_SetPrescaler();
l 设置看门狗重装载值,确定溢出时间:
n IWDG_SetReload();
l 使能看门狗
n IWDG_Enable();
l 应用程序喂狗:
n IWDG_ReloadCounter();
l 溢出时间计算:
n Tout=((4×2^prer) ×rlr) /40 (M3)时钟为LSI 40KHZ
源码:
//wdg.c
//pere:分频数:0~7 只有低三位有效
//分频因子=4*2^prer,但最大只能256
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(prer); IWDG_SetReload(rlr);
IWDG_ReloadCounter();
IWDG_Enable();
}
//喂狗
void IWDG_Feed(void)
{
IWDG_ReloadCounter();//reload
} //main.c
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init();
LED_Init();
KEY_Init();
delay_ms();
IWDG_Init(,);
LED0=;
while()
{
if(KEY_Scan()==WKUP_PRES)
{
IWDG_Feed();
}
delay_ms();
};
} 喂狗使程序不会复位,这样LED灯就不会熄灭然后500ms再亮,溢出时间1S