STM32的独立看门狗定时器(IWDG)技术介绍
在嵌入式系统中,确保系统的稳定性和可靠性至关重要。看门狗定时器(Watchdog Timer, WDT) 是一种常用的硬件机制,用于监控系统的运行状态,防止系统因软件故障或意外情况进入不可预期的状态。STM32系列微控制器提供了两种主要的看门狗定时器:独立看门狗定时器(Independent Watchdog, IWDG) 和 窗口看门狗定时器(Window Watchdog, WWDGT)。本文将重点介绍独立看门狗定时器(IWDG),包括其工作原理、主要功能、配置方法、使用示例及常见应用场景。
一、独立看门狗定时器(IWDG)概述
独立看门狗定时器(IWDG) 是STM32微控制器中的一个独立外设,旨在监控系统的运行状态,确保系统在出现异常时能够自动复位,从而恢复正常运行。与窗口看门狗定时器(WWDGT)不同,IWDG具有以下特点:
-
独立运行:IWDG独立于主时钟(如HSE、HSI等)运行,通常基于内部低速振荡器(LSI,Low-Speed Internal)时钟源。这意味着即使主系统时钟发生故障,IWDG仍能继续运行,确保系统能够在异常情况下复位。
-
低功耗:IWDG设计为低功耗模式,适用于对功耗有严格要求的应用,如电池供电的设备。
-
自动复位:当IWDG计数器达到预设的超时时间而未被及时“喂狗”(刷新),系统将自动触发复位,确保系统能够从异常状态中恢复。
-
不可禁用:一旦IWDG启动,除非发生复位,否则无法通过软件禁用。这增加了系统的可靠性,防止看门狗被意外或恶意关闭。
二、IWDG的工作原理
IWDG通过一个预分频器和计数器来监控系统的运行状态。其基本工作流程如下:
-
初始化:配置IWDG的预分频器和计数器,设定超时时间。
-
启动计数:IWDG开始计数,计数器从设定的值开始递减。
-
喂狗(刷新):软件在每个超时时间之前定期调用“喂狗”操作,将计数器重置为初始值,防止复位。
-
超时复位:如果在预设的超时时间内未进行“喂狗”操作,IWDG计数器将递减至零,触发系统复位。
注意:IWDG一旦启动,必须在软件允许的时间内定期“喂狗”,否则系统将持续复位。
三、IWDG的主要功能
-
独立时钟源:
- 基于内部低速振荡器(LSI),独立于主系统时钟。
- 保证在主时钟故障时仍能正常工作。
-
可配置的预分频器和计数器:
- 允许用户根据应用需求灵活设置超时时间。
- 预分频器范围广,可实现从几百毫秒到几十秒的超时时间。
-
自动复位:
- 通过硬件机制自动复位系统,确保系统从异常状态中恢复。
-
低功耗:
- 设计为低功耗模式,适用于电池供电的设备。
-
不可禁用:
- 启动后,除非系统复位,否则无法通过软件禁用,提高系统可靠性。
四、IWDG的配置方法
配置IWDG通常包括以下步骤:
-
启用IWDG时钟:
- 无需手动启用时钟,IWDG在启动时自动启用。
-
配置预分频器和计数器:
- 通过设置预分频器(Prescaler)和计数器(Reload)来确定超时时间。
-
启动IWDG:
- 启动IWDG,使其开始计数。
-
喂狗操作:
- 在超时时间之前定期刷新IWDG,防止系统复位。
1. 配置预分频器和计数器
IWDG的超时时间由以下公式计算:
其中:
- Reload:IWDG重装载值(0x000到0xFFF)。
- Prescaler:预分频器,可选择4、8、16、32、64、128、256。
- LSI:内部低速振荡器频率,通常为40kHz左右。
2. 启动IWDG
启动IWDG后,除非系统复位,否则无法通过软件禁用。
3. 喂狗操作
通过编写函数定期刷新IWDG,确保系统正常运行。
五、IWDG的配置示例代码
以下示例基于STM32的HAL库,展示如何配置和使用IWDG。
#include "stm32f4xx_hal.h"/*** @brief 配置独立看门狗定时器(IWDG)*/
void IWDG_Config(void)
{// 初始化IWDG句柄IWDG_HandleTypeDef hiwdg;// 设置IWDG预分频器为64hiwdg.Instance = IWDG;hiwdg.Init.Prescaler = IWDG_PRESCALER_64;// 设置重装载值,以达到约1秒的超时时间(假设LSI为40kHz)// Timeout = Reload * Prescaler / LSI = 256 * 64 / 40000 ≈ 0.4096秒hiwdg.Init.Reload = 256;// 启用窗口模式(可选)hiwdg.Init.Window = 0xFFF; // 禁用窗口模式// 初始化IWDGif (HAL_IWDG_Init(&hiwdg) != HAL_OK){// 初始化失败,处理错误while(1);}// 启动IWDGif (HAL_IWDG_Start(&hiwdg) != HAL_OK){// 启动失败,处理错误while(1);}
}/*** @brief 喂狗函数*/
void IWDG_Feed(void)
{// 刷新IWDG计数器,防止系统复位HAL_IWDG_Refresh(&hiwdg);
}int main(void)
{// HAL库初始化HAL_Init();// 配置系统时钟SystemClock_Config();// 配置IWDGIWDG_Config();while (1){// 主循环任务// 执行一些任务...// 定期喂狗IWDG_Feed();// 添加延时,确保喂狗操作在超时时间内HAL_Delay(500); // 延时500ms}
}
代码解析
-
IWDG_Config 函数:
- 初始化IWDG句柄,设置预分频器和重装载值。
- 调用
HAL_IWDG_Init
初始化IWDG。 - 调用
HAL_IWDG_Start
启动IWDG。
-
IWDG_Feed 函数:
- 使用
HAL_IWDG_Refresh
定期刷新IWDG计数器,防止系统复位。
- 使用
-
main 函数:
- 初始化HAL库和系统时钟。
- 配置并启动IWDG。
- 在主循环中执行任务,并定期调用
IWDG_Feed
函数进行喂狗操作。
注意:
- 预分频器和重装载值的设置需要根据实际LSI频率和所需超时时间进行调整。
- 喂狗操作必须在超时时间之前执行,否则系统将复位。
六、IWDG的使用注意事项
-
不可禁用:
- 一旦IWDG启动,无法通过软件禁用。确保在系统设计中合理使用,看门狗机制。
-
喂狗操作时机:
- 喂狗操作应放在系统关键任务完成后,确保系统在正常运行时才能刷新IWDG。
-
预分频器和重装载值设置:
- 根据应用需求和LSI频率合理配置预分频器和重装载值,避免过短或过长的超时时间。
-
时钟源的稳定性:
- IWDG基于LSI时钟,LSI频率受温度和电源电压影响较大,可能导致IWDG超时不准确。对于高精度需求,可考虑使用外部低速晶振(LSE)配合其他看门狗机制。
-
复位后相关配置:
- IWDG配置一旦设置并启动,复位后需要重新配置。确保复位后系统能够自动重新启动看门狗。
-
调试期间的处理:
- 在调试过程中,可能需要临时禁用IWDG以避免频繁复位。可通过设置一个条件,在调试模式下不启动IWDG,确保调试过程顺利进行。
七、IWDG的常见应用场景
-
工业控制系统:
- 在复杂的工业控制系统中,IWDG用于监控关键任务的执行状态,防止系统因软件故障或通信异常而失控,确保系统的实时性和可靠性。
-
消费电子设备:
- 智能手表、家电控制器等消费电子设备需要长期稳定运行,IWDG通过监控系统状态,确保设备在异常情况下能够自动复位,提升用户体验。
-
汽车电子:
- 汽车中的各种控制单元(如引擎控制单元、车身控制单元)需要高度可靠,IWDG能够及时检测系统故障并触发复位,保证汽车电子系统的稳定运行。
-
物联网设备:
- 在物联网应用中,设备通常需要长时间稳定运行在不同环境下。IWDG可以监控设备的运行状态,防止由于软件异常导致设备失去响应,确保物联网设备的可靠性。
-
医疗设备:
- 医疗设备需要高可靠性和稳定性,IWDG能够确保设备在出现软件故障时能够自动复位,避免潜在的安全风险,提升医疗设备的安全性和可靠性。
-
便携式设备:
- 在电池供电的便携式设备中,IWDG用于监控系统运行状态,防止因软件崩溃导致设备失控或耗尽电池,延长设备的使用寿命。
八、总结
STM32的独立看门狗定时器(IWDG)是一种强大的硬件监控机制,能够有效提高系统的可靠性和稳定性。通过独立于主系统时钟的设计,IWDG能够在系统时钟故障时继续监控,确保系统在出现异常时能够自动复位,恢复正常运行。合理配置IWDG的预分频器和重装载值,确保喂狗操作在超时时间内执行,是充分发挥IWDG保护系统稳定性的关键。
结合其他看门狗机制(如窗口看门狗定时器WWDGT),可以进一步提升系统的安全性和可靠性。掌握STM32的IWDG技术,能够帮助开发者设计出更加稳健和可靠的嵌入式系统,满足各种高可靠性应用的需求。
通过本文的介绍,希望您对STM32的独立看门狗定时器(IWDG)有了深入的了解,并能在实际项目中灵活应用这一机制,提高系统的稳定性和可靠性。
相关文章:

