STM32 IWDG(独立看门狗)
1 IWDG简介
STM32有两个看门狗:一个是独立看门狗(IWDG),另外一个是窗口看门狗。独立看门狗也称宠物狗,窗口看门狗也称警犬。本文主要分析独立看门狗的功能和它的应用。
独立看门狗用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即IWDG_RESET。如果在计数器没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的“喂狗”。看门狗功能由VDD供电,在停止模式和待机模式下仍能工作。
2 IWDG功能框图剖析
IWDG功能框图如下图所示:

2.1 独立看门狗时钟
独立看门狗的时钟由独立的RC震荡器LSI提供,即使主时钟发生故障它仍然有效,非常独立。LSI的频率一般为30~60kHz,根据温度和工作场合情况有一定的漂移。我们一般取40kHz,所以独立看门狗的定时时间不是非常精确,只适用于对时间精度要求比较低的场合。
2.2 计数器时钟
递减计数器的时钟由LSI经过一个8位的预分频器得到,我们可以操作预分频器寄存器IWDG_PR来设置分频因子,分频因子可以是:[4,8,16,32,64,128,256],计数器时钟CK_CNT=40/4×2^PRV,一个计数器时钟周期计数器就减一。
2.3 计数器
独立看门狗的计数器是一个12位的递减计数器,最大值为0XFFF。当计数器减到0时,会产生一个复位信号IWDG_RESET,让程序重新启动运行。如果在计数器减到0之前刷新了计数器的值的话,就不会产生复位信号,重新刷新计数器值的这个动作俗称“喂狗”。
2.4 重装载寄存器
重装载寄存器是一个12位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定独立看门狗的溢出时间。超时时间Tout=(4×2^prv)/40×rlv(s),prv是预分频器寄存器的值,rlv是重装载寄存器的值。
2.5键寄存器
键寄存器IWDG_KR可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面3个不同的值有不同的效果。
| 键值 | 键值作用 |
| 0XAAAA | 把RLR的值重装载到CNT |
| 0X5555 | PR和RLR这两个寄存器可写 |
| 0XCCCC | 启动 IWDG |
通过写往键寄存器写0XCCCC来启动看门狗属于软件启动的方式,一旦独立看门狗启动,它就关不掉,只有复位才能关掉它。
2.6 状态寄存器
状态寄存器SR只有位0,PVU和位1:RVU有效,这两位只能由硬件操作,软件操作不了。
RVU:看门狗计数器重装载值更新,硬件置1表示重装载值的更新正在进行中,更新完毕之后由硬件清0.
PVU:看门狗预分频值更新,硬件置1指示预分频值的更新正在进行中,当更新完成后,由硬件清0。
所以只有当RVU、PVU都等于0的时候,才可以更新重装载寄存器和预分频寄存器。
3 如何使用IWDG
独立看门狗一般用来检测和解决由程序引起的故障,比如一个程序正常运行的时间是50ms,在运行完这段程序之后紧接着进行喂狗,我们设置独立看门狗的定时溢出时间为60ms,比我们需要监控的程序50ms多一点。如果超过60ms还没有喂狗,那就说明我们的监控程序出故障了,运行出意外了,那么就会产生系统复位,让程序重新运行。
3.1 IWDG 配置函数
void IWDG_Config(uint8_t prv,uint16_t rlv)
{//使能预分频寄存器PR和重装载寄存器RLR可写IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//设置预分频器值IWDG_SetPrescaler(prv);//设置重装载寄存器值IWDG_RetReload(rlv);//把重装载寄存器的值放到计数器中IWDG_ReloadCounter();//使能IWDGIWDG_Enable();}
IWDG配置函数有两个形参,prv用来设置预分频的值,可取值如下:
/*
* @arg IWDG_Prescaler_4: IWDG 预分频值设置为4
* @arg IWDG_Prescaler_8: IWDG 预分频值设置为8
* @arg IWDG_Prescaler_16: IWDG 预分频值设置为16
* @arg IWDG_Prescaler_32: IWDG 预分频值设置为32
* @arg IWDG_Prescaler_64: IWDG 预分频值设置为64
* @arg IWDG_Prescaler_128: IWDG 预分频值设置为128
* @arg IWDG_Prescaler_256: IWDG 预分频值设置为256
*/
如果我们需要设置1s的超时溢出,prv可以取IWDG_Prescaler_64,rlv取625,即调用IWDG使得Tout=64/40*625=1s。
3.2 喂狗函数
void IWDG_Feed(void)
(//把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位//当计数器的值减到0的时候会产生系统复位IWDG_ReloadCounter();
)
3.3 main函数
int main(void)
{//配置LED GPIO,并关闭LEDLED_GPIO_Config();Delay(0X8FFFFF);//——————————————————————————————————————————————————————————//检查是否为独立看门狗复位if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)!=RESET){//独立看门狗复位//亮红灯LED_RED;//清除标志RCC_ClearFlag();//如果一直不能喂狗,会一直复位,加上前面的延时,会看到红灯闪烁//在1s时间内喂狗的话,则会持续亮绿灯}else{//不是看门狗复位(可能为上电复位或者手动按键复位之类的操作)//亮蓝灯LED_BLUE;}//————————————————————————————————————————————————————————————//配置按键GPIOKey_GPIO_Config();//IWDG 1s超时溢出IWDG_Config(IWDG_Prescaler_64,625);//while部分是我们在项目中具体要写的代码,这部分的程序可以用独立看门狗来监控//如果我们知道这部分代码执行的时间,比如500ms,那么我们可以设置独立看门狗的溢出时间是600ms//比500ms多一点,如果要被监控的程序没出意外,正常执行的话,那么执行完毕之后就会执行喂狗程序//如果程序出意外了那程序就会超时,到达不了喂狗的程序,此时就会产生系统复位。//但是也不排除程序出意外了又恢复正常了,刚好喂狗了,歪打正着。所以要想更精确得监控程序//可以使用窗口看门狗,窗口看门狗规定必须在规定的窗口时间内喂狗while(1){//这里添加需要被监控的代码,如果有就去掉按键模拟喂狗,把按键扫描程序去掉//——————————————————————————————————————————————————————————————if(Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN)==KEY_ON){//喂狗,如果不喂狗,系统就会复位,LED1就会灭一次//如果在1s时间内准时喂狗的话,则绿灯会亮,否则红灯闪烁IWDG_Feed();//喂狗后亮绿灯LED_GREEN;}}//———————————————————————————————————————————————————————————————
}
相关文章:
STM32 IWDG(独立看门狗)
1 IWDG简介 STM32有两个看门狗:一个是独立看门狗(IWDG),另外一个是窗口看门狗。独立看门狗也称宠物狗,窗口看门狗也称警犬。本文主要分析独立看门狗的功能和它的应用。 独立看门狗用通俗一点的话来解释就是一个12位的…...
ios swift5 获取wifi列表
参考博客: iOS之Wifi开发探究 - 稀土掘金 iOS 无法获取 WiFi 列表?一定是因为你不知道这个框架 - 稀土掘金 iOS获取Wifi列表详解 - 简书...
回溯法c++学习 解决八皇后问题
使用回溯法解决八皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在88 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。这…...
5. Spring IoCDI ★ ✔
5. Spring IoC&DI 1. IoC & DI ⼊⻔1.1 Spring 是什么?★ (Spring 是包含了众多⼯具⽅法的 IoC 容器)1.1.1 什么是容器?1.1.2 什么是 IoC?★ (IoC: Inversion of Control (控制反转))总…...
数据库自动备份到gitee上,实现数据自动化备份
本人有个不太好的习惯,每次项目的数据库都是在线上创建,Navicat 连接线上数据库进行处理,最近有一个项目需要二次升级,发现老项目部署的服务器到期了,完蛋,数据库咩了!!!…...
探索 Spring Cloud Gateway:构建微服务架构的关键一环
1. 简介 在当今的分布式系统中,微服务架构已经成为了一种流行的架构模式。在微服务架构中,服务被拆分为小型、可独立部署的服务单元,这些服务单元能够通过网络互相通信,形成一个整体的应用系统。然而,随着微服务数量的…...
P1114 “非常男女”计划最优解
原题地址 P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码题解 AC代码(1) 因为用的是级的算法,所以最后一个 了,这里使用特判来得到的,给你们放一下代码: #include <bi…...
C++ | Leetcode C++题解之第187题重复的DNA序列
题目: 题解: class Solution {const int L 10;unordered_map<char, int> bin {{A, 0}, {C, 1}, {G, 2}, {T, 3}}; public:vector<string> findRepeatedDnaSequences(string s) {vector<string> ans;int n s.length();if (n < L…...
构建、标记和发布镜像
构建、标记和发布镜像 目录 构建镜像标记镜像发布镜像实践 设置构建镜像推送镜像 在本指南中,您将学习以下内容: 构建镜像:基于Dockerfile构建镜像的过程。标记镜像:为镜像命名的过程,这也决定了镜像的分发位置。发…...
[Go Web] Kratos 使用的简单总结
文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。 API -&…...
首个实时 AI 视频生成技术发布;科大讯飞发布星火大模型 4.0 丨 RTE 开发者日报
开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…...
什么是容器镜像
什么是容器镜像? 1. 容器镜像的两个重要原则 容器镜像是容器化应用程序的基础,它包含了运行应用程序所需的一切——代码、运行时、库和依赖项。理解容器镜像的两个重要原则非常重要: 不可变性:容器镜像一旦构建,就不…...
ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装
前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址,选择与电脑系统相对应的版本;博主已经上传资源,或者点此直接免费下载,本次演示版本为8.14.1。 注意: Elasticsearch 5 需要 Java 8 以上版本;…...
【应用开发二】GPIO操控(输出、输入、中断)
1 操控GPIO方式 控制目录:/sys/class/gpio /sys/class/gpio目录下文件如下图所示: 1.1 gpiochipX目录 功能:当前SoC所包含的所有GPIO控制器 i.mx6ull一共包含5个GPIO控制器,分别为GPIO1~5分别对应gpiochip0、gpiochip32、gpi…...
单点登录方法
一、父域cookie:两个有相同父域名的二级域名之间可以跨域传递cookie //注意该接口的地址也是baidu.com下属的二级域名:a.baidu.com //全部接口地址为:a.baidu.com/dev-api/system/ecdWeb/login。如果不是a.baidu.com那么根本带不过去 //其实可以理解为通过该方法将cookie传给…...
springboot集成JPA并配置hikariCP连接池问题解决
一、引入需要的依赖 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/></parent> jpa依赖 <!--…...
vue2的双向绑定
vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。 Vue.js 2 中的双向绑定是通过 v-model 指令实现的。v-model 指令可以在表单输入元素上创建…...
Vue3 国际化i18n
国际化i18n方案 1. 什么是i18n2. i18n安装、配置及使用2.1 安装2.2 配置2.3 挂载到实例2.4 组件中使用2.5 语言切换 1. 什么是i18n i18n 是“国际化”的简称。在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无…...
算法金 | 使用随机森林获取特征重要性
大侠幸会幸会,我是日更万日 算法金;0 基础跨行转算法,国内外多个算法比赛 Top;放弃 BAT Offer,成功上岸 AI 研究院 Leader; <随机森林及其应用领域> 随机森林是一种强大的机器学习算法,其…...
网络安全的重要性
网络安全的重要性 网络安全是指保护网络系统免受未授权的访问、攻击、破坏或未经授权的数据泄露的能力。随着互联网的普及和数字化进程的加速,网络安全问题日益凸显,成为个人、企业和国家必须面对的重要挑战。 网络安全的威胁 网络安全威胁包括黑客攻…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
