嵌入式02 STM32 實驗09 獨立/窗口看門狗

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 }
相關文章
相關標籤/搜索