stm32看門狗的定義與分類

stm32看門狗

一、定義

由於單片機的工作常常會受到來自外界電磁場的干擾,造成程序的跑飛,而陷入死循環,程序的正常運行被打斷,由單片機控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的後果,所以出於對單片機運行狀態進行實時監測的考慮,便產生了一種專門用於監測單片機程序運行狀態的模塊或者芯片,俗稱看門狗”(watchdog)

二、分類

STM32內置兩個看門狗,獨立看門狗和窗口看門狗,用來檢測和解決由軟件錯誤引起的故障。當計數器達到給定的超時值時,產生系統復位或者觸發一箇中斷(僅適用窗口看門狗)。

(一)、獨立看門狗(IWDG)

如果餵狗時間超出某個可設定的時間,就會認爲程序跑飛,產生復位。
由專用的低速時鐘(LSI)驅動,即使主時鐘發生故障它仍有效。
獨立看門狗適合應用於需要看門狗作爲一個在主程序之外 能夠完全獨立工作,並
且對時間精度要求低的場合。
在這裏插入圖片描述
鍵寄存器(IWDG_KR)

  • 位31:16 保留,始終讀爲0。
  • 位15:0 KEY[15:0]: 鍵值(只寫寄存器,讀出值爲0x0000)
  • 寫入0xAAAA,重載計數器。軟件必須以一定的間隔寫入0xAAAA,否則,當計數器爲0時,看門狗會產生復位。
  • 寫入0x5555表示允許訪問IWDG_PR和IWDG_RLR寄存器。
  • 寫入0xCCCC,啓動看門狗工作(若選擇了硬件看門狗則不受此命令字限制)。

(二)、窗口看門狗

餵狗必須在某個可設定的時間窗內進行,早於或晚於這個時間窗餵狗都會觸發復位。
由從APB1時鐘分頻後得到時鐘驅動。
通過可配置的時間窗口來檢測應用程序非正常的過遲或過早操作。
窗口看門狗最適合那些要求看門狗在精確計時窗口起作用的程序。
在這裏插入圖片描述
如果看門狗被啓動(WWDG_CR寄存器中的WDGA位被置’1’), 並且當7位(T[6:0])遞減計數器從0x40(T6爲1)翻轉到0x3F(T6位清零)時,則產生一個復位。
如果軟件在計數器值大於窗口配置寄存器中的數值(WWDG_CFR)時重新裝載計數器,也將產生一個復位。

(三)二者相同點

  1. 軟件代碼一直死循環在某處,無法餵狗,導致產生復位
  2. 代碼運行超時,或外部一直觸發中斷,導致無法餵狗產生復位
  3. 餵狗時間限制可以自己設定

(四)二者不同點

  1. 計數器時鐘源不同
    • 獨立看門狗由內部專門的40KHz的LSI時鐘,使用前不需使能
    • 窗口看門狗使用PCLK1時鐘,使用前需要使能。
  2. 中斷不都有
    • 獨立看門狗不產生中斷,超時直接復位
    • 窗口看門狗有中斷,超時可以在中斷中做復位前的函數炒作或者重新餵狗。
  3. 計數方式不同
    • 獨立看門狗的寄存器是12位遞減
    • 窗口看門狗是7位遞減,窗口最大值爲0x7F
  4. 超時復位時間範圍不同
    • 獨立看門狗:計數值 < IWDG重裝載值時餵狗
    • 窗口看門狗:0x40 < 計數器值 < 窗口值Wt期間餵狗,0x40是固定的。
  5. 使用條件推薦
    • 獨立看門狗一般用於避免程序跑飛或死循環
    • 窗口看門狗用於避免不按預定邏輯執行,如先於理想環境完成,或後於極
    限時間超時。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章