看门狗,还没有别的地方用上,暂时还不清楚在实际应用中最多的场景是什么,我感觉是用来强制重启系统。
大部分图片来源:正点原子HAL库教程
专栏目录:记录自己的嵌入式学习之路-CSDN博客
目录
1 应用场景
1.1 解决方法——IWDG
1.2 解决方法——WWDG
2 IWDG
2.1 特点
2.2 原理
2.3 看门狗溢出时间的计算
2.4 主要用到的函数
2.5 相关的HAL库文件(可以去这里找用到的函数和宏定义)
3 WWDG
3.1 特点
3.2 原理
3.3 窗口期
3.4 超时时间计算
3.5 配置方法
3.6 相关的HAL库文件(可以去这里找用到的函数和宏定义)
1 应用场景
嵌入式运行时有可能因为电磁干扰、自身软硬件异常等原因导致程序错误。
1.1 解决方法——IWDG
检测外界电磁干扰,或硬件导致的程序错误。
1.2 解决方法——WWDG
面向软件异常导致的程序错误。
2 IWDG
2.1 特点
- 使用独立RC振荡器,不与主频率公用
- 由VDD直接供电
- 可在待机和停止模式下运行,即只要芯片工作,它就能工作
- 只要在计数器到0前重装载计数器的值(喂狗),就不会产生复位
- 适用于需要高稳定性、且对时间精度要求较低的场合(因为RC振荡器的时钟频率不是很稳定)
- 它是异常处理的最后手段,不能依赖它,只能作为保险的存在
2.2 原理
12位的递减计数器,在计数减到0后,产生系统复位。
时钟源:LSI
2.3 看门狗溢出时间的计算
重要:
一般该公式用于算重装载值,为了达到较为准确的喂狗规定时间规定,需要准确的重装载值,因此需要进行计算。
2.4 主要用到的函数
2.5 相关的HAL库文件(可以去这里找用到的函数和宏定义)
stm32f1xx_hal_iwdg.c
3 WWDG
3.1 特点
- 能产生系统复位信号以及提前唤醒中断;
- 当递减计数器值从 0x40减到0x3F时复位(即T6位跳变到0)
- 计数器的值大于W[6:0]值时喂狗会复位
- 提前唤醒中断 (EWI):当递减计数器等于 0x40 时可产生
- 在窗口期内重装载计数器的值,可防止复位
- 用于监测单片机程序运行时效是否精准,主要检测软件异常,需要精准检测程序运行时间的场合
- 它是异常处理的最后手段,不能依赖它,只能作为保险的存在
3.2 原理
6位的递减计数器
时钟源:PCLK
3.3 窗口期
W[6:0]≥窗口>0x3F
3.4 超时时间计算
3.5 配置方法
3.6 相关的HAL库文件(可以去这里找用到的函数和宏定义)
stm32f1xx_hal_wwdg.c