1、獨立看門狗和窗口看門狗函數
看門狗:單片機系統在外界的干擾下會出現程序跑飛的現象致使死循環,或者崩潰,看門狗電路就是爲了不這種狀況的發生,看門狗的做用就是在必定的事件內(經過計數器實現)若沒有收到喂狗信號(表示MCU已經掛了),便實現處理器的自動復位重啓(發送復位信號)spa
獨立看門狗IWDG:獨立於系統以外,由於有獨立時鐘30-60KHz,因此是不受系統影響的系統故障檢測器,主要用於監視硬件錯誤。設計
窗口看門狗WWDG:系統內部的故障探測器,時鐘與系統相同。若是系統時鐘不走了,這個狗也就失去了做用,主要用於監視軟件錯誤code
2、二者區別blog
窗口看門狗其實是設置一個窗口(上下限),這個範圍內,你才容許喂狗,只要不在這個範圍內,都會復位。獨立看門狗只要規定的時間沒到,均可以喂狗。事件
窗口看門狗計時的時間比獨立看門狗精準,窗口看門狗使用的是系統時鐘源。 it
3、軟件設計(獨立看門狗)class
子函數軟件
1 #include "iwdg.h" 2 //時間計算(大概):Tout=((4*2^prer)*rlr)/40 (ms). 3 void IWDG_Init(u8 prer, u16 rlr) 4 { 5 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能對寄存器IWDG_PR和IWDG_RLR的寫操做 6 IWDG_SetPrescaler(prer); //設置IWDG預分頻值:64 7 IWDG_SetReload(rlr); //設置IWDG重裝載值 8 IWDG_ReloadCounter(); //按照IWDG重裝載寄存器的值重裝載IWDG計數器 9 IWDG_Enable(); //使能IWDG 10 } 11 void IWDG_Feed(void) 12 { 13 IWDG_ReloadCounter();//reload喂狗 14 }
主函數循環
1 #include "led.h" 2 #include "key.h" 3 #include "delay.h" 4 #include "sys.h" 5 //#include "beep.h" 6 #include "iwdg.h" 7 8 int main(void) 9 { 10 delay_init(); 11 LED_Init(); 12 KEY_Init(); 13 //BEEP_Init(); 14 delay_ms(200); 15 IWDG_Init(4,625); 16 LED0 = 0; 17 while(1) 18 { 19 if(Key_Value(0)==WK_UP_DOWN) 20 { 21 IWDG_ReloadCounter(); //喂狗 22 } 23 delay_ms(10); 24 } 25 }