STM32 独立看门狗(IWDG)详解

news2024/11/19 18:32:25

目录

一、引言

二、独立看门狗的作用

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

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);   // 预分频系数为 64
    IWDG_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.coloradmin.cn/o/2243551.html

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

相关文章

《探索 Spring 核心容器:Bean 的奇妙世界》

一、Spring 核心容器与 Bean 的关系 Spring 核心容器是 Spring 框架的重要组成部分,负责管理和组织应用程序中的对象,而 Bean 则是构成应用程序主干并由 Spring IoC 容器管理的对象,二者紧密相连。 Spring 的核心容器由多个模块组成&#xf…

JFlash添加自定义MCU型号

1.打开安装路径 2.在Devices里创建你想添加的MCU的文件夹并把FLM文件放入 3.Jlink目录里找到JLinkDevices.xml文件 4.修改 <!-- --><!-- G32 --><!-- --><!-- --><!-- G32F103 --><!-- --><Device><ChipIn…

Linux中系统的延迟任务及定时任务

一、延时任务 at 命令&#xff0c;即用即消 如 at 11&#xff1a;30 rm -rf /mnt/* ctrld运行 &#xff08;过一秒即可执行&#xff09; -v 使用较明显的时间格式&#xff0c;列出at调度中的任务列表 -l 可列出目前系统上面的所有该用户的at调度 -c 可以列出后面接…

通过shell脚本分析部署nginx网络服务

通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 [rootlocalhost xzy]# vim 1.sh [rootlocalhost xzy]# chmod x 1.sh [rootlocalhost xzy]# ./1.sh2.判断服务是否安装 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&…

使用PSpice进行第一个电路的仿真

1、单击【开始】菜单&#xff0c;选择【OrCAD Capture CIS Lite】。 2、单击【File】>【New】>【Project】。 3、①填入Name下面的文本框&#xff08;提示&#xff1a;项目名称不要出现汉字&#xff09;&#xff1b; ②选择【Analog or Mixed A/D】&#xff1b; ③单击【…

CentOS网络配置

上一篇文章&#xff1a;VMware Workstation安装Centos系统 在CentOS系统中进行网络配置是确保系统能够顺畅接入网络的重要步骤。本文将详细介绍如何配置静态IP地址、网关、DNS等关键网络参数&#xff0c;以帮助需要的人快速掌握CentOS网络配置的基本方法和技巧。通过遵循本文的…

【unity小技巧】unity最全的性能优化方案分享以及如何进行性能测试(2024/11/11更新)

文章目录 前言一、性能分析软件1、Draw Call什么是Draw Call如何查看Draw Call数量 2、分析帧调试器3、Statistics统计面板 二、优化手段1、关于图集、材质、层级的处理&#xff0c;减少DrawCall2、批处理3、音乐处理4、减少沉余资源和重复资源5、渲染优化&#xff08;GPU&…

[STM32]从零开始的STM32 HAL库环境搭建

一、前言 之前在搭建STM32的标准库环境时就告诉过大家&#xff0c;开发STM32的方式主要有三种。一种是最原始但是效率最高的寄存器开发&#xff0c;另一种是效率仅次于寄存器难度相对较低的标准库开发&#xff0c;最后一种是最为简单但是程序效率最低的HAL库开发。如果对于初学…

阅读2020-2023年《国外军用无人机装备技术发展综述》笔记_技术趋势

目录 文献基本信息 序言 1 发展概况 2 重点技术发展 2.1 人工智能技术 2.1.1 应用深化 2.1.2 作战效能提升 2.2 航空技术 2.2.1螺旋桨设计创新 2.2.2 发射回收技术进步 2.3 其他相关技术 2.3.1 远程控制技术探 2.3.2 云地控制平台应用 3 装备系统进展 3.1 无人作…

python爬虫(二)爬取国家博物馆的信息

import requests from bs4 import BeautifulSoup# 起始网址 url https://www.chnmuseum.cn/zx/xingnew/index_1.shtml # 用于存储所有数据 all_data [] page 1 global_index 1 # 定义全局序号变量并初始化为1 while True:html_url requests.get(url).textif requests.get…

