一、獨立看門狗和視窗看門狗
看門狗:單片機系統在外界的干擾下會出現程式跑飛的現象導致死回圈,或者崩潰,看門狗電路就是為了避免這種情況的發生,看門狗的作用就是在一定的事件內(通過計數器實作)若沒有收到喂狗信號(表示MCU已經掛了),便實作處理器的自動復位重啟(發送復位信號)
獨立看門狗IWDG:獨立于系統之外,因為有獨立時鐘30-60KHz,所以是不受系統影響的系統故障檢測器,主要用于監視硬體錯誤,
視窗看門狗WWDG:系統內部的故障探測器,時鐘與系統相同,如果系統時鐘不走了,這個狗也就失去了作用,主要用于監視軟體錯誤
二、兩者區別
視窗看門狗實際上是設定一個視窗(上下限),這個范圍內,你才允許喂狗,只要不在這個范圍內,都會復位,獨立看門狗只要規定的時間沒到,都可以喂狗,
視窗看門狗計時的時間比獨立看門狗精準,視窗看門狗使用的是系統時鐘源,
三、軟體設計(獨立看門狗)
子函式
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(); //使能IWDG10 }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 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/36223.html
標籤:嵌入式
下一篇:IAR8.X安裝教程
