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();
}