独立看门狗:
键值寄存器IWDG_KR 0-15位有效
预分频寄存器IWDG_PR 0-2位有效 具有写保护功能,要操作需要先取消写保护
重装载寄存器IWDG_RLR 0-11位有效 具有写保护功能,要操作需要先取消写保护
状态寄存器IWDG_SR 0-1位有效
软件必须在 一定间隔内写入0XAAAA 否则当计数器为0的时候 看门狗会复位
窗口看门狗:
窗口就是在喂狗的时间是有一个上下限的范围,可以通过设定相关寄存器,设定其上限时间(下限是固定的)。喂狗的时间不能过晚也不能过早。而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定,喂狗的时间不能太晚
为什么用窗口看门狗?
对于一般看门狗而言,程序可以在它产生复位前的任意任意时刻刷新看门狗,但这样有一个隐患,有可能程序跑飞又回到了正确地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来。
如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出来程序没有按照正常路径运行非正常跳过某些程序段的情况。
窗口看门狗的注意事项
上窗口值W[6:0]必须大于下窗口值0X40,否则就无窗口了。
窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。
控制寄存器WWDG_CR
void WWDG_Enable(uint8_t Counter);//启动设置并且设置初始值
void WWDG_SetCounter(uint8_t Counter)//喂狗
窗口看门狗配置过程
1.使能看门狗时钟
RCC_APB1PeriphClockCmd();
2.设置分频系数
WWDG)SetPrescaler();
3.设置窗口值
WWDG_SetWindowValue();
4.开启提前唤醒中断并分组(可选)
WWDG_EnableT();
NVIC_Init();
5.使能看门狗
WWDG_EnableIT();
6.喂狗
WWDG_SetCounter();
7.编写中断服务函数
WWDG_IRQHandler();