STM32的独立看门狗定时器(IWDG)技术介绍

news2024/10/17 11:21:32

在嵌入式系统中,确保系统的稳定性和可靠性至关重要。看门狗定时器(Watchdog Timer, WDT) 是一种常用的硬件机制,用于监控系统的运行状态,防止系统因软件故障或意外情况进入不可预期的状态。STM32系列微控制器提供了两种主要的看门狗定时器:独立看门狗定时器(Independent Watchdog, IWDG)窗口看门狗定时器(Window Watchdog, WWDGT)。本文将重点介绍独立看门狗定时器(IWDG),包括其工作原理、主要功能、配置方法、使用示例及常见应用场景。


一、独立看门狗定时器(IWDG)概述

独立看门狗定时器(IWDG) 是STM32微控制器中的一个独立外设,旨在监控系统的运行状态,确保系统在出现异常时能够自动复位,从而恢复正常运行。与窗口看门狗定时器(WWDGT)不同,IWDG具有以下特点:

  1. 独立运行:IWDG独立于主时钟(如HSE、HSI等)运行,通常基于内部低速振荡器(LSI,Low-Speed Internal)时钟源。这意味着即使主系统时钟发生故障,IWDG仍能继续运行,确保系统能够在异常情况下复位。

  2. 低功耗:IWDG设计为低功耗模式,适用于对功耗有严格要求的应用,如电池供电的设备。

  3. 自动复位:当IWDG计数器达到预设的超时时间而未被及时“喂狗”(刷新),系统将自动触发复位,确保系统能够从异常状态中恢复。

  4. 不可禁用:一旦IWDG启动,除非发生复位,否则无法通过软件禁用。这增加了系统的可靠性,防止看门狗被意外或恶意关闭。


二、IWDG的工作原理

IWDG通过一个预分频器和计数器来监控系统的运行状态。其基本工作流程如下:

  1. 初始化:配置IWDG的预分频器和计数器,设定超时时间。

  2. 启动计数:IWDG开始计数,计数器从设定的值开始递减。

  3. 喂狗(刷新):软件在每个超时时间之前定期调用“喂狗”操作,将计数器重置为初始值,防止复位。

  4. 超时复位:如果在预设的超时时间内未进行“喂狗”操作,IWDG计数器将递减至零,触发系统复位。

注意:IWDG一旦启动,必须在软件允许的时间内定期“喂狗”,否则系统将持续复位。


三、IWDG的主要功能

  1. 独立时钟源

    • 基于内部低速振荡器(LSI),独立于主系统时钟。
    • 保证在主时钟故障时仍能正常工作。
  2. 可配置的预分频器和计数器

    • 允许用户根据应用需求灵活设置超时时间。
    • 预分频器范围广,可实现从几百毫秒到几十秒的超时时间。
  3. 自动复位

    • 通过硬件机制自动复位系统,确保系统从异常状态中恢复。
  4. 低功耗

    • 设计为低功耗模式,适用于电池供电的设备。
  5. 不可禁用

    • 启动后,除非系统复位,否则无法通过软件禁用,提高系统可靠性。

四、IWDG的配置方法

配置IWDG通常包括以下步骤:

  1. 启用IWDG时钟

    • 无需手动启用时钟,IWDG在启动时自动启用。
  2. 配置预分频器和计数器

    • 通过设置预分频器(Prescaler)和计数器(Reload)来确定超时时间。
  3. 启动IWDG

    • 启动IWDG,使其开始计数。
  4. 喂狗操作

    • 在超时时间之前定期刷新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预分频器为64
    hiwdg.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; // 禁用窗口模式

    // 初始化IWDG
    if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
    {
        // 初始化失败,处理错误
        while(1);
    }

    // 启动IWDG
    if (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();

    // 配置IWDG
    IWDG_Config();

    while (1)
    {
        // 主循环任务
        // 执行一些任务...

        // 定期喂狗
        IWDG_Feed();

        // 添加延时,确保喂狗操作在超时时间内
        HAL_Delay(500); // 延时500ms
    }
}
代码解析
  1. IWDG_Config 函数

    • 初始化IWDG句柄,设置预分频器和重装载值。
    • 调用 HAL_IWDG_Init 初始化IWDG。
    • 调用 HAL_IWDG_Start 启动IWDG。
  2. IWDG_Feed 函数

    • 使用 HAL_IWDG_Refresh 定期刷新IWDG计数器,防止系统复位。
  3. main 函数

    • 初始化HAL库和系统时钟。
    • 配置并启动IWDG。
    • 在主循环中执行任务,并定期调用 IWDG_Feed 函数进行喂狗操作。

注意

  • 预分频器和重装载值的设置需要根据实际LSI频率和所需超时时间进行调整。
  • 喂狗操作必须在超时时间之前执行,否则系统将复位。

