1、IWDG
1.1 獨立看門狗簡介
IWDG(Independent watchdog)獨立看門狗,可以用來檢測并解決由于軟體錯誤導致的故障,當計數器到達給定的超時值時,會觸發一個中斷或產生系統復位
獨立看門狗的時鐘是它專用的低速時鐘(LSI),所以它能保持作業及時主時鐘出現問題,視窗看門狗的時鐘是有APB1時鐘分頻得到得到,通過可配置的時間視窗來檢測應用程式非正常的過遲或過早的操作,
IWDG 最適合應用于那些需要看門狗作為一個在主程式之外,能夠完全獨立作業,并且對時間精度要求較低的場合, WWDG 最適合那些要求看門狗在精確計時視窗起作用的應用程式,
1.2 獨立看門狗的特點
①自由運行遞減計數器
②時鐘來自通過獨立的RC振蕩器(可以作業在待機和停止模式下)
③當向下計數器值達到0時,會產生復位(如果看門狗已經激活)
1.3 獨立看門狗功能描述

上圖紅框顯示,看門狗功能由 VDD 電壓域供電,所以在停止模式和待機模式下仍能作業
向關鍵字暫存器(IWDG_KR)寫入0XCCCC,獨立看門狗就會啟動,計數器開始下降從復位值0XFFF,當計數器值到達0,會產生一個復位信號(獨立看門狗復位)
無論何時向關鍵字暫存器寫入0XAAAA,IWDG_RLR的數值會多載進計數器,避免看門狗復位
1.4 硬體看門狗
如果通過器件選項位使能“硬體看門狗”功能,上電時將自動使能看門狗;如果在計數器計數結束前,若軟體沒有向關鍵字暫存器寫入相應的值,則系統會產生復位
1.5 暫存器訪問保護
IWDG_PR 和 IWDG_RLR 暫存器具有寫訪問保護,若要修改暫存器,必須首先對 IWDG_KR暫存器寫入代碼 0x5555,而寫入其他值則會破壞該序列,從而使暫存器訪問保護再次生效,這意味著重裝載操作(即寫入 0xAAAA)也會啟動寫保護功能,
狀態暫存器指示預分頻值和遞減計數器是否正在被更新
1.6 除錯模式
當微控制器進入除錯模式時( Cortex?-M3 內核停止), IWDG 計數器會根據 DBG 模塊中的 DBG_IWDG_STOP 配置位選擇繼續正常作業或者停止作業
下圖是LSI在不同分頻情況下IWDG超時周期的最小值和最大值,

2、WWDG
2.1 簡介
視窗看門狗(Window watchdog)通常被用來監測,由外部干擾或不可預見的邏輯條件造成的應用程式背離正常的運行序列而產生的軟體故障,除非遞減計數器的值在 T6 位變成 0 前被重繪,看門狗電路在達到預置的時間周期時,會產生一個 MCU 復位,如果在遞減計數器達到視窗暫存器值之前重繪控制暫存器中的 7 位遞減計數器值,也會產生 MCU 復位,這意味著必須在限定的時間視窗內重繪計數器
2.2 視窗看門狗主要特點
①可編程自由向下計數器
②復位條件,激活看門狗的情況下,當遞減計數器值小于 0x40 時復位;在視窗之外多載遞減計數器時復位,
③提前喚醒中斷 (EWI):當遞減計數器等于 0x40 時觸發(如果已使能且看門狗已激活)
2.3 視窗看門狗功能說明
如果視窗看門狗啟動(WWDG_CR暫存器的WDGA位置1),7位向下計數器從0X40向0x3F滾動(T6已經清零),會導致一個復位,如果軟體多載計數器,當計數器值大于視窗所存盤的值時,就會產生復位

應用程式必須在正常操作期間寫WWDG_CR暫存器去組織MCU復位,這個操作必須發生在計數器值小于視窗暫存器值,視窗暫存器值存盤在WWDG_CR暫存器,必須在0XFF和0XC0之間,
使能視窗看門狗
復位之后,視窗暫存器經常是禁止的,通過設定WWDG_CR暫存器的WDGA位去使能,不能被禁止除了通過復位,
控制向下計數器
遞減計數器處于自由運行狀態:即使禁止看門狗,遞減計數器仍繼續遞減計數,當使能看門狗時,必須將 T6 位置 1,以防止立即復位
T[5:0] 位包含了看門狗產生復位之前的計時數目;復位前的延時時間在一個最小值和一個最大值之間變化,這是因為寫入 WWDG_CR 暫存器時,預分頻值是未知的,配置暫存器 (WWDG_CFR) 包含視窗的上限:為防止發生復位,當遞減計數器的值低于視窗暫存器值且大于 0x3F 時必須多載
注意:可使用 T6 位產生軟體復位(將 WDGA 位置 1 并將 T6 位清零)

看門狗中斷高級特性
如果在產生實際復位之前必須執行特定的安全操作或資料記錄,則可使用提前喚醒中斷(EWI),通過設定 WWDG_CFR 暫存器中的 EWI 位使能 EWI 中斷,當遞減計數器的值為0x40 時,將生成 EWI 中斷,在復位器件之前,可以使用相應的中斷服務程式 (ISR) 來觸發特定操作(例如通信或資料記錄),
在某些應用中,可以使用 EWI 中斷來管理軟體系統檢查和/或系統恢復/功能退化,而不會生成 WWDG 復位,在這種情況下,相應的中斷服務程式 (ISR) 可用來多載 WWDG 計數器以避免 WWDG 復位,然后再觸發所需操作,
通過將 0 寫入 WWDG_SR 暫存器中的 EWIF 位來清除 EWI 中斷
2.4 如何設定看門狗超時

例子:APB1的頻率是24MHZ,WDGTB[1:0]設定3,T[5:0]設定成63
t = 1/24000*4096*2*2*2*(63+1)= 24.85ms
有關 TWWDG 的最小值和最大值

2.5 除錯模式
微控制器進入除錯模式時( Cortex?-M3內核停止),WWDG計數器會根據DBG模塊中的DBG_WWDG_STOP配置位選擇繼續正常作業或者停止作業
3、區別
應用場景不同
IWDG 最適合應用于那些需要看門狗作為一個在主程式之外,能夠完全獨立作業,并且對時間精度要求較低的場合,
WWDG 最適合那些要求看門狗在精確計時視窗起作用的應用程式
為什么要視窗看門狗?
對于一般的看門狗,程式可以在它產生復位前的任意時刻重繪看門狗,但這有一個隱患,有可能程式跑亂了又跑回到正常的地方,或跑亂的程式正好執行了重繪看門狗操作,這樣的情況下一般的看門狗就檢測不出來了;
如果使用視窗看門狗,程式員可以根據程式正常執行的時間設定重繪看門狗的一個時間視窗,保證不會提前重繪看門狗也不會滯后重繪看門狗,這樣可以檢測出程式沒有按照正常的路徑運行非正常地跳過了某些程式段的情況,
看門狗代碼開源地址:
https://github.com/strongercjd/STM32F207VCT6
點擊查看本文所在的專輯,STM32F207教程
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/256157.html
標籤:嵌入式
上一篇:備份服務-rsync
