独立看门狗步骤:
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
源码:
1 //wdg.c 2 //pere:分频数:0~7 只有低三位有效 3 //分频因子=4*2^prer,但最大只能256 4 void IWDG_Init(u8 prer,u16 rlr) 5 { 6 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 7 IWDG_SetPrescaler(prer); 8 9 IWDG_SetReload(rlr); 10 IWDG_ReloadCounter(); 11 IWDG_Enable(); 12 } 13 //喂狗 14 void IWDG_Feed(void) 15 { 16 IWDG_ReloadCounter();//reload 17 } 18 19 //main.c 20 int main(void) 21 { 22 delay_init(); 23 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 24 uart_init(115200); 25 LED_Init(); 26 KEY_Init(); 27 delay_ms(500); 28 IWDG_Init(4,625); 29 LED0=0; 30 while(1) 31 { 32 if(KEY_Scan(0)==WKUP_PRES) 33 { 34 IWDG_Feed(); 35 } 36 delay_ms(10); 37 }; 38 } 39 40 喂狗使程序不会复位,这样LED灯就不会熄灭然后500ms再亮,溢出时间1S