当前位置: 首页 > news >正文

【STM32】看门狗

看门狗,还没有别的地方用上,暂时还不清楚在实际应用中最多的场景是什么,我感觉是用来强制重启系统。

大部分图片来源:正点原子HAL库教程

目录

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Apache Doris】周FAQ集锦:第 19 期
  • pytest自定义命令行选项
  • ML307R_APP_DEMO_SDK TCP/UDP使用介绍
  • 【vue】编辑器段落对应材料同步滚动交互
  • [底层原理] C/C++获取时间(将时间戳转换为年月日)?
  • springboot jar 配置文件同级目录 启动脚本sh 并添加日志文件,日志文件定时分文件
  • RedisDistributedLock 分布式锁
  • Ubuntu 22.04上稳定安装与配置搜狗输入法详细教程
  • 分享一个基于文本挖掘的微博舆情分析系统Python网络舆情监控系统Flask爬虫项目大数据(源码、调试、LW、开题、PPT)
  • 基于深度学习的智能工厂优化
  • 光伏对国内各行各业的影响
  • linux 提权
  • 【QT代码控制Linux开发板】QT控制嵌入式Linux开发板运行shell脚本
  • 证书学习(二)搞懂 keystore、jks、p12、pfx、crt、csr、pem文件的区别
  • ResNet网络学习
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Android框架之Volley
  • CSS3 变换
  • JavaScript 基本功--面试宝典
  • JS函数式编程 数组部分风格 ES6版
  • Mybatis初体验
  • mysql innodb 索引使用指南
  • React-Native - 收藏集 - 掘金
  • Redis 懒删除(lazy free)简史
  • spring boot下thymeleaf全局静态变量配置
  • Swift 中的尾递归和蹦床
  • TypeScript迭代器
  • vue--为什么data属性必须是一个函数
  • 测试开发系类之接口自动化测试
  • 第2章 网络文档
  • 机器学习 vs. 深度学习
  • 你真的知道 == 和 equals 的区别吗?
  • 扑朔迷离的属性和特性【彻底弄清】
  • 推荐一个React的管理后台框架
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 7行Python代码的人脸识别
  • Spring第一个helloWorld
  • 湖北分布式智能数据采集方法有哪些?
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #WEB前端(HTML属性)
  • #职场发展#其他
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)Neo4j下载安装以及初次使用
  • (自用)网络编程
  • .NET BackgroundWorker
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core 项目指定SDK版本
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现