看门狗简介及其主要函数配置
看门狗的作用是:在一定时间内未接收到喂狗信号,便对处理器自动复位。
stm32内部自带两个看门狗:IWDG(独立看门狗)和WWDG(窗口看门狗)。
IWDG
主要是对三个寄存器操作:IWDG_KR:向计数器写值
IWDG_PR:看门狗的分频系数
IWDG_RLR:重装载值
四个步骤:
1.取消寄存器PR,RLR写保护,即可设置分频系数和重装载值
IWDG_WriteAccessCmd();
2.设置预分频系数和重装载值
void IWDG_SetPrescaler();
void IDWG_SetReload();
喂狗时间公式为:T=((4*2^prep)*rlr)/40.
3.重载计数值喂狗:
IWDG_ReloadCounter();
4.启动看门狗
IWDG_Enable();
//IWDG一旦启动,不能再被关闭,只能通过重启,且之后不能打开IWDG。
WWDG
窗口看门狗即在有限的一段有上下限的时间内写入一个值(下限时间是一个固定值),去重置计数器。其通常用来监测由外部干扰或不可见的逻辑条件造成的应用程序背离正常运行序列而产生的软件故障。
其在下述两种情况会发生看门狗复位:
①当喂狗时计数器的值大于设定数值W[6:0]时,
②当计数器数值从0x40减至0x3f时(T6位跳变至0)
使用窗口看门狗的意义是对于一般的看门狗,程序可以在复位前的任意时刻刷新看门狗,此时,当程序跑乱后,又运行至正常处,或者正好执行了刷新看门狗的操作,这样的情况无法被看门狗检测出。所以设置一个时间窗口,保证不会提前和滞后刷新看门狗,可以检测出程序有没有按照正常的路径运行。
用中断的方式来喂狗启用WWDG的步骤:
1. 使能WWDG时钟
RCC_APB1PeriphClockCmd();
2. 设置上窗口值和分频数
void WWDG_SetWindowvalue();
void WWDG_SetPrescaler();
3. 开启WWDG中断并设置中断分组
void WWDG_EnableIT();
NVIC_Init();
4. 设置计数器初始值并使能看门狗(此函数可完成以上两个功能)
void WWDG_Enable();
5. 编写中断服务函数(通过该函数来喂狗)
void WWDG_IRQHandler();