1、参考资料
《STM32F1开发指南-库函数版本》-第12章 窗口看门狗实验
《STM32中文参考手册V10》-第18章 窗口看门狗
2、窗口看门狗概述
之所以称为窗口就是其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,
设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。
而独立看门狗限制喂狗时间在0-X内,X由相关寄存器决定。喂狗时间不能过晚。
·窗口看门狗工作示意图
·窗口看门狗框图
·窗口看门狗工作过程总结
STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会在出现下述2中情况之一时产生
看门狗复位。
1)当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。
2)当计数器的数值从0x40减到0x3F时[T6位跳变到0]。
如果启动了看门狗并且允许中断,当递减计数器等于0x40时,产生早期唤醒中断(EWI),它可以用于
喂狗以避免WWDG复位。
·窗口看门狗超时时间
为什么要窗口看门狗?
对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序
跑乱了又跑到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就
检测不出来了。
如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会
提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了
某些程序段的情况。
·窗口看门狗其他注意事项:
①上窗口值W[6:0]必须大于下窗口值0x40。否则就无窗口了。
②窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。
3、常用寄存器和库函数描述
·控制寄存器WWDG_CR
·配置寄存器WWDG_CFR
·状态寄存器WWDG_SR
4、窗口看门狗的一般配置步骤
① 使能看门狗时钟:
RCC_APB1PeriphClockCmd();
② 设置分频系数:
WWDG_SetPrescaler();
③ 设置上窗口值:
WWDG_SetWindowValue();
④ 开启提前唤醒中断并分组(可选):
WWDG_EnableIT();
NVIC_Init();
⑤ 使能看门狗:
WWDG_Enable();
⑥ 喂狗:
WWDG_SetCounter();
⑦ 编写中断服务函数
WWDG_IRQHandler();
《STM32F1开发指南-库函数版本》-第12章 窗口看门狗实验
《STM32中文参考手册V10》-第18章 窗口看门狗
2、窗口看门狗概述
之所以称为窗口就是其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,
设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。
而独立看门狗限制喂狗时间在0-X内,X由相关寄存器决定。喂狗时间不能过晚。
·窗口看门狗工作示意图
·窗口看门狗框图
·窗口看门狗工作过程总结
STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会在出现下述2中情况之一时产生
看门狗复位。
1)当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。
2)当计数器的数值从0x40减到0x3F时[T6位跳变到0]。
如果启动了看门狗并且允许中断,当递减计数器等于0x40时,产生早期唤醒中断(EWI),它可以用于
喂狗以避免WWDG复位。
·窗口看门狗超时时间
为什么要窗口看门狗?
对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序
跑乱了又跑到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就
检测不出来了。
如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会
提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了
某些程序段的情况。
·窗口看门狗其他注意事项:
①上窗口值W[6:0]必须大于下窗口值0x40。否则就无窗口了。
②窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。
3、常用寄存器和库函数描述
·控制寄存器WWDG_CR
·配置寄存器WWDG_CFR
·状态寄存器WWDG_SR
4、窗口看门狗的一般配置步骤
① 使能看门狗时钟:
RCC_APB1PeriphClockCmd();
② 设置分频系数:
WWDG_SetPrescaler();
③ 设置上窗口值:
WWDG_SetWindowValue();
④ 开启提前唤醒中断并分组(可选):
WWDG_EnableIT();
NVIC_Init();
⑤ 使能看门狗:
WWDG_Enable();
⑥ 喂狗:
WWDG_SetCounter();
⑦ 编写中断服务函数
WWDG_IRQHandler();