-
看门狗简介
看门狗:本质是一个递减的计数器
当程序有BUG或硬件问题导致的程序卡死或跑飞时,看门狗可及时复位程序
作用:防止程序卡死或程序跑飞,保证系统的可靠性和稳定性
STM32有独立看门狗(IWDG)和窗口看门狗(WWDG)两种类型
独立看门狗:独立工作,对时间精度要求较低
窗口看门狗:时间精度相对较高,并需在指定的窗口期内喂狗,否则复位程序
-
独立看门狗工作原理
独立看门狗:本质是一个递减的计数器(12位),当看门狗被激活后,递减计数器计数到0x000时产生复位
作用:防止程序卡死,或者说程序跑飞
上限0xFFF-1,下线0X000
注意:上限可由看门狗的重装载寄存器设置
在计数器计数到0之前,要进行喂狗,可重装载计数器的值,防止复位
喂狗,将0XAAAA写入到IWG_KR中即可!HAL_IWDG_Refresh()
Tout=(psc*rlr)/FIWDG
Tout是看门狗溢出时间;fIWDG是看门狗的时钟源频率
PSC是看门狗预分频系数;rlr是看门狗重装载值
CPU必须及时喂狗,否则系统复位重启!
-
独立看门狗实战环节
目的:验证不及时喂狗,系统将复位重启
预设:IWDG的溢出时间为1s,即1s内不喂狗,则系统复位!
接下来进行操作,一秒一次喂狗。去图形化界面,IWDG➡Activated(勾选)
IWDG counter clock prescaler(预分频系数)设置为16;
IWDG down-counter reload value重装载值最大值
看一下LSI这边是40KHZ
生成代码
如果是独立看门狗导致他复位的不复位,否则就是其他复位,清除复位标志
-
窗口看门狗工作原理
窗口看门狗:本质也是个递减的计数器,并且它能产生系统复位信号和提前唤醒中断
下限值不是0,而是0X3F
窗口看门狗的特点:1.当递减计数器值从0X40减到0X3F时复位(即T6位跳变到0)
- 计数器的值大于W[6:0]值时喂狗会复
- 当递减计数器等于0X40时可以产生提前唤醒中断(EWI)
- 在窗口期内重装载计数器的值(喂狗),防止复位
作用:用于监测单片机程序运行时效是否精准,主要检测软件异常。
独立看门狗和窗口看门狗的区别:
-
窗口看门狗实战环节
目的:验证是否在窗口期喂狗,可不执行复位
预设:计数器值为0X7F,窗口值为0x5F,预分频系数为8
接下来实战:把独立看门狗Activated勾选去掉
把窗口看门狗Activated勾选
预分频系数WWDG counter clock prescaler设置为8,窗口值WWDG window value为0x5F,计数器初始值WWDG free-running downcounter value为0X7F;中断Early wakeup interrupt为不使能;
生成代码把上一一节的IWDG改成WWDG运行可以看看。
然后我们把中断打开看一下,中断Early wakeup interrupt为使能,到NVIC勾选Window watchdog interrupt设置抢占优先级为2
生成代码然后按照下图写一下函数,运行即可。
标签:IWDG,窗口,复位,看门狗,计数器,喂狗,STM32CubeIDE From: https://blog.csdn.net/weixin_74114554/article/details/142186965