六、IWDG的使用注意事项

  1. 不可禁用

    • 一旦IWDG启动,无法通过软件禁用。确保在系统设计中合理使用,看门狗机制。
  2. 喂狗操作时机

    • 喂狗操作应放在系统关键任务完成后,确保系统在正常运行时才能刷新IWDG。
  3. 预分频器和重装载值设置

    • 根据应用需求和LSI频率合理配置预分频器和重装载值,避免过短或过长的超时时间。
  4. 时钟源的稳定性

    • IWDG基于LSI时钟,LSI频率受温度和电源电压影响较大,可能导致IWDG超时不准确。对于高精度需求,可考虑使用外部低速晶振(LSE)配合其他看门狗机制。
  5. 复位后相关配置

    • IWDG配置一旦设置并启动,复位后需要重新配置。确保复位后系统能够自动重新启动看门狗。
  6. 调试期间的处理

    • 在调试过程中,可能需要临时禁用IWDG以避免频繁复位。可通过设置一个条件,在调试模式下不启动IWDG,确保调试过程顺利进行。

七、IWDG的常见应用场景

  1. 工业控制系统

    • 在复杂的工业控制系统中,IWDG用于监控关键任务的执行状态,防止系统因软件故障或通信异常而失控,确保系统的实时性和可靠性。
  2. 消费电子设备

    • 智能手表、家电控制器等消费电子设备需要长期稳定运行,IWDG通过监控系统状态,确保设备在异常情况下能够自动复位,提升用户体验。
  3. 汽车电子

    • 汽车中的各种控制单元(如引擎控制单元、车身控制单元)需要高度可靠,IWDG能够及时检测系统故障并触发复位,保证汽车电子系统的稳定运行。
  4. 物联网设备

    • 在物联网应用中,设备通常需要长时间稳定运行在不同环境下。IWDG可以监控设备的运行状态,防止由于软件异常导致设备失去响应,确保物联网设备的可靠性。
  5. 医疗设备

    • 医疗设备需要高可靠性和稳定性,IWDG能够确保设备在出现软件故障时能够自动复位,避免潜在的安全风险,提升医疗设备的安全性和可靠性。
  6. 便携式设备

    • 在电池供电的便携式设备中,IWDG用于监控系统运行状态,防止因软件崩溃导致设备失控或耗尽电池,延长设备的使用寿命。

八、总结

STM32的独立看门狗定时器(IWDG)是一种强大的硬件监控机制,能够有效提高系统的可靠性和稳定性。通过独立于主系统时钟的设计,IWDG能够在系统时钟故障时继续监控,确保系统在出现异常时能够自动复位,恢复正常运行。合理配置IWDG的预分频器和重装载值,确保喂狗操作在超时时间内执行,是充分发挥IWDG保护系统稳定性的关键。

结合其他看门狗机制(如窗口看门狗定时器WWDGT),可以进一步提升系统的安全性和可靠性。掌握STM32的IWDG技术,能够帮助开发者设计出更加稳健和可靠的嵌入式系统,满足各种高可靠性应用的需求。

通过本文的介绍,希望您对STM32的独立看门狗定时器(IWDG)有了深入的了解,并能在实际项目中灵活应用这一机制,提高系统的稳定性和可靠性。

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

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

相关文章

解读华为云Kuasar多沙箱容器技术,带来更强隔离性和安全性

摘要:沙箱技术的引入,为容器提供了更强的隔离性和安全性,成为云原生技术的重要组成部分。 本文来源 《华为云DTSE》第五期开源专刊,作者:华为云云原生开源团队研发工程师。 近年来,云原生容器技术飞速发展&…

整理—计算机网络

目录 网络OSI模型和TCP/IP模型 应用层有哪些协议 HTTP报文有哪些部分 HTTP常用的状态码 Http 502和 504 的区别 HTTP层请求的类型有哪些? GET和POST的使用场景,有哪些区别? HTTP的长连接 HTTP默认的端口是什么? HTTP1.1怎…

YOLO11改进 | 注意力机制 | 添加SE注意力机制

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文介绍了YOLOv11添加SE注意力机制&…

双通道音频功率放大电路D2822M兼容TDA2822,全封装输出功率0.11W,用于音频产品

在某客户的便携式音频产品中,客户想在确保其产品的性能的前提下,为产品方案寻找一颗国产备份料。客户产品之前使用的是TDA2822,在了解客户的电路设计以及该产品的电气特性后,给客户寻找了一款可兼容相同电路设计使用的国产厂牌芯谷…

Nginx12-集群高可用

零、文章目录 Nginx12-集群高可用 1、Nginx实现服务器集群 (1)单机模式 在使用Nginx和Tomcat部署项目的时候,我们使用的是一台Nginx服务器和一台Tomcat服务器,架构图如下 (2)集群模式 如果Tomcat宕机了…

大语言模型实战教程首发:基于深度学习的大规模自然语言处理模型LLM详解 -Shelly

我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 大模型的热度,实在是很高,诺奖也颁给了…

