1. 程式人生 > >[STM31F103]獨立看門狗

[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