stm8 視窗看門狗應用
阿新 • • 發佈:2019-01-01
手冊說明:
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //系統執行時鐘
INIT_Config(); //初始化函式
WWDG_Init(0x7F, 0x7F); //初始化視窗看門狗
while (1)
{
- 視窗看門狗WWDG的主要功能
●可程式設計的自由執行遞減計數器
●有條件的復位
─如果開啟了看門狗,當遞減計數器的數值小於0x40時產生復位
─如果開啟了看門狗,當在指定的時間視窗之外重載入遞減計數器的數值(見圖27)時產生復位
●硬體或軟體啟動看門狗(由選擇位元組指定)
●可在HALT指令時產生復位(由選擇位元組配置) - WWDG功能說明
如果開啟了看門狗(設定了WDGA=1),當7位的遞減計數器(T[6:0]位)從0x40變為0x3F時(即T6變為0),看門狗產生一個復位訊號並把復位引腳拉低。如果軟體重新整理計數器時,計數器的數值大於視窗暫存器中的數值,同樣會產生復位。
(圖25:STM8視窗看門狗框圖)
在正常的操作期間,應用程式必須定期地寫入WDGCR暫存器,以避免產生復位;這個寫的動作必須在計數器的數值小於視窗暫存器的數值時進行。寫入WDGCR暫存器的數值必須是介於0xFF和0xC0之間(見圖26):
- 開啟看門狗:
如果(通過選擇位元組)選擇了軟體看門狗,在系統復位後看門狗處於關閉狀態。設定WDGCR寄存
器中的WDGA位將開啟看門狗,隨後在下次復位之前將不能關閉看門狗。
如果(通過選擇位元組)選擇了硬體看門狗,看門狗將始終開啟,而WDGA位將不起作用。- 控制遞減計數器:
遞減計數器是自由執行計數器:即使未開啟看門狗,它依然不斷地遞減計數。當開啟看門狗
時,必須設定T6位以避免立刻產生復位。T[5:0]位中包含了看門狗產生復位前允許的時間延遲(見圖26);因為寫入WDGCR暫存器時,預分頻器的狀態是不可知的(見圖27),所以這個時間延遲介於一個最小和最大數值之間。
視窗暫存器(WDGWR)的數值是指定視窗的高限:為防止復位,必須在遞減計數器的數值小於視窗暫存器的數值並大於0x3F時重新整理遞減計數器。圖27描述了視窗看門狗操作過程。
注意:T6位可以用於產生一個軟體復位(即設定WDGA位同時清除T6位)- 在停止時產生看門狗復位
如果開啟了看門狗,並且選擇了停止時產生看門狗復位的選項,則執行HALT指令將產生復位。
- 在停止模式下使用WWDG
如果在選擇位元組中使能了停止模式下的看門狗(HALT指令不產生看門狗復位),建議在執行HALT指令前先重新整理看門狗計數器,以避免在喚醒微控制器後立刻進入不希望的看門狗復位。 - 如何設定看門狗的超時
下圖顯示了看門狗計數器(CNT)中的6位數值,與以毫秒為單位的超時時間的線性關係,這個表可以在不考慮時序變化時作為一個快速的粗略計算參考,如果需要更精確的計算,請使用圖27的公式。
---------------------------------------------------------------------------------------------------------------------------
警告:每次寫入WDGCR暫存器時,首先要置T6位為'1',以避免立刻產生看門狗復位。
void main(void)
{CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //系統執行時鐘
INIT_Config(); //初始化函式
WWDG_Init(0x7F, 0x7F); //初始化視窗看門狗
while (1)
{
App();
WWDG_SetCounter(0x7E); //在視窗時間範圍內喂狗 系統正常執行 低於視窗範圍 系統復位
}}
親測 stm8s與stm8L通用0