STM32F1內置了兩個看門狗,獨立看門狗IWDG和窗口看門狗WWDG,可以用來檢測和解決由軟件錯誤引起的故障。
IWDG最適合應用于那些需要看門狗作為一個在主程序之外,能夠完全獨立工作,并且對時間精度要求較低的場合。WWDG最適合那些要求看門狗在精確計時窗口起作用的應用程序。
STM32的獨立看門狗由內部專門的40Khz低速時鐘(LSI)驅動,即使主時鐘發生故障,它也仍然有效。這里需要注意獨立看門狗的時鐘是一個內部RC時鐘,而不是準確的40Khz,而是30~60Khz之間的一個可變化的時鐘,只是估算的時候以40Khz的頻率來計算,看門狗對時間的要求不是很精確,所以時鐘有些偏差是可以接受的。
?
獨立看門狗的配置如下:
void IWDG_Init(u8 prer,u16 rlr)
{ //取消IWDG_PR和IWDG_RLR的寫保護IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//預分頻IWDG_SetPrescaler(prer);//重裝載IWDG_SetReload(rlr);//重載計數值即喂狗IWDG_ReloadCounter();IWDG_Enable();
}
這里需要注意的是,不需要使能時鐘。
其中喂狗時間計算方式為:Tout = ((4*2^prer) * rlr)/40
prer取值范圍為0~7
當prer值為4,rlr值為625時,Tout=1000ms,這樣只要在1s之內喂狗就不會發生看門狗復位。
需要注意的是,由于看門狗的時鐘不精確,所以最后不要太晚也就是太靠近1s的時間喂狗,需要提前一些。
?
喂狗函數:
void IWDG_Feed(void)
{ IWDG_ReloadCounter();
}
?