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

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
0X5555PR和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代码&#xff08;1&#xff09; 因为用的是级的算法&#xff0c;所以最后一个 了&#xff0c;这里使用特判来得到的&#xff0c;给你们放一下代码&#xff1a; #include <bi…...

C++ | Leetcode C++题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; 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…...

构建、标记和发布镜像

构建、标记和发布镜像 目录 构建镜像标记镜像发布镜像实践 设置构建镜像推送镜像 在本指南中&#xff0c;您将学习以下内容&#xff1a; 构建镜像&#xff1a;基于Dockerfile构建镜像的过程。标记镜像&#xff1a;为镜像命名的过程&#xff0c;这也决定了镜像的分发位置。发…...

[Go Web] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施&#xff0c;不限定于某种注册中心&#xff0c;或数据库ORM等&#xff0c;所以您可以十分轻松地将任意库集成进项目里&#xff0c;与Kratos共同运作。 API -&…...

首个实时 AI 视频生成技术发布;科大讯飞发布星火大模型 4.0 丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…...

什么是容器镜像

什么是容器镜像&#xff1f; 1. 容器镜像的两个重要原则 容器镜像是容器化应用程序的基础&#xff0c;它包含了运行应用程序所需的一切——代码、运行时、库和依赖项。理解容器镜像的两个重要原则非常重要&#xff1a; 不可变性&#xff1a;容器镜像一旦构建&#xff0c;就不…...

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址&#xff0c;选择与电脑系统相对应的版本&#xff1b;博主已经上传资源&#xff0c;或者点此直接免费下载&#xff0c;本次演示版本为8.14.1。 注意&#xff1a; Elasticsearch 5 需要 Java 8 以上版本&#xff1b;…...

【应用开发二】GPIO操控(输出、输入、中断)

1 操控GPIO方式 控制目录&#xff1a;/sys/class/gpio /sys/class/gpio目录下文件如下图所示&#xff1a; 1.1 gpiochipX目录 功能&#xff1a;当前SoC所包含的所有GPIO控制器 i.mx6ull一共包含5个GPIO控制器&#xff0c;分别为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框架&#xff0c;即数据双向绑定&#xff0c;即当数据发生变化的时候&#xff0c;视图也就发生变化&#xff0c;当视图发生变化的时候&#xff0c;数据也会跟着同步变化。 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 是“国际化”的简称。在资讯领域&#xff0c;国际化(i18n)指让产品&#xff08;出版物&#xff0c;软件&#xff0c;硬件等&#xff09;无…...

算法金 | 使用随机森林获取特征重要性

大侠幸会幸会&#xff0c;我是日更万日 算法金&#xff1b;0 基础跨行转算法&#xff0c;国内外多个算法比赛 Top&#xff1b;放弃 BAT Offer&#xff0c;成功上岸 AI 研究院 Leader&#xff1b; <随机森林及其应用领域> 随机森林是一种强大的机器学习算法&#xff0c;其…...

网络安全的重要性

网络安全的重要性 网络安全是指保护网络系统免受未授权的访问、攻击、破坏或未经授权的数据泄露的能力。随着互联网的普及和数字化进程的加速&#xff0c;网络安全问题日益凸显&#xff0c;成为个人、企业和国家必须面对的重要挑战。 网络安全的威胁 网络安全威胁包括黑客攻…...

告别pip install langchain!用uv一步搞定LangChain 1.x环境(附pyproject.toml配置)

用uv重构LangChain开发环境&#xff1a;从依赖管理到生产级配置实战 如果你还在用pip install langchain搭建开发环境&#xff0c;可能已经落后于现代Python开发的效率标准了。当项目依赖逐渐复杂&#xff0c;特别是需要处理像LangChain这样包含多个可选组件&#xff08;如open…...

QUARTUS 2 基本操作使用(quartus13.0)

本文从建立完工程开始&#xff0c;到下载结束 编写设计文件 点击Files&#xff0c;可以添加设计文件 设置工程顶层 ​编辑 再此介绍下工具栏&#xff0c;只介绍用的多的 绑定引脚&#xff1a;fpga大部分引脚都是GPIO&#xff0c;因此给他编辑代码后&#xff08;赋予他功能&am…...

基于MATLAB的隔离型DC DC变换器系统设计:技术指标明确、包含设计报告与仿真程序的全过程解析

基于MATLAB的单端反激——隔离型DC/DC变换器系统设计 本设计包括设计报告&#xff0c;仿真程序。技术指标 输入电压、输出电压、输出功率、纹波系数、开关频率见下图凌晨三点盯着示波器的我&#xff0c;突然被显示器上的锯齿状波形逗笑了——这哪儿是DC/DC变换器啊&#xff0c;…...

如何用EuRoC数据集快速搭建VIO算法测试环境(附Python代码示例)

如何用EuRoC数据集高效构建VIO算法验证平台&#xff08;附Python实战&#xff09; 当我们需要验证视觉惯性里程计&#xff08;VIO&#xff09;算法时&#xff0c;一个高质量的数据集就像实验室里的精密仪器。EuRoC数据集正是这样一套"标准量具"&#xff0c;它由微型飞…...

R语言孟德尔随机化环境搭建:手把手教你搞定gwasvcf、gwasglue等包的安装报错(附本地安装包)

R语言孟德尔随机化环境搭建&#xff1a;从报错到成功的全流程指南 第一次在R中安装孟德尔随机化相关工具包时&#xff0c;那种挫败感我至今记忆犹新。明明按照教程一步步操作&#xff0c;却不断遭遇各种报错——网络超时、依赖缺失、API限制...这些看似简单的问题足以让一个生物…...

Qwen-Image效果实测:对比传统模型,看看它的中文理解强在哪

Qwen-Image效果实测&#xff1a;对比传统模型&#xff0c;看看它的中文理解强在哪 你有没有试过用AI画图&#xff0c;结果被它“气”到哭笑不得&#xff1f;比如&#xff0c;你想画一个“穿着旗袍的女士在江南水乡的乌篷船上喝茶”&#xff0c;结果AI给你生成一个“穿着船在喝…...

IINA:macOS上最优雅的全能视频播放器终极指南

IINA&#xff1a;macOS上最优雅的全能视频播放器终极指南 【免费下载链接】iina 项目地址: https://gitcode.com/gh_mirrors/iin/iina 如果你在寻找一款既强大又美观的macOS视频播放器&#xff0c;IINA绝对是你的不二之选。这款基于mpv引擎的现代播放器&#xff0c;不仅…...

WebPageTest API完全手册:自动化网站性能监控与集成

WebPageTest API完全手册&#xff1a;自动化网站性能监控与集成 【免费下载链接】WebPageTest Official repository for WebPageTest 项目地址: https://gitcode.com/gh_mirrors/we/WebPageTest WebPageTest 是一款强大的网站性能测试工具&#xff0c;其提供的 API 功能…...

Ring-1T-FP8开源:万亿参数AI推理新突破

Ring-1T-FP8开源&#xff1a;万亿参数AI推理新突破 【免费下载链接】Ring-1T-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ring-1T-FP8 导语&#xff1a;近日&#xff0c;开源社区迎来重大突破——万亿参数级大语言模型Ring-1T-FP8正式开源&#xff…...

并发编程进阶:volatile、内存屏障与 CPU 缓存机制详解

知识点回顾 1. 什么是CQRS&#xff1f; CQRS是Command Query Responsibility Segregation的缩写&#xff0c;一般称作命令查询职责分离。从字面意思理解&#xff0c;就是将命令&#xff08;写入&#xff09;和查询&#xff08;读取&#xff09;的责任划分到不同的模型中。 对比…...