FPGA 第6讲 简单组合逻辑多路选择器

时间&#xff1a;2024.11.11-11.14 一、学习内容 1.组合逻辑 组合逻辑是VerilgHDL设计中一个重要组成部分。从电路本质上讲&#xff0c;组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数&#xff0c;与其他时刻的输入状态无关&#xff0c;无存储电路&#xff0c;也没…

性能超越Spark 13.3 倍,比某MPP整体快数十秒 | 多项性能指标数倍于主流开源引擎 | 云器科技发布性能测试报告

云器Lakehouse正式发布性能测试报告 &#x1f3c5;离线批处理&#xff1a;在复杂批处理任务中&#xff0c;云器Lakehouse相较Spark表现出13.31倍性能提升。 &#x1f3c5;即席查询&#xff1a;在交互式分析场景下&#xff0c;云器Lakehouse相较Trino表现出9.84倍性能提升。 &am…

Frida反调试对抗系列(四)百度加固

本文只是交流技术&#xff0c;如有侵权请联系我删除。 知识星球&#xff1a;https://t.zsxq.com/kNlj4 前言&#xff1a; 上一篇文章我们提到 我们使用github开源魔改好的frida server 但是仍然有一些厂商的server不能通过&#xff0c;那么这篇文章针对百度加固 进行快速通…

利用redis的key失效监听器KeyExpirationEventMessageListener作任务定时提醒功能

某需求&#xff1a; 要求在任务截止日期的前3天时&#xff0c;系统自动给用户发一条消息提醒。 用定时任务的话感觉很不舒服。间隔时间不好弄。不能精准卡到那个点。 由于系统简单&#xff0c;没有使用消息列队&#xff0c;也不能使用延时队列来做。 用Timer的话开销还挺大的&a…

通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制

目录 通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制 一、引言 二、语义搜索与 MongoDB Atlas 的背景 三、MongoDB Atlas 的向量搜索功能 1. 向量搜索的实现方式 2. 典型操作示例 四、RAG 在 MongoDB Atlas 的应用 1、RAG是什么 2、RAG 的实现过程 3、RA…

【graphics】图形绘制 C++

众所周知&#xff0c;周知所众&#xff0c;图形绘制对于竞赛学僧毫无用处&#xff0c;所以这个文章&#xff0c;专门对相关人员教学&#xff08;成长中的码农、高中僧、大学僧&#xff09;。 他人经验教学参考https://blog.csdn.net/qq_46107892/article/details/133386358?o…

Excel使用-弹窗“此工作簿包含到一个或多个可能不安全的外部源的链接”的发生与处理

文章目录 前言一、探讨问题发生原因1.引入外部公式2.引入外部数据验证二、问题现象排查及解决1.排查公式2.排查数据验证3.特殊处理方式总结前言 作为一种常用的办公软件,Excel被大家所熟知。尽管使用了多年,有时候在使用Excel时候也会发生一些不太常见的现象,需要用心核查下…

递归(3)----力扣40组合数2,力扣473火柴拼正方形

给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例 1: 输入: candidates [10,1,2,7,6,1…

CCF-第七届AIOps国际挑战赛-季军方案分享|北航-EasyRAG

历经4个月的时间&#xff0c;从初赛赛道第1&#xff0c;复赛赛道第2&#xff0c;到最后决赛获得季军&#xff0c;这一路我们团队收获了很多实践经验&#xff0c;也结识了不少业界的RAG研究者&#xff0c;受益匪浅。应组委会邀请&#xff0c;本文介绍一下我们EasyRAG方案的亮点和…

Spring Boot出现java: 错误: 无效的源发行版:16的解决方式

第一步&#xff1a; 修改为SDK的目标字节码版本 第二步&#xff1a;CtrlShiftAltS进入项目结构 第三步&#xff1a;pom.xml文件中 在网上搜索和自己SDK适配的Springboot版本&#xff0c;1.8对应的是2.7.1&#xff08;可以用&#xff09; 修改Java版本为1.8 最后的最后&a…