STM32的兩隻狗兒——狗立看門狗

STM32狗立看門狗,由專門的低速時鐘(LSI)驅動,即使是主時鐘發生故障它仍可以有效,因此此狗狗能夠工做在與主時鐘無關的要求下,或者待機模塊下等,因此它叫獨立看門狗,注意一旦開啓此看門狗則只能由MCU復位後才清除,讓它再也不工做。 ide

它的時鐘是一個內部RC時鐘,它會在30KHZ60KHZ之間變化,並不是是精確的40KHZ,而只是通常計算時取40KHZ 函數

 

狗立看門狗需設置四個寄存器以下: spa

其中, code

預分頻寄存器(IWDG_PR),最低三位PR[2:0](Prescaler divider)有效,可設置有8種不一樣的計數器時鐘預分頻因子。 it

重裝載寄存器(IWDG_RLR)12RL[11:0]: 看門狗計數器重裝載值 (Watchdog counter reload value) 有效,用來設置計數器的重裝載值。 class

注意要設置以上兩個寄存器的值需知足兩個條件,詳見以下。 監控

 

鍵寄存器(IWDG_KR),用來控制去除IWDG_PRIWDG_RLR寫保護功能以便正常寫值,向此寄存器寫入0x5555則暫時去除IWDG_PRIWDG_RLR的寫保護功能纔可向兩個寄存器中寫值。當向此寄存器寫入0xAAAAIWDG_RLR的值會重裝載,防止MCU復位,向入0xCCCC是開啓狗立看門狗動做。 date

 

狀態寄存器(IWDG_SR)最低兩位有效RVU: 看門狗計數器重裝載值更新 (Watchdog counter reload value update) 標識位和PVU: 看門狗預分頻值更新 (Watchdog prescaler value update) 標識位,分別用來指示此時是否可向IWDG_RLR  IWDG_PR寫值,此寄存器由硬件置1與清0,只有當爲0時纔可向上面兩個寄存器寫值。 硬件

 

它的初始化過程大體以下  程序

//時間計算(大概):Tout=((4*2^prer)*rlr)/40 (ms)
void IWDG_Init(u8 prer,u16 rlr)
{       
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 
         IWDG_SetPrescaler(prer);   
         IWDG_SetReload(rlr); 
         IWDG_ReloadCounter();      
         IWDG_Enable(); 
}

喂狗可經過調用以下函數進行:

IWDG_ReloadCounter();//reload

 

以上參考正點原子相關代碼,朋友們能夠跳到庫函數代碼中本身研究下,控制比較簡單,再也不贅述。另外要注意不要使用硬件時鐘中斷喂狗,由於硬件時鐘中斷通常都有較高優先級且獨立於主控程序,這樣有時會出現主控程序雖然跑飛了,但仍可以正常喂狗的現象。

獨立看門狗可以在必定程度上監控着程序正常運行,然而我認爲更增強大,應用更靈活及更能保證程序穩定運行的還屬窗口看門狗,雖然它開始時不太好理解,請看下篇。


相關文章
相關標籤/搜索