看門狗的主要作用就是防止程序跑飛,防止堆棧數據溢出,將單片機進行重啟操作,不可屏蔽中斷,優先級最高。
答題的過程是這樣的,計數器有一個值,不停的做減法操作,當值為0時產生復位操作,因此在程序正常運行下需要不停的喂狗操作,但是這個時間需要把握,這個時間設置成為”喂狗時間“,在喂狗異常時發生中斷復位操作,這個過程是自發進行的。
下面主要說明喂狗時間的操作。
需要控制的寄存器有:
鍵值寄存器IWDG_KR: 0~15位有效
預分頻寄存器IWDG_PR:0~2位有效。具有寫保護功能,要操作先取消寫保護
重裝載寄存器IWDG_RLR:0~11位有效。具有寫保護功能,要操作先取消寫保護。
狀態寄存器IWDG_SR:0~1位有效
我的另一篇文章專門講解了如何使用看門狗,這里不做贅述,主要說一下,這個喂狗時間如何設置,設置多長合適。
這里我們還是從函數計數開始說。
設置看門狗的分頻系數的函數是:
//設置 IWDG 預分頻值
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
設置看門狗的重裝載值的函數是:
//設置 IWDG 重裝載值
void IWDG_SetReload(uint16_t Reload);
設置好看門狗的分頻系數 prer 和重裝載值就可以知道看門狗的喂時間(也就是看門狗溢出時間) ,該時間的計算方式為(以時鐘40KHZ計算):
Tout=((4×2^prer) ×rlr) /40
Tout 為看門狗溢出時間(單位為 ms);prer為看門狗時鐘預分頻(IWDG_PR 值),范圍為 0~7;rlr 為看門狗的重裝載值(IWDG_RLR 的值) ;我們設定 prer 值為 4, rlr 值為 625, 那么就可以得到 Tout=64×625/40=1000ms, 這樣,看門狗的溢出時間就是 1s,只要你在一秒鐘之內,有一次寫入 0XAAAA 到 IWDG_KR,就不會導致看門狗復位。
注意:看門狗的時鐘頻率并不是確定不變的40KHZ(而是在 15~47Khz 之間的一個可變化的時鐘),必須控制好大概復位時間。
綜上所述只需要根據自己的需要進行設置相應的參數即可,這里提供相關的經驗給大家參考,一般情況下我們都設置喂狗時間為1s當有特別的任務需要進行檢測時需要根據特定的任務進行設置喂狗時間,假設有一個非常重要的進程,需要及時的進行檢測,這里就要設置特定的時間,比如100ms一次喂狗等操作。
審核編輯黃昊宇
-
看門狗
+關注
關注
10文章
566瀏覽量
70925
發布評論請先 登錄
相關推薦
評論