[STM31F103]独立看门狗

独立看门狗步骤:

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

猜你喜欢

转载自www.cnblogs.com/zhaohu/p/9975034.html