新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32 獨立看門狗IWDG 與窗口看門狗WWDG

STM32 獨立看門狗IWDG 與窗口看門狗WWDG

作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
獨立看門狗Iwdg——有獨立時鐘(內(nèi)部低速時鐘LSI---40KHz),所以不受系統(tǒng)硬件影響的系統(tǒng)故障探測器。主要用于監(jiān)視硬件錯誤。

窗口看門狗wwdg——時鐘與系統(tǒng)相同。如果系統(tǒng)時鐘不走了,這個狗也就失去作用了,主要用于監(jiān)視軟件錯誤。
一,獨立看門狗

本文引用地址:http://2s4d.com/article/201612/325011.htm

看門狗定時時限= IWDG_SetReload()的值 / 看門狗時鐘頻率
看門狗時鐘頻率=LSI(內(nèi)部低速時鐘)的頻率(40KHz)/ 分頻數(shù)

1.STM32

獨立看門狗IWDG的時限定為280微秒。這個時限可能會隨著LSI(內(nèi)部低速時鐘)的頻率漂移而產(chǎn)生微小的變化。
/* 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);
/*該參數(shù)允許取值范圍為0 – 0x0FFF *
/* Reload IWDG counter */
IWDG_ReloadCounter();
/* Enable IWDG (the LSI oscillator will be enabled by hardware) */
IWDG_Enable();
2.獨立看門狗(IWDG)由專用的40kHz 的低速時鐘為驅(qū)動;因此,即使主時鐘發(fā)生故障它也仍然有效。窗口看門狗由從APB1 時鐘分頻后得到的時鐘驅(qū)動,通過可配置的時間窗口來檢測應(yīng)用程序非正常的過遲或過早的行為??赏ㄟ^
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(內(nèi)部低速時鐘)的頻率(40KHz)/ 分頻數(shù)

二,窗口看門狗

STM32F的窗口看門狗中有一個7位的遞減計數(shù)器,它會在出現(xiàn)下述2種情況之一時產(chǎn)生看門狗復(fù)位:
  
  1)當計數(shù)器的數(shù)值從0x40減到0x3F時
  
  2)當刷新看門狗時計數(shù)器的數(shù)值大于某一設(shè)定數(shù)值時,此設(shè)定數(shù)值在WWDG_CFR寄存器定義
  
  對于一般的看門狗,程序可以在它產(chǎn)生復(fù)位前的任意時刻刷新看門狗,但這有一個隱患,有可能程序跑亂了又跑回到正常的地方,或跑亂的程序正好執(zhí)行了刷新看門狗操作,這樣的情況下一般的看門狗就檢測不出來了;如果使用窗口看門狗,程序員可以根據(jù)程序正常執(zhí)行的時間設(shè)置刷新看門狗的一個時間窗口,保證不會提前刷新看門狗也不會滯后刷新看門狗,這樣可以檢測出程序沒有按照正常的路徑運行非正常地跳過了某些程序段的情況。



評論


技術(shù)專區(qū)

關(guān)閉