看门狗

看门狗(参考手册17章,开发指南11章):检测和解决由软件错误引起的故障

芯片内置2个看门狗: 1、独立看门狗,IWDG—>LSI驱动 ,特点:独立工作,对时间精度要求低
2、窗口看门狗,WWDG—>APB1分频后得到时钟驱动,特点:适合要求看门狗在精确计时窗口起作用的应用程序

看门狗如何解决故障? 在系统正常运行时,系统不复位。而系统跑飞(程序异常执行),系统复位,程序重新执行

独立看门狗功能描述:在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用IWDG,计数器开始从复位值0xFFF递减计数。当计数器计数到末尾0x000会产生IWDG_RESET复位信号。
无论何时在IWDG_KR中写0xAAAA(喂狗),IWDG_RLR都会给计数器重装重载值,避免系统复位,软件必须以一定的间隔写入0xAAAA。正常时不断喂狗,异常时不喂狗,系统复位。
注:WDG处于VDD供电区,停机或待机模式时仍能正常工作。

看门狗寄存器间联系图:
看门狗_第1张图片

独立看门狗溢出时间计算:(产生复位的时间)Tout=[(4*2^prer)*rlr]/40 4*2^pre为分频系数 (4*2^prer)/40为分频过后频率的倒数,即为周期。周期再*rlr所装载的值=时间

写看门狗一般步骤:void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //第一步取消写保护 接下来就要往 PR RLR写东西
IWDG_SetPrescaler(prer); // 设置预分频系数 从外部传入
IWDG_SetReload(rlr); // 设置重装载值 从外部传入
IWDG_ReloadCounter(); //以一定的间隔写入0xAAAA go to definition否则,当计数器为0时,看门狗会产生复位。
IWDG_Enable(); //使能看门狗函数

}
//喂独立看门狗
void IWDG_Feed(void)
{
IWDG_ReloadCounter();//reload
}

你可能感兴趣的:(STM32)