STM32 看門狗詳解

語言: CN / TW / HK

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教程