STM32單片機:獨立看門狗、窗口看門狗的配置

2021-02-25 21ic電子網
SATM32單片機的看門狗有獨立看門狗和窗口看門狗之分,這兩者的工作原理卻完全不同,今天來看一下他們的具體區別和配置方法。
由專門的低速時鐘(LSI)驅動,即便是主時鐘發生故障它仍能夠有效,所以此狗狗可以工作在與主時鐘無關的要求下,或者待機模塊下等,所以它叫獨立看門狗,注意一旦開啟此看門狗則只能由MCU復位後才清除,讓它不再工作。它的時鐘是一個內部RC時鐘,它會在30KHZ到60KHZ之間變化,並非是精確的40KHZ,而只是一般計算時取40KHZ。其中,預分頻寄存器(IWDG_PR),最低三位PR[2:0](Prescaler divider)有效,可設置有8種不同的計數器時鐘預分頻因子。
重裝載寄存器(IWDG_RLR)低12位RL[11:0]: 看門狗計數器重裝載值 (Watchdog counter reload value) 有效,用來設置計數器的重裝載值。注意要設置以上兩個寄存器的值需滿足兩個條件,詳見如下:鍵寄存器(IWDG_KR),用來控制去除IWDG_PR和IWDG_RLR防寫功能以便正常寫值,向此寄存器寫入0x5555則暫時去除IWDG_PR和IWDG_RLR的防寫功能才可向兩個寄存器中寫值。當向此寄存器寫入0xAAAA則IWDG_RLR的值會重裝載,防止MCU復位,向入0xCCCC是開啟狗立看門狗動作。狀態寄存器(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

另外要注意不要使用硬體時鐘中斷餵狗,因為硬體時鐘中斷一般都有較高優先級且獨立於主控程序,這樣有時會出現主控程序雖然跑飛了,但仍能夠正常餵狗的現象。獨立看門狗能夠在一定程度上監控著程序正常運行,然而我認為更加強大,應用更靈活及更能保證程序穩定運行的還屬窗口看門狗,雖然它開始時不太好理解。

控制寄存器(WWDG_CR)中的值必須在0xFF與0xC0之間, 因為它的第0至第6位為遞減計數器CNT,在它的第6位變為0時將產生復位,所以在初始化時需要為1,第7位WDGA是用來設置啟動或禁止窗口看門狗的,當為1進才會啟動窗口看門狗,所以第6和第7位都需為1,即WWDG_CR 的值需要大於等於0xC0 。配置寄存器(WWDG_CFR) 第0至第6位 是設置窗口邊界值用的,只有當遞減計數器CNT的值小於邊界值時才可以餵狗,過早不行,狗還不餓,撐死了。並且7位遞減計數器CNT減少到0x3F時即T6位變為0,此時MCU也會復位,過晚了,狗餓死了。所以必須在指定的時間範圍餵狗,過早或過晚都將產生復位,而這樣設計可以減少軟體跑飛了卻仍能夠歪打正著地餵狗的發生概率。狀態寄存器(WWDG_CFR) 只用到了第0位,EWIF(Early wakeup interrupt flag )是提前喚醒中斷標識,當遞減計數器CNT的值到達0X40(若再減少一次則T6位變為0,產生復位)時此位由硬體置1,且需用軟體清0,注意無論中斷是否使能此位都會被硬體置1。而提前喚醒中斷使能設置是在配置寄存器(WWDG_CFR)第9位EWI(Early wakeup interrupt),此位需由軟體置1,則會在當遞減計數器CNT的值到達0X40時產生中斷,並且與EWIF不同,此位是由硬體清0。另外控制寄存器(WWDG_CR)中第7位WDGA(Activation bit)激活位,需用軟體來置1,以啟動窗口看門狗,並且一旦啟動後,只能在復位或重啟後由硬體來清0。配置寄存器(WWDG_CFR)的第8位和第7位WDGTB[1:0]用來設置時基(Timer base)預分頻數。
窗口看門狗應用時還要注意算準最小與最大餵狗時間,以便正確地餵狗,如下:
上窗口時間:T_min = 4096 * (2^WDGTB)*(WWDG_CR[6:0] - WWDG_CFR[6:0])/36 (us)下窗口時間:T_max = 4096 * (2^WDGTB)*(WWDG_CR[6:0] - 0x40)/36 (us) 。餵狗動作需在這段時間之間進行,而餵狗動作為向控制寄存器(WWDG_CR)中寫值。窗口看門狗中斷函數void WWDG_IRQHandler(void);是用來做什麼的呢。窗口看門狗中斷函數是在遞減計數器減少到0x40是被調用,因為它本身計數就比較慢,所以離數到0x3F復位還有一段時間,我認為這樣設計是為MCU復位之前留下一點時間,能夠使工程設計人員根據需要在中斷函數保存一些重要的數據,這樣在復位後MCU可知道系統因異常復位的某此狀態,以使系統有更高穩定性。並且我覺得在窗口看門狗中斷函數中餵狗沒有什麼意義,程序本來已經不按正常運行了,還在中斷函數中餵狗防止復位只會錯上加錯,不好好利用它幹點正事, 更是浪費資源。這點上我個人認為不要被點原子示例代碼誤導哦,但其還是有部分借鑑意義的,以下為初始化相關代碼:

  //窗口看門狗中斷服務設置程序
    void WWDG_NVIC_Init()
    {
      NVIC_InitTypeDef NVIC_InitStructure;
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      
      NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;       //WWDG 中斷
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //搶佔2 子優先級3 組2
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;    //搶佔2,子優先級3,組2
      NVIC_Init(&NVIC_InitStructure);                       //NVIC 初始化
    }

//保存WWDG 計數器的設置值,默認為最大.
u8 WWDG_CNT=0x7f;

 //初始化窗口看門狗
    //tr  :T[6:0],計數器值
    //wr   :W[6:0],窗口值
    //fprer:分頻係數(WDGTB ),僅最低2 位有效
    //Fwwdg=PCLK1/(4096*2^fprer).
    void WWDG_Init(u8 tr,u8 wr,u32 fprer)
    {
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 時鐘使能
      WWDG_CNT=tr&WWDG_CNT;      //初始化WWDG_CNT.
      WWDG_SetPrescaler(fprer);        //設置IWDG 預分頻值
      WWDG_SetWindowValue(wr);       //設置窗口值
      WWDG_Enable(WWDG_CNT);       //使能看門狗,設置counter
      WWDG_ClearFlag();               //清除提前喚醒中斷標誌位 (註:若沒有此句則會在初始化後先進入中斷一次)
      WWDG_NVIC_Init();               //初始化窗口看門狗NVIC
      WWDG_EnableIT();                //開啟窗口看門狗中斷
}

以上代碼朋友們也可以跳到庫函數代碼中自己研究下,另外要說明下的是WWDG_EnableIT(); 函數相關代碼

#define CFR_EWI_BB        (PERIPH_BB_BASE + (CFR_OFFSET * 32) + (EWI_BitNumber * 4))

用到位帶操作,具體理解可參照《Cortex-M3權威指南》第五章的位帶操作相關介紹(具體89頁)。

相關焦點

  • STM32的窗口看門狗
    獲取Proteus仿真資料,百度盤群組分享連結更新時間:2016-12-28,失效請在文末留言,不要在後臺留言stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是餵狗的限制時間不同。
  • STM32實例-獨立看門狗(IWDG)實驗
    STM32F1內部自帶了兩個看門狗,一個是獨立看門狗 IWDG,另一個是窗口看門狗 WWDG,本章只介紹獨立看門狗 IWDG,窗口看門狗 WWDG 會在後面章節介紹。要實現的功能是:通過 K_UP 按鍵進行餵狗,餵狗的時候 D2 指示燈點亮,超過餵狗時間產生復位後 D2 指示燈熄滅,同時使用 D1 指示燈閃爍表示系統運行。
  • 【看門狗2】單機遊戲下載,看門狗2配置要求,看門狗2下載
    遊戲介紹《看門狗2》是一款由Ubisoft製作並發行的動作冒險遊戲
  • 看門狗2
    《看門狗2》是由育碧公司開發的一款第三人稱射擊角色扮演遊戲,是《看門狗》的續作,在2016年11月發行。
  • ARM7單片機輕鬆入門與實踐 — 暢學單片機
    LCD1602測試9、LCD12864測試10、OLED測試11、TFT彩屏顯示測試12、TFT彩屏觸屏測試13、8位獨立按鍵測試5、KEIL在線調試硬體連接6、安裝JLINK驅動7、KEIL在線調試講解8、KEIL MDK常用調試命令9、KEIL MDK常用調試窗口
  • 單片機、EDA實訓裝置功能及配置
    I/O口擴展實驗14、並行I/O接口8255應用15、「看門狗」復位實驗16、串行A/D轉換器TLC549應用17、串行D/A轉換器TLC5615應用18、單片機雙機通信實驗_用RS485總線19、USB接口應用實驗20、16X16 LED點陣顯示實驗21、128 X 64 LCD液晶顯示接口實驗
  • 看門狗2多少錢 看門狗2各個版本價格
    看門狗2多少錢?看門狗2價格是多少?我們都知道看門狗2是steam上架的全新爆款遊戲,關於看門狗2的售價是很多玩家都關注的,那麼到底各個版本要多少錢呢?話不多說,下面,就隨琵琶網小編來了解一下吧!
  • 《看門狗2》好玩嗎?
    《看門狗2》的出現給玩家一種「最熟悉的陌生人」的感覺,肩負的雪恥「縮水狗」重任的馬庫斯,為這部作品奠定了一種全新的基調,不同於艾登叔苦大仇深的復仇之路
  • 看門狗2價格是多少 看門狗2微信領取地址分享
    看門狗2價格是多少?看門狗2多少錢?看門狗2微信領取地址是什麼?看門狗2是一款超燃的都市動作冒險類手遊。想必有不少的小夥伴們都想知道吧,下面是看門狗2微信領取地址分享,感興趣的小夥伴們一起來看看吧。
  • 看門狗:軍團
    育碧《看門狗:軍團》存檔問題計劃將於12月初修復 儘管有良好的評價和強勁的銷量,育碧的《看門狗:軍團》仍然面臨不少,特別是存檔方面。
  • 看門狗2售價多少錢 看門狗2免費領取地址是什麼
    看門狗2售價多少錢?看門狗2免費領取地址是什麼?看門狗2在哪免費領取?看門狗2是一款超燃的都市動作冒險類手遊。想必有不少的小夥伴們都想知道吧,下面是看門狗2售價以及免費領取地址介紹,感興趣的小夥伴們一起來看看吧。
  • Avr單片機和Stm32區別,Avr單片機選型技巧
    、TI、ST、MicroChip、ARM…國內的宏晶STC單片機也是可圈可點。最為初學者首先要搞清楚他們之間的區別,掌握avr單片機選型技巧,才能夠更好的設計產品。一:avr單片機和STM32區別-STM32單片機介紹由ST廠商推出的STM32系列單片機,行業的朋友都知道,這是一款性價比超高的系列單片機,應該沒有之一,功能及其強大。
  • 【遊藝資訊】看門狗:軍團
    《看門狗:軍團》現已於10月29日發售並登錄於PS4、Xbox One、谷歌Stadia和Uplay平臺。本作設定在一個虛構的未來倫敦。倫敦在不久的將來面臨衰落:人民被一個能夠監聽一切的部門所壓迫,腐敗的私營軍事企業控制著街道,強大的犯罪集團正在掠奪最脆弱的民眾。
  • Microchip 推出集成低功耗動畫顯示驅動的PIC24F單片機
    全新系列單片機也可輕鬆提高應用的安全性,無論是連接到網際網路還是獨立系統。Microchip的CodeGuard™安全快閃記憶體保護功能可將內存分為引導段和通用段,以實施內存訪問限制。快閃記憶體可通過 Microchip 的在線串行編程(In-Circuit Serial Programming™,ICSP) 寫入限制功能配置為一次性可編程 (OTP),從而禁止通過外部編程器/調試器進行任何進一步修改。此外,還可以使用 Microchip 的 CryptoAuthentication™ 器件作為配套晶片進一步增強安全性,以增加安全的遠程更新和預先配置雲服務。
  • 年前福利:《看門狗2》免安裝中文版下載
    【遊戲封面】中文名稱:看門狗2遊戲名稱:Watch Dogs 2遊戲類型
  • 單片機編程:如何餵狗的靈魂拷問...
    [導讀] 單片機程序寫辣麼多,看門狗狗天天見,你的狗狗養的對麼?不停的餵狗,只要狗不叫就完了嘛?真是這樣麼?事實上可能不是你想的辣麼簡單啥叫看門狗? 看門狗也稱為看門狗定時器,本質上是一種定時電路或者軟體定時器機制。
  • 看門狗2特殊車輛名稱及種類一覽 看門狗2車輛有哪些
    導 讀 看門狗2車輛有哪些?今天小編就為大家帶來看門狗2特殊車輛名稱及種類一覽,讓我們來一起看看吧!
  • 《看門狗:軍團》性能實測,5600XT才入門
    看門狗軍團的遊戲背景設定在一個虛構的未來倫敦。倫敦在不久的將來面臨衰落:人民被一個能夠監聽一切的部門所壓迫,腐敗的私營軍事企業阿爾比恩控制著街道,強大的犯罪集團凱利幫正在掠奪最脆弱的民眾。在《看門狗:軍團》中,玩家的任務是組建抵抗力量反抗獨裁政權。
  • 《看門狗:軍團》強勢來襲,虎牙直播攜手技嘉送大禮!
    為了讓主播能夠以更好的效果和幀數體驗《看門狗:軍團》,作為知名的PC硬體板卡廠家之一的技嘉全力贊助虎牙多位熱門主播的硬體配置,讓他們能在直播《看門狗:軍團》遊戲的過程中,全面提升整體PC性能,畫質特效全開,一路暢玩無阻。
  • 暢玩《看門狗3》,技嘉整機免息優惠來襲
    10月29日,經過了接近半年的跳票後,3A遊戲大作《看門狗:軍團》(又稱看門狗3)正式上市。    為了讓用戶能夠以更好的效果和幀數體驗《看門狗:軍團》,作為知名的PC硬體板卡廠家之一的技嘉順勢開啟了3A遊戲整機優惠活動,並且針對入門與高端玩家都準備了對應的檔位機型選擇,一起來了解下吧。