STM32 独立看门狗(IWDG)详解

目录

一、引言

二、独立看门狗的作用

三、独立看门狗的工作原理

1.时钟源

2.计数器

3.喂狗操作

4.超时时间计算

5.复位机制

四、独立看门狗相关寄存器

1.键寄存器(IWDG_KR)

2.预分频寄存器(IWDG_PR) 

3.重载寄存器(IWDG_RLR)

五、代码实现 

六、注意事项

1.喂狗时间

2.时钟源稳定性

3.中断处理

七、总结


一、引言

        在嵌入式系统中,可靠性是至关重要的。为了防止系统因软件故障或外部干扰而出现死机或异常情况,通常会使用看门狗(Watchdog)机制。STM32 系列微控制器提供了两种看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。本文将重点介绍 STM32 的独立看门狗。

二、独立看门狗的作用

独立看门狗主要用于在系统出现故障时,自动复位系统,以确保系统的正常运行。它独立于主系统时钟,即使主系统时钟出现故障,独立看门狗仍然可以正常工作。

当系统正常运行时,软件需要定期地 “喂狗”(即向独立看门狗写入特定的值),以防止看门狗超时。如果软件出现故障,未能及时 “喂狗”,独立看门狗将在超时后产生复位信号,使系统重新启动。

三、独立看门狗的工作原理

1.时钟源

独立看门狗使用内部低速时钟(LSI)作为时钟源。一般情况下,LSI 的频率为 32kHz 左右。这个时钟源独立于系统的主时钟(如 HSI、HSE 等),即使主时钟出现故障,独立看门狗仍然可以正常工作。

2.计数器

独立看门狗包含一个递减计数器。当计数器的值从预设的重载值开始递减,减到 0 时,独立看门狗将产生复位信号。

软件可以通过向独立看门狗的关键寄存器写入特定的值来重新加载计数器,这个操作通常被称为 “喂狗”。

3.喂狗操作

在系统正常运行时,软件必须在独立看门狗计数器递减到 0 之前进行喂狗操作,以防止系统复位。

喂狗的过程通常是向独立看门狗的键寄存器(IWDG_KR)写入特定的序列值。例如,先写入 0x5555,然后再写入 0xAAAA,以启动喂狗操作并重新加载计数器。

4.超时时间计算

独立看门狗的超时时间取决于预分频系数和重载值。计算公式为:

超时时间 = (预分频系数 × 重载值) / LSI 频率

例如,如果预分频系数设置为 4,重载值为 1000,LSI 频率为 32kHz,则超时时间为

(4×1000) / 32000 = 0.125 秒(125 毫秒)。

5.复位机制

当独立看门狗计数器减到 0 时,它会向系统发出复位信号,强制系统重新启动。

这个复位信号是独立于系统的其他复位源的,并且具有较高的优先级,确保在系统出现故障时能够及时进行复位操作。

四、独立看门狗相关寄存器

1.键寄存器(IWDG_KR)

  • 地址偏移:0x00。
  • 功能:用于启动喂狗操作、使能对寄存器的写访问以及启动独立看门狗。
  • 位描述:
    • 位 0-5:保留。
    • 位 6(RLK):寄存器锁键位,用于锁定对寄存器的写访问,防止意外写入。当写入 0x0000AAAA 时,该位清 0,表示解锁寄存器,可以进行写操作。
    • 位 7(PVU):预分频值更新位,当写入 0x00005555 时,该位清 0,允许修改预分频值和重载值。
    • 位 15(EWI):早期唤醒中断标志位,当独立看门狗计数到接近超时值时(提前一个 LSI 时钟周期),该位由硬件置 1。如果使能了早期唤醒中断(IWDG->IER 寄存器),则会产生中断。
  • 写入序列:
    • 要启动喂狗操作,先写入 0xAAAA 到 IWDG_KR。
    • 要使能对寄存器的写访问,先写入 0x5555 到 IWDG_KR。

2.预分频寄存器(IWDG_PR) 

  • 地址偏移:0x04。
  • 功能:设置独立看门狗的预分频系数。
  • 位描述:
    • 位 0-2:PR [2:0],预分频值,可设置为 4、8、16、32、64、128、256 等不同的值。
  • 例如,设置为 0x03 表示预分频系数为 64。

3.重载寄存器(IWDG_RLR)

  • 地址偏移:0x08。
  • 功能:设置独立看门狗的重载值,决定了看门狗超时的时间。
  • 位描述:
    • 位 0-11:RL [11:0],重载值,取值范围为 0-4095。
  • 例如,设置为 0xFFF 表示重载值为 4095。

