STM32 獨立看門狗IWDG 與窗口看門狗WWDG
窗口看門狗wwdg——時鐘與系統(tǒng)相同。如果系統(tǒng)時鐘不走了,這個狗也就失去作用了,主要用于監(jiān)視軟件錯誤。
一,獨立看門狗
看門狗定時時限= IWDG_SetReload()的值 / 看門狗時鐘頻率
看門狗時鐘頻率=LSI(內部低速時鐘)的頻率(40KHz)/ 分頻數
1.STM32
獨立看門狗IWDG的時限定為280微秒。這個時限可能會隨著LSI(內部低速時鐘)的頻率漂移而產生微小的變化。
/* IWDG timeout equal to 280 ms (the timeout may varies due to LSI frequency dispersion) -------------------------------------------------------------
*/
/* Enable write access to IWDG_PR and IWDG_RLR registers */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
/* IWDG counter clock: 40KHz(LSI) / 32 = 1.25 KHz */
IWDG_SetPrescaler(IWDG_Prescaler_32);
/* Set counter reload value to 349 */
IWDG_SetReload(349);
/*該參數允許取值范圍為0 – 0x0FFF *
/* Reload IWDG counter */
IWDG_ReloadCounter();
/* Enable IWDG (the LSI oscillator will be enabled by hardware) */
IWDG_Enable();
2.獨立看門狗(IWDG)由專用的40kHz 的低速時鐘為驅動;因此,即使主時鐘發(fā)生故障它也仍然有效。窗口看門狗由從APB1 時鐘分頻后得到的時鐘驅動,通過可配置的時間窗口來檢測應用程序非正常的過遲或過早的行為??赏ㄟ^
IWDG_SetPrescaler(IWDG_Prescaler_32); 對其時鐘進行分頻,4-256,
通過以下方式喂狗 :
/* Reload IWDG counter */
IWDG_ReloadCounter();
3. 1.25KHz 即每周期 為0.8ms
共計時 350 個周期,即350*0.8ms=280ms
看門狗定時時限= IWDG_SetReload()的值 / 看門狗時鐘頻率
看門狗時鐘頻率=LSI(內部低速時鐘)的頻率(40KHz)/ 分頻數
二,窗口看門狗
STM32F的窗口看門狗中有一個7位的遞減計數器,它會在出現下述2種情況之一時產生看門狗復位:
1)當計數器的數值從0x40減到0x3F時
2)當刷新看門狗時計數器的數值大于某一設定數值時,此設定數值在WWDG_CFR寄存器定義
對于一般的看門狗,程序可以在它產生復位前的任意時刻刷新看門狗,但這有一個隱患,有可能程序跑亂了又跑回到正常的地方,或跑亂的程序正好執(zhí)行了刷新看門狗操作,這樣的情況下一般的看門狗就檢測不出來了;如果使用窗口看門狗,程序員可以根據程序正常執(zhí)行的時間設置刷新看門狗的一個時間窗口,保證不會提前刷新看門狗也不會滯后刷新看門狗,這樣可以檢測出程序沒有按照正常的路徑運行非正常地跳過了某些程序段的情況。
評論