1. 程式人生 > >STM32F4學習筆記9——獨立看門狗與視窗看門狗

STM32F4學習筆記9——獨立看門狗與視窗看門狗

STM32F4xx內建倆個看門狗,提供了更高的安全性、時間的精確性和使用的靈活性。兩個看門狗裝置可用來檢測和解決由軟體錯誤引起的故障;當計數器大道給定的超時值觸發一箇中斷(觸發中斷僅適用於視窗看門狗)或產生系統復位。
地理看門狗IWDG有用們的低速時鐘LSI驅動,及時主時鐘發生故障他也任然有效。視窗看門狗由APB1是中國分頻後得到的時鐘驅動,通過可配置的時間視窗來檢測應用程式非正常的過遲或過早的操作。
IWDG最時候用於哪些需要一個看門狗在主程式之外能夠獨立工作並且對時間精度要求較低的場合,WWDG適合用於哪些要求看門狗在精確計算計時視窗起作用的應用程式。

IWDG主要特性與功能
·自由執行的遞減計數器
·時鐘由獨立RC振盪器提供(可工作在停止和待機模式下)
·看門狗被啟用後,則在計數器計到0x000是產生復位
IWDG功能圖


在暫存器(IWDG_KR)中寫入0xCCCC,開始啟用獨立看門狗;此時計數器開始從其復位值0xFFF遞減計數。當計數器寄到末尾0x000時會產生一個復位訊號(IWDG_RESET)。無論何時,只要在暫存器IWDG中寫入IWDG_KR中寫入0xAAAA,IWDG_RLR中的值就會被重新載入到計數器,從而避免產生看門狗復位。

硬體看門狗
如果使用者在選擇位元組中啟用了“硬體看門狗”,在系統上電覆位後,看門狗會自動開始執行;如果在計數器結束前,若軟體沒有向暫存器寫入相應的值,則系統會產生復位。
暫存器訪問保護
IWDG_PR和IWDG_RLR暫存器具有防寫功能。要修改這兩個暫存器的值,必須先向IWDG_KR暫存器中寫入0x5555.以不同的值寫入這個暫存器將會打亂操作順序,暫存器將重新被保護。重灌在操作(寫入0
xAAAA)也會啟動防寫功能。狀態暫存器指示預分配暫存器跟遞減計數器是否正在被更新。
除錯模式
當微控制器進入除錯模式時(M4核心停止),根據除錯模組中的DBG_IWDG_STOP配置位狀態,IWDG的計數器能夠繼續工作或停止。

STM32F4的IWDG庫
下面是介紹如何使用看門狗驅動 :
·通過函式IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable)使能寫暫存器IWDG_PR和IWDG_RLR
·通過函式IWDG_SetPrescaler()配置IWDG分頻
·通過函式IWDG_SetReload配置IWDG計數器,每次重灌後,計數器將這個值做遞減。
·通過IWDG_Enable()來使能IWDG,當看門狗工作在軟體模式時(不需要使能LSI,會有硬體自動使能)。
·定時器應該定時呼叫函式IWDG_ReloadCounter()防止系統復位。

分頻器和計數器配置函式
void IWDG_WriteAccessCmd(unit16_t IWDG_WriteAccess)
void IWDG_SetPrescaler(unit8_t IWDG_Prescaler)
void IWDG_SetPrescaler(uint16_t Relaod)
void IWDG_ReloadCounter(void)
看門狗啟用函式
void IWDG_Enable(void)使能看門狗
標誌管理函式
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG)用於檢測看門狗標誌

WWDG的主要特性與功能
·可程式設計的自由執行遞減計數器
·條件復位
當遞減計數器值小於0x40,若看門狗被啟動則產生復位
當遞減計數器在視窗外被重新裝載,若看門狗被啟動則產生復位
·若果啟動了看門狗並允許中斷,當遞減計數器等於0x40是產生早起喚醒中斷(EWI),他可以被用於重灌載計數器避免WWD復位。