C语言函数递归经典例题:汉诺塔和小青蛙跳台阶

目录 汉诺塔问题描述思路代码实现思考:怎么判断一共要移动几次?(时间复杂度?) 小青蛙跳台阶BC117 小乐乐走台阶问题描述递归动态规划迭代 汉诺塔 问题描述 将塔A的柱子移动到塔C 要求: 大的柱子只能在小的柱子下面一次只能移动一个柱子 思路 想把A上的n个柱子移动到C 核…

Python学习100天第11天之文件和异常

1 前言 实际开发中常常会遇到对数据进行持久化操作的场景,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于文件系统的知识,但是这里我们并不浪费笔墨介绍这个概念,请大家自…

请求第三方接口有反斜杠和双引号怎么处理,且做格式校验?

如:接口文档要求 直接使用转义失败,在postman中填值请求正常。 String para "[" "\\" "\"" "预计今天白天我市多云间晴;" "\\" "\"]"; System.err.println(pa…

QT的文件操作类 QFile

QFile 是 Qt 框架中用于文件处理的一个类。它提供了读取和写入文件的功能,支持文本和二进制文 件。 QFile 继承自 QIODevice ,因此它可以像其他IO设备一样使用。 主要功能 文件读写: QFile 支持打开文件进行读取或写入操作文件信息&#x…

LinkedList和链表(上)

1. 顺序表ArrayList的缺点和优点 优点: 1> 在给定下标进行查找的时候,时间复杂度是O(1) 缺点: 1> 插入数据必须移动其他数据,最坏情况下,插入到0位置,时间复杂度为O(N) 2> 删除数据也需要移动数据,最坏情况下,就是删除0位置.时间复杂度为O(N) 3> 扩容之后(1.5倍扩容…

[PHP]Undefined index错误只针对数组

1、示例一 <?php $a null; var_dump($a[name]); 结果&#xff1a;无报错 2、示例二 <?php $a []; var_dump($a[name]);结果&#xff1a;报错

v853 tina 文件系统挂载不全问题

文章目录 1、前言2、环境介绍3、解决 1、前言 正常文件系统挂载后应如下图所示&#xff1a; 但目前是这样&#xff1a; 2、环境介绍 硬件&#xff1a;韦东山v853 aicit板卡 软件&#xff1a;v853 tina sdk 3、解决 menuconfig中开启e2fsprogs&#xff1a; Utilities ---&…

C++ —— 关于继承(inheritance)

目录 1. 继承的概念及定义 1.1 继承的概念 1.2 继承的定义格式 1.3 继承基类成员访问方式的变化 1.4 类模板的继承 2.基类与派生类的转换 3. 继承中的作用域 3.1 隐藏规则 4. 派⽣类的默认成员函数 4.1 4个常见默认成员函数 4.2 实现⼀个不能被继承的类 5. 继承与友元…

房产销售系统(论文+源码)_kaic

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统&#xff0c;它彻底改变了过去传统的…

wps安装教程

WPS office完整版是一款由金山推出的免费办公软件&#xff0c;软件小巧安装快&#xff0c;占用内存极小&#xff0c;启动速度快。WPS office完整版包含WPS文字、WPS表格、WPS演示三大功能模块&#xff0c;让我们轻松办公。WPS的功能是依据OFFICE用户的使用习惯而设计&#xff0…

ios局域网访问主机Xcode配置

前景&#xff1a; 公司业务是做智能家居&#xff0c;所有设备通过主机控制&#xff0c;目前有个产品需求是&#xff0c;在没有外网的情况下依然能够通过局域网控制主机的设备。 IOS开发需要做的&#xff1a; 除了业务代码之外&#xff0c;前提还要配置访问局域网功能。有以下…

专升本:开启人生新征程

在当今社会&#xff0c;学历的重要性日益凸显。对于专科生来说&#xff0c;专升本无疑是一次改变命运、开启人生新征程的重要机遇。 一、专升本的价值与意义 &#xff08;一&#xff09;学历提升当你通过专升本考试&#xff0c;成功踏入本科院校的大门&#xff0c;你将获得更高…

【Word原件测试资料合集】软件系统功能测试方案,软件测试方案(整体方案),软件测试文档-测试计划模版(功能与性能),软件测试流程

一、 前言 &#xff08;一&#xff09; 背景 &#xff08;二&#xff09; 目的 &#xff08;三&#xff09; 测试目标 &#xff08;四&#xff09; 适用范围与读者对象 &#xff08;五&#xff09; 术语与缩写 二、 软件测试实施流程 &#xff08;一&#xff09; 测试工作总体流…

【uniapp】实现触底加载数据

前言&#xff1a;实现界面触底数据加载。后端接口得支持翻页传参&#xff08;本案例使用django&#xff09; 1、后端接口 1.1 封装翻页公共方法standardPagination.py # -*- coding: utf-8 -*- # Time : 2024/10/15 13:15 # Author : super # File : standardPaginat…