STM32F4xx內(nèi)置倆個看門狗,提供了更高的安全性、時間的精確性和使用的靈活性。兩個看門狗設備可用來檢測和解決由軟件錯誤引起的故障;當計數(shù)器大道給定的超時值觸發(fā)一個中斷(觸發(fā)中斷僅適用于窗口看門狗)或產(chǎn)生系統(tǒng)復位。
地理看門狗IWDG有用們的低速時鐘LSI驅動,及時主時鐘發(fā)生故障他也任然有效。窗口看門狗由APB1是中國分頻后得到的時鐘驅動,通過可配置的時間窗口來檢測應用程序非正常的過遲或過早的操作。
IWDG最時候用于哪些需要一個看門狗在主程序之外能夠獨立工作并且對時間精度要求較低的場合,WWDG適合用于哪些要求看門狗在精確計算計時窗口起作用的應用程序。
IWDG主要特性與功能
·自由運行的遞減計數(shù)器
·時鐘由獨立RC振蕩器提供(可工作在停止和待機模式下)
·看門狗被激活后,則在計數(shù)器計到0x000是產(chǎn)生復位
在寄存器(IWDG_KR)中寫入0xCCCC,開始啟用獨立看門狗;此時計數(shù)器開始從其復位值0xFFF遞減計數(shù)。當計數(shù)器寄到末尾0x000時會產(chǎn)生一個復位信號(IWDG_RESET)。無論何時,只要在寄存器IWDG中寫入IWDG_KR中寫入0xAAAA,IWDG_RLR中的值就會被重新加載到計數(shù)器,從而避免產(chǎn)生看門狗復位。
硬件看門狗
如果用戶在選擇字節(jié)中啟用了“硬件看門狗”,在系統(tǒng)上電復位后,看門狗會自動開始運行;如果在計數(shù)器結束前,若軟件沒有向寄存器寫入相應的值,則系統(tǒng)會產(chǎn)生復位。
寄存器訪問保護
IWDG_PR和IWDG_RLR寄存器具有寫保護功能。要修改這兩個寄存器的值,必須先向IWDG_KR寄存器中寫入0x5555.以不同的值寫入這個寄存器將會打亂操作順序,寄存器將重新被保護。重裝在操作(寫入0
xAAAA)也會啟動寫保護功能。狀態(tài)寄存器指示預分配寄存器跟遞減計數(shù)器是否正在被更新。
調(diào)試模式
當微控制器進入調(diào)試模式時(M4核心停止),根據(jù)調(diào)試模塊中的DBG_IWDG_STOP配置位狀態(tài),IWDG的計數(shù)器能夠繼續(xù)工作或停止。
STM32F4的IWDG庫
下面是介紹如何使用看門狗驅動 :
·通過函數(shù)IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable)使能寫寄存器IWDG_PR和IWDG_RLR
·通過函數(shù)IWDG_SetPrescaler()配置IWDG分頻
·通過函數(shù)IWDG_SetReload配置IWDG計數(shù)器,每次重裝后,計數(shù)器將這個值做遞減。
·通過IWDG_Enable()來使能IWDG,當看門狗工作在軟件模式時(不需要使能LSI,會有硬件自動使能)。
·定時器應該定時調(diào)用函數(shù)IWDG_ReloadCounter()防止系統(tǒng)復位。
分頻器和計數(shù)器配置函數(shù)
void IWDG_WriteAccessCmd(unit16_t IWDG_WriteAccess)
void IWDG_SetPrescaler(unit8_t IWDG_Prescaler)
void IWDG_SetPrescaler(uint16_t Relaod)
void IWDG_ReloadCounter(void)
看門狗激活函數(shù)
void IWDG_Enable(void)使能看門狗
標志管理函數(shù)
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG)用于檢測看門狗標志
WWDG的主要特性與功能
·可編程的自由運行遞減計數(shù)器
·條件復位
當遞減計數(shù)器值小于0x40,若看門狗被啟動則產(chǎn)生復位
當遞減計數(shù)器在窗口外被重新裝載,若看門狗被啟動則產(chǎn)生復位
·若果啟動了看門狗并允許中斷,當遞減計數(shù)器等于0x40是產(chǎn)生早起喚醒中斷(EWI),他可以被用于重裝載計數(shù)器避免WWD復位。
如果看門狗被啟動(WWDG_CR寄存器中的WDGA位被置1),并且7位遞減計數(shù)器T【6:0]從0x40翻轉到0x3f(T6位清零)時則產(chǎn)生一個復位。如果軟件計數(shù)器大于窗口寄存器中的數(shù)值時重裝載計數(shù)器將產(chǎn)生一個復位。
應用程序在正常運行過程中必須定期的寫入WWDG_CR寄存器以防止MCU發(fā)生復位。只有當計數(shù)器值小于窗口寄存器時,才能進行寫操作。存儲在WWDG_CR寄存器中的數(shù)值必須在0xff和0xc0之間。
啟動看門狗
在系統(tǒng)復位后,看門狗總歸是處于關閉狀態(tài),設置WWDG_CR寄存器的WDGA位能夠開啟看門狗,隨后他不能再被關閉,除非發(fā)生復位。
控制遞減計數(shù)器
遞減計數(shù)器處于自由運行狀態(tài),即使看門狗被關閉遞減計數(shù)器任然繼續(xù)遞減計數(shù)。當看門狗被啟用時T6位必須被設置,以防止產(chǎn)生一個復位。T【5:0】位包含了看門狗復位產(chǎn)生之前的計數(shù)數(shù)目;復位前的延時在一個最小值和一個最大值之間變化,這是應為寫入WWDG_CR是其預分頻是未知的。配置WWDG_CFR中包含窗口的上限值:要避免產(chǎn)生復位遞減計數(shù)器的值小于窗口寄存器的數(shù)值且大于0x3f時被重新裝載,0描述了窗口寄存器的工作過程。另一個重裝載計數(shù)器的方法是利用早期喚醒中斷EWI。設置WWDG_CFR寄存器中的WEI位開啟中斷。當遞減計數(shù)器到達0x40時,則產(chǎn)生次中斷,相應的中斷服務程序ISR可以用來加載計數(shù)器防止WWDG復位。在WWDG_SR寄存器中寫0可以清楚該中斷。
注意:可以用 T6 位 產(chǎn)生一個軟件復位(設置 WDGA位為’ 1’, T6 位為’ 0’)。
看門狗中斷特性
實際的復位產(chǎn)生前,如果需要執(zhí)行專門的安全操作或者記錄數(shù)據(jù),呢么EWI中斷就派上了用場。EWI終端有WWDG_CFR的EWI使能位。當?shù)亟ㄓ嫈?shù)器計到0x40的時候,EWI中斷將產(chǎn)生,在設備復位前,我們可以在中斷服務程序里面執(zhí)行或者數(shù)據(jù)記錄。
在一些應用中,EWI終端可以被用來管理軟件系統(tǒng)檢查/或系統(tǒng)恢復graceful degradation,而不會產(chǎn)生一個WWDG復位。這種情況的話,用戶需要在ISR中清除中斷標志并喂狗,防止產(chǎn)生系統(tǒng)復位。然后出發(fā)需要的操作。
EWI中斷可以通過向寄存器WWDG_SR的EWIF位寫0來清除。
調(diào)試模式
當微控制器進入調(diào)試模式(M4核心停止),根據(jù)調(diào)試中的DBG_WWDG_STOP配置位的狀態(tài),WWDG的計數(shù)器能夠繼續(xù)工作或停止
如何編寫串口看門狗程序
STM32F4的WWDG庫
WWDG計數(shù)器輸入時鐘是由 APB1時鐘分頻而來:
WWDG 計數(shù)器時鐘 = PCLK1 / Prescaler
WWDG 溢出時間 = (WWDG counter clock) * (counter value)
最大最小溢出時間: @42 MHz(PCLK1): ~97.5 us / 49.9 ms
如何使用看門狗驅動
·通過函數(shù)RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE)使能窗口看門狗時鐘
·通過函數(shù)WWDG_SetPrescaler()設置看門狗分頻。
·設置WWDG計數(shù)器數(shù)值,通過函數(shù)WWDG_Enable()啟動WWDG,情動WWDG以后,計數(shù)器的數(shù)值設置要大于0x40,防止立即產(chǎn)生復位
·用戶可以懸著是否產(chǎn)生EWI中斷,在此中斷計數(shù)器到0x40時產(chǎn)生,一旦是能。系統(tǒng)復位時將無法將其關閉
·在阻止系統(tǒng)產(chǎn)生福誒的正常操作期間,用戶需要在每個時間間隔通過函數(shù)WWDG_SetCounter()刷新計數(shù)器沒刷新操作只能在計數(shù)器值小于設定窗口只時進行,窗口只通過函數(shù)WWDG_SetWindowValue()設定。
分頻器,窗口刷新,計數(shù)器配置函數(shù)
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)
獨立看門狗激活函數(shù)
void WWDG_Enable(uint8_t Counter)
中斷標志管理
FlagStatus WWDG_GetFlagStatue(void)
void WWDG_CLearFlag(void)