STM32F1笔记(六)独立看门狗IWDG

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

STM32F1笔记(六)独立看门狗IWDG_第1张图片

当prer值为4,rlr值为625时,Tout=1000ms,这样只要在1s之内喂狗就不会发生看门狗复位。

需要注意的是,由于看门狗的时钟不精确,所以最后不要太晚也就是太靠近1s的时间喂狗,需要提前一些。

 

喂狗函数:

void IWDG_Feed(void)
{   
    IWDG_ReloadCounter();									   
}

 

你可能感兴趣的:(STM32F1)