五、代码实现 

#include "stm32f10x.h"// 初始化独立看门狗
void IWDG_Init(void)
{// 使能对独立看门狗寄存器的写访问(向 IWDG_KR 写入 0x5555)IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);// 设置独立看门狗的预分频系数和重载值IWDG_SetPrescaler(IWDG_Prescaler_64);   // 预分频系数为 64IWDG_SetReload(1000);                  // 重载值为 1000// 启动独立看门狗IWDG_Enable();
}// 喂狗操作
void IWDG_Feed(void)
{IWDG_ReloadCounter();
}int main(void)
{// 初始化独立看门狗IWDG_Init();while (1){// 模拟系统正常运行的一些操作// 定期喂狗,防止看门狗超时复位IWDG_Feed();}
}

在上述代码中:

  • IWDG_Init函数用于初始化独立看门狗,包括使能写访问、设置预分频系数和重载值以及启动独立看门狗。
  • IWDG_Feed函数用于进行喂狗操作,即重新加载计数器。
  • main函数中,首先初始化独立看门狗,然后在主循环中模拟系统正常运行的操作,并定期调用喂狗函数。

六、注意事项

1.喂狗时间

软件需要确保在独立看门狗超时之前进行喂狗操作。如果喂狗时间间隔过长,可能会导致独立看门狗超时,系统复位。

2.时钟源稳定性

独立看门狗使用内部低速时钟(LSI)作为时钟源。这个时钟源的稳定性可能不如主系统时钟,因此在设置超时时间时需要考虑时钟源的稳定性。

3.中断处理

在某些情况下,可能需要在中断处理程序中进行喂狗操作。需要注意的是,中断处理程序的执行时间不能过长,以免影响喂狗操作的及时性。

七、总结

        STM32 的独立看门狗是一种非常重要的可靠性机制,可以在系统出现故障时自动复位系统,确保系统的正常运行。在使用独立看门狗时,需要注意喂狗时间、时钟源稳定性和中断处理等问题,以确保独立看门狗能够正常工作。希望本文对大家理解和使用 STM32 的独立看门狗有所帮助。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RHCE的练习(12)

写一个脚本,完成以下要求: 给定一个用户: 如果其UID为0,就显示此为管理员;否则,就显示其为普通用户; #!/bin/bash ​ # 使用read命令获取用户名 read -p "请输入用户名: " username ​…

游戏引擎学习第15天

视频参考:https://www.bilibili.com/video/BV1mbUBY7E24 关于游戏中文件输入输出(IO)操作的讨论。主要分为两类: 只读资产的加载 这部分主要涉及游戏中用于展示和运行的只读资源,例如音乐、音效、美术资源(如 3D 模型和…

探索 HTML 和 CSS 实现的 3D旋转相册

效果演示 这段HTML与CSS代码创建了一个包含10张卡片的3D旋转效果&#xff0c;每张卡片都有自己的边框颜色和图片。通过CSS的3D变换和动画&#xff0c;实现了一个动态的旋转展示效果 HTML <div class"wrapper"><div class"inner" style"-…

什么是Hadoop

Hadoop 介绍 Hadoop 是由 Apache 开发的开源框架&#xff0c;用于处理分布式环境中的海量数据。Hadoop 使用 Java 编写&#xff0c;通过简单的编程模型允许在集群中进行大规模数据集的存储和计算。它具备高可靠性、容错性和扩展性。 分布式存储&#xff1a;Hadoop 支持跨集群…

逆向攻防世界CTF系列39-debug

逆向攻防世界CTF系列39-debug 查了资料说.NET要用其它调试器&#xff0c;下载了ILSPY和dnSPY ILSPY比较适合静态分析代码最好了&#xff0c;函数名虽然可能乱码不显示&#xff0c;但是单击函数名还是能跟踪的&#xff0c;而dnSPY在动态调试上效果好&#xff0c;它的函数名不仅…

华为开源自研AI框架昇思MindSpore应用案例:人体关键点检测模型Lite-HRNet

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 一、环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;选择下面的云平台以开始使用昇思MindSpore&#xff0c;获取安装命令&#xff0c;安装MindSpo…

Cellebrite VS IOS18Rebooting

