独立看门狗Iwdg——有独立时钟(内部低速时钟LSI—40KHz),所以不受体系硬件影响的体系毛病探测器。首要用于监督硬件过错。
窗口看门狗wwdg——时钟与体系相同。假如体系时钟不走了,这个狗也就失掉作用了,首要用于监督软件过错。
一,独立看门狗
看门狗守时时限= IWDG_SetReload()的值 / 看门狗时钟频率
看门狗时钟频率=LSI(内部低速时钟)的频率(40KHz)/ 分频数
1.STM32
独立看门狗IWDG的时限定为280微秒。这个时限或许会跟着LSI(内部低速时钟)的频率漂移而发生细小的改变。
/* 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);
/*该参数答应取值规模为0 – 0x0FFF *
/* Reload IWDG counter */
IWDG_ReloadCounter();
/* Enable IWDG (the LSI oscillator will be enabled by hardware) */
IWDG_Enable();
2.独立看门狗(IWDG)由专用的40kHz 的低速时钟为驱动;因而,即便主时钟发生毛病它也依然有用。窗口看门狗由从APB1 时钟分频后得到的时钟驱动,经过可装备的时刻窗口来检测应用程序非正常的过迟或过早的行为。可经过
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(内部低速时钟)的频率(40KHz)/ 分频数
二,窗口看门狗
STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种状况之一时发生看门狗复位:
1)当计数器的数值从0x40减到0x3F时
2)当改写看门狗时计数器的数值大于某一设定数值时,此设定数值在WWDG_CFR寄存器界说
关于一般的看门狗,程序能够在它发生复位前的恣意时刻改写看门狗,但这有一个危险,有或许程序跑乱了又跑回到正常的当地,或跑乱的程序正好履行了改写看门狗操作,这样的状况下一般的看门狗就检测不出来了;假如运用窗口看门狗,程序员能够依据程序正常履行的时刻设置改写看门狗的一个时刻窗口,确保不会提早改写看门狗也不会滞后改写看门狗,这样能够检测出程序没有依照正常的途径运转非正常地跳过了某些程序段的状况。