STM32 獨(dú)立看門狗IWDG 與窗口看門狗WWDG
窗口看門狗wwdg——時(shí)鐘與系統(tǒng)相同。如果系統(tǒng)時(shí)鐘不走了,這個(gè)狗也就失去作用了,主要用于監(jiān)視軟件錯(cuò)誤。
一,獨(dú)立看門狗
看門狗定時(shí)時(shí)限= IWDG_SetReload()的值 / 看門狗時(shí)鐘頻率
看門狗時(shí)鐘頻率=LSI(內(nèi)部低速時(shí)鐘)的頻率(40KHz)/ 分頻數(shù)
1.STM32
獨(dú)立看門狗IWDG的時(shí)限定為280微秒。這個(gè)時(shí)限可能會(huì)隨著LSI(內(nèi)部低速時(shí)鐘)的頻率漂移而產(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.獨(dú)立看門狗(IWDG)由專用的40kHz 的低速時(shí)鐘為驅(qū)動(dòng);因此,即使主時(shí)鐘發(fā)生故障它也仍然有效。窗口看門狗由從APB1 時(shí)鐘分頻后得到的時(shí)鐘驅(qū)動(dòng),通過可配置的時(shí)間窗口來檢測(cè)應(yīng)用程序非正常的過遲或過早的行為??赏ㄟ^
IWDG_SetPrescaler(IWDG_Prescaler_32); 對(duì)其時(shí)鐘進(jìn)行分頻,4-256,
通過以下方式喂狗 :
/* Reload IWDG counter */
IWDG_ReloadCounter();
3. 1.25KHz 即每周期 為0.8ms
共計(jì)時(shí) 350 個(gè)周期,即350*0.8ms=280ms
看門狗定時(shí)時(shí)限= IWDG_SetReload()的值 / 看門狗時(shí)鐘頻率
看門狗時(shí)鐘頻率=LSI(內(nèi)部低速時(shí)鐘)的頻率(40KHz)/ 分頻數(shù)
二,窗口看門狗
STM32F的窗口看門狗中有一個(gè)7位的遞減計(jì)數(shù)器,它會(huì)在出現(xiàn)下述2種情況之一時(shí)產(chǎn)生看門狗復(fù)位:
1)當(dāng)計(jì)數(shù)器的數(shù)值從0x40減到0x3F時(shí)
2)當(dāng)刷新看門狗時(shí)計(jì)數(shù)器的數(shù)值大于某一設(shè)定數(shù)值時(shí),此設(shè)定數(shù)值在WWDG_CFR寄存器定義
對(duì)于一般的看門狗,程序可以在它產(chǎn)生復(fù)位前的任意時(shí)刻刷新看門狗,但這有一個(gè)隱患,有可能程序跑亂了又跑回到正常的地方,或跑亂的程序正好執(zhí)行了刷新看門狗操作,這樣的情況下一般的看門狗就檢測(cè)不出來了;如果使用窗口看門狗,程序員可以根據(jù)程序正常執(zhí)行的時(shí)間設(shè)置刷新看門狗的一個(gè)時(shí)間窗口,保證不會(huì)提前刷新看門狗也不會(huì)滯后刷新看門狗,這樣可以檢測(cè)出程序沒有按照正常的路徑運(yùn)行非正常地跳過了某些程序段的情況。
評(píng)論