STM32的独立看门狗定时器(IWDG)技术介绍
在嵌入式系统中,确保系统的稳定性和可靠性至关重要。看门狗定时器(Watchdog Timer, WDT) 是一种常用的硬件机制,用于监控系统的运行状态,防止系统因软件故障或意外情况进入不可预期的状态。STM32系列微控制器提供了两种…...

自动化生成工作流?英伟达提出ComfyGen:通过LLM来匹配给定的文本提示与合适的工作流程
ComfyGen的核心在于通过LLM来匹配给定的文本提示与合适的工作流程。该方法从500个来自用户的多样化提示生成图像,随后使用一系列美学预测模型对生成结果进行评分。这些评分与相应的工作流程形成了一个训练集,包含提示、工作流程及其得分的三元组。 然后…...
indicatorTree-v10练习(有问题)
目标:设计数据库表表格式,将“indicatorTree-v10.json”导入到数据库,再从数据库读取写为JSON文件。 其他要求:数据库要求为mysql数据库;编程语言暂时限定为C;JSON解析使用本文件夹中的cJSON.c和cJSON.h&am…...
python源码:指定麦克风/音响播放歌曲
前言 我使用pygame实现了指定麦克风/音响播放歌曲的功能,主要目的是解决直播过程的多源声道控制问题。 代码 # 查看自己的音频设备 # 请记住目标音频设备的具体名称 import pygame as mixer import pygame._sdl2 as sdl2mixer.init() # Initialize the mixer, thi…...