Cellebrite VS IOS18Rebooting我们想分享一些有关 iOS 18 重启“功能”的信息。在过去一周左右的时间里&#xff0c;人们对 iOS 18 中一项新的未记录功能产生了极大关注&#xff0c;该功能会导致设备在一段时间不活动后重新启动。 这意味着&#xff0c;如果设备在一定时间不活…

使用 Axios 拦截器优化 HTTP 请求与响应的实践

目录 前言1. Axios 简介与拦截器概念1.1 Axios 的特点1.2 什么是拦截器 2. 请求拦截器的应用与实践2.1 请求拦截器的作用2.2 请求拦截器实现 3. 响应拦截器的应用与实践3.1 响应拦截器的作用3.2 响应拦截器实现 4. 综合实例&#xff1a;一个完整的 Axios 配置5. 使用拦截器的好…

【最大子矩阵——双指针 / 二分】

题目 双指针&#xff1a; 代码 #include <bits/stdc.h> using namespace std; const int N 85, M 1e510; int g[N][M]; int n, m, lim; int ans 1; int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for(int i 1; i < n; i)for(int …

内网渗透-隧道判断-SSH-DNS-icmp-smb-上线linux-mac

1.通道判断 #SMB 隧道&通讯&上线 判断&#xff1a;445 通讯 上线&#xff1a;借助通讯后绑定上线 通讯&#xff1a;直接 SMB 协议通讯即可 #ICMP 隧道&通讯&上线 判断&#xff1a;ping 命令 上线&#xff1a;见前面课程 通讯&#xff1a;其他项…

【优选算法篇】分治乾坤,万物归一:在重组中窥见无声的秩序

文章目录 分治专题&#xff08;二&#xff09;&#xff1a;归并排序的核心思想与进阶应用前言、第二章&#xff1a;归并排序的应用与延展2.1 归并排序&#xff08;medium&#xff09;解法&#xff08;归并排序&#xff09;C 代码实现易错点提示时间复杂度和空间复杂度 2.2 数组…

【微软:多模态基础模型】(3)视觉生成

欢迎关注【youcans的AGI学习笔记】原创作品 【微软&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微软&#xff1a;多模态基础模型】&#xff08;3&#xff09;视觉生成 【微…

netcore Kafka

一、新建项目KafakDemo <ItemGroup><PackageReference Include"Confluent.Kafka" Version"2.6.0" /></ItemGroup> 二、Program.cs using Confluent.Kafka; using System; using System.Threading; using System.Threading.Tasks;names…

工业生产安全-安全帽第一篇-opencv及java开发环境搭建

一.背景 公司是非煤采矿业&#xff0c;核心业务是采选&#xff0c;大型设备多&#xff0c;安全风险因素多。当下政府重视安全&#xff0c;头部技术企业的安全解决方案先进但价格不低&#xff0c;作为民营企业对安全投入的成本很敏感。利用我本身所学&#xff0c;准备搭建公司的…

fastadmin多个表crud连表操作步骤

1、crud命令 php think crud -t xq_user_credential -u 1 -c credential -i voucher_type,nickname,user_id,voucher_url,status,time --forcetrue2、修改控制器controller文件 <?phpnamespace app\admin\controller;use app\common\controller\Backend;/*** 凭证信息…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-26

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

Essential Cell Biology--Fifth Edition--Chapter one (8)

1.1.4.6 The Cytoskeleton [细胞骨架] Is Responsible for Directed Cell Movements 细胞质基液不仅仅是一种无结构的化学物质和细胞器的混合物[soup]。在电子显微镜下&#xff0c;我们可以看到真核细胞的细胞质基液是由长而细的丝交叉而成的。通常[Frequently]&#xff0c;可…

RK3568 Linux 系统加系统运行指示灯

一、dts配置 gpio-leds {status = "okay";compatible = "gpio-leds";work-led {gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>

C++11(六)----包装器function和bind

文章目录 包装器&#xff1a;function包装器&#xff1a;bind 包装器&#xff1a;function function接口介绍 在头文件<functional>中 语法&#xff1a;function的语法比较特殊 function<返回值(参数)> 自定义变量名 要被包装的可调用对象 class Plus { public:…

店铺推推-项目测试用例设计(Xmind)

项目介绍&#xff1a; 技术栈: Spring BootMyBatisRedis项目描述&#xff1a; 项目旨在为消费者提供一个公平、公开、透明的平台&#xff0c;让消费者能够基于真实的消费体验对店铺进行评价和 推荐&#xff0c;并为其他潜在消费者提供参考。同时&#xff0c;店铺推推也是为商家…