1. 程式人生 > >stm8 視窗看門狗應用

stm8 視窗看門狗應用

手冊說明:
  • 視窗看門狗WWDG的主要功能
    ●可程式設計的自由執行遞減計數器
    ●有條件的復位
    ─如果開啟了看門狗,當遞減計數器的數值小於0x40時產生復位
    ─如果開啟了看門狗,當在指定的時間視窗之外重載入遞減計數器的數值(見圖27)時產生復位
    ●硬體或軟體啟動看門狗(由選擇位元組指定)
    ●可在HALT指令時產生復位(由選擇位元組配置)
  • WWDG功能說明 
    如果開啟了看門狗(設定了WDGA=1),當7位的遞減計數器(T[6:0]位)從0x40變為0x3F時(即T6變為0),看門狗產生一個復位訊號並把復位引腳拉低。如果軟體重新整理計數器時,計數器的數值大於視窗暫存器中的數值,同樣會產生復位。

STM8_視窗看門狗框圖
(圖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