基于华为云智慧生活生态链设计的智能鱼缸
一. 引言 1.1 项目背景 随着智能家居技术的发展和人们对高品质生活的追求日益增长,智能鱼缸作为一种结合了科技与自然美的家居装饰品,正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸,它不仅能够提供…...
OJ-1015图像物体的边界
分析 思路 1.输入读取:读取网格的维度(M,N)和像素值到一个二维数组中。 2.迭代:遍历二维数组中的每个单元格。 3.边界检测:对于每个像素值为1的单元格,检查其八个相邻的单元格。如果任何相邻单元格的像素值为5,则增加边界计数。 4,边界计数调整:由于每…...

RAG 入门实践:从文档拆分到向量数据库与问答构建
本文将使用 Transformers 和 LangChain,选择在 Retrieval -> Chinese 中表现较好的编码模型进行演示,即 chuxin-llm/Chuxin-Embedding。 你还将了解 RecursiveCharacterTextSplitter 的递归工作原理。 一份值得关注的基准测试榜单:MTEB (M…...

445: 选择问题
解法: 第k大的数据查找 a, b map(int, input().split()) l list(map(int, input().split())) l.sort() print(l[b-1])...

IP地址类型选择指南:动态IP、静态IP还是数据中心IP?
你是否曾经困惑于如何选择最适合业务需求的IP地址类型?面对动态IP、静态IP和数据中心IP这三种选择,你是否了解它们各自对你的跨境在线业务可能产生的深远影响? 在跨境电商领域,选择合适的IP类型对于业务的成功至关重要。动态IP、…...

基于Python flask的豆瓣电影可视化系统,豆瓣电影爬虫系统
博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…...

面试不是一场遭遇战
引言 Ethan第一次跳槽时,把工作总结搞成简历,丢到BOSS,面了几场,结果都很糟。复盘下来,发现面试过程临场发挥太多,把攻坚战打成了遭遇战。 那面试要如何准备?什么情况下跳槽?有哪些大…...
【力扣 | SQL题 | 每日3题】力扣1795,1907,1398,602
1. 力扣1795:每个产品在不同商品的价格 1.1 题目: 表:Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | store1 | int | | store2 | int | | store3 …...

centos7.9升级rockylinux8.8
前言 查看centos的版本 ,我这台服务器是虚拟机,下面都是模拟实验 升级前一定要把服务器上配置文件,数据等进行备份 [rootlocalhost ~]#cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]#uname -a Linux jenkins_ser…...

C++初阶(三)---C++入门(下)
目录 一、内联函数 1.内联函数的定义与底层机制 0x01.内联函数的定义 0x02.内联函数的底层机制 2.内联函数的优缺点 优点: 缺点: 3.内联函数的使用建议 4.内联函数的注意事项 二、auto关键字(C11) 1.代码示例 2.auto使…...

Linux--多路转接之epoll
上一篇:Linux–多路转接之select epoll epoll 是 Linux 下多路复用 I/O 接口 select/poll 的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。它是 Linux 下多路复用 API 的一个选择,相比 select 和 poll,…...

自动化工具Nico,从零开始干掉Appium,移动端自动化测试框架实现
这篇将用较短的篇幅给大家介绍我是如何实现iOS和Android的inspector(元素审查工具)的。 实现原理 为了更方便的显示UI界面,且更容易制作,我选择了使用web端来承载整个元素树展示。同时我选用Flask一次性梭哈前后端(因…...
Fast CRC32
链接: Fast CRC32 Error Checking Real life data tends to get corrupted because machines (and humans) are never as reliable as we wish for. One efficient way is make sure your data wasnt unintendedly modifiied is to generate some kind of hash. T…...
生成一个带有二维数据和对应标签的螺旋形数据集(非线性可分数据集)的代码解析
def create_dataset():np.random.seed(1)m 400 # 数据量N int(m/2) # 每个标签的实例数D 2 # 数据维度X np.zeros((m,D)) # 数据矩阵Y np.zeros((m,1), dtypeuint8) # 标签维度a 4 for j in range(2):ix range(N*j,N*(j1))t np.linspace(j*3.12,(j1)*3.12,N) np.rando…...
PHP unset() 函数的作用
PHP 中的 unset() 函数用于销毁指定的变量。具体来说,它会解除变量名与其数据之间的关联,从而释放该变量所占用的内存。不过需要注意的是,unset() 并不是删除变量的内容,而是取消对变量名的引用。如果变量是数组中的某个元素或者对…...

长篇故事可视化方法Story-Adapter:能够生成更高质量、更具细腻交互的故事图像,确保每一帧都能准确地传达故事情节。
今天给大家介绍一个最新的长篇故事可视化方法Story-Adapter,它的工作原理可以想象成一个画家在创作一幅长画卷。首先,画家根据故事的文本提示画出初步的图像。这些图像就像是画卷的草图。接下来,画家会不断回顾这些草图,逐步添加细…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...