如果看門狗被啟動(WWDG_CR暫存器中的WDGA位被置1),並且7位遞減計數器T【6:0]從0x40翻轉到0x3f(T6位清零)時則產生一個復位。如果軟體計數器大於視窗暫存器中的數值時重灌載計數器將產生一個復位。
WWDG框圖
應用程式在正常執行過程中必須定期的寫入WWDG_CR暫存器以防止MCU發生復位。只有當計數器值小於視窗暫存器時,才能進行寫操作。儲存在WWDG_CR暫存器中的數值必須在0xff和0xc0之間。

啟動看門狗
在系統復位後,看門狗總歸是處於關閉狀態,設定WWDG_CR暫存器的WDGA位能夠開啟看門狗,隨後他不能再被關閉,除非發生復位。
控制遞減計數器
遞減計數器處於自由執行狀態,即使看門狗被關閉遞減計數器任然繼續遞減計數。當看門狗被啟用時T6位必須被設定,以防止產生一個復位。T【5:0】位包含了看門狗復位產生之前的計數數目;復位前的延時在一個最小值和一個最大值之間變化,這是應為寫入WWDG_CR是其預分頻是未知的。配置WWDG_CFR中包含視窗的上限值:要避免產生復位遞減計數器的值小於視窗暫存器的數值且大於0x3f時被重新裝載,0描述了視窗暫存器的工作過程。另一個重灌載計數器的方法是利用早期喚醒中斷EWI。設定WWDG_CFR暫存器中的WEI位開啟中斷。當遞減計數器到達0x40時,則產生次中斷,相應的中斷服務程式ISR可以用來載入計數器防止WWDG復位。在WWDG_SR暫存器中寫0可以清楚該中斷。
注意:可以用 T6 位 產生一個軟體復位(設定 WDGA位為’ 1’, T6 位為’ 0’)。

看門狗中斷特性
實際的復位產生前,如果需要執行專門的安全操作或者記錄資料,呢麼EWI中斷就派上了用場。EWI終端有WWDG_CFR的EWI使能位。當地建計數器計到0x40的時候,EWI中斷將產生,在裝置復位前,我們可以在中斷服務程式裡面執行或者資料記錄。
在一些應用中,EWI終端可以被用來管理軟體系統檢查/或系統恢復graceful degradation,而不會產生一個WWDG復位。這種情況的話,使用者需要在ISR中清除中斷標誌並喂狗,防止產生系統復位。然後出發需要的操作。
EWI中斷可以通過向暫存器WWDG_SR的EWIF位寫0來清除。
除錯模式
當微控制器進入除錯模式(M4核心停止),根據除錯中的DBG_WWDG_STOP配置位的狀態,WWDG的計數器能夠繼續工作或停止

如何編寫串列埠看門狗程式

STM32F4的WWDG庫
WWDG計數器輸入時鐘是由 APB1時鐘分頻而來:
WWDG 計數器時鐘 = PCLK1 / Prescaler
WWDG 溢位時間 = (WWDG counter clock) * (counter value)
最大最小溢位時間: @42 MHz(PCLK1): ~97.5 us / 49.9 ms
如何使用看門狗驅動
·通過函式RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE)使能視窗看門狗時鐘
·通過函式WWDG_SetPrescaler()設定看門狗分頻。
·設定WWDG計數器數值,通過函式WWDG_Enable()啟動WWDG,情動WWDG以後,計數器的數值設定要大於0x40,防止立即產生復位
·使用者可以懸著是否產生EWI中斷,在此中斷計數器到0x40時產生,一旦是能。系統復位時將無法將其關閉
·在阻止系統產生福誒的正常操作期間,使用者需要在每個時間間隔通過函式WWDG_SetCounter()重新整理計數器沒重新整理操作只能在計數器值小於設定視窗只時進行,視窗只通過函式WWDG_SetWindowValue()設定。

分頻器,視窗重新整理,計數器配置函式
void WWDG_DeInit(void)
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler)
void WWDG_SetWindowValue(uint8_t WindowValue)
void WWDG_EnableIT(void)
void WWDG_SetCoounter(uint8_t Counter)
獨立看門狗啟用函式
void WWDG_Enable(uint8_t Counter)
中斷標誌管理
FlagStatus WWDG_GetFlagStatue(void)
void WWDG_CLearFlag(void)