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

STM32-09-IWDG

文章目录

  • STM32 IWDG
    • 1. IWDG
    • 2. IWDG框图
    • 3. IWDG寄存器
    • 4. IWDG寄存器操作步骤
    • 5. IWDG溢出时间计算
    • 6. IWDG配置步骤
    • 7. 代码实现

STM32 IWDG

1. IWDG

  • IWDG

    Independent watchdog,即独立看门狗,本质上是一个定时器,这个定时器有一个输出端,可以输出复位信号。该定时器是一个12位的递减计数器,当计数器的值减到0的时候,就会产生一个复位信号。如果在计数没有减到0之前,重置计数器的值的话,那么就不会产生复位信号,这个动作称为喂狗

  • 作用

    异常:外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞.

    独立看门狗主要用于检测外界电磁干扰,或者硬件异常导致的程序跑飞问题.

    应用:在一些需要高稳定性的产品中,并且对时间精度要求较低的场合.

    独立看门狗是异常处理的最后手段,不可依赖,应在设计时尽量避免异常的发生.

  • IWDG工作原理
    在这里插入图片描述

    时钟信号来自LSI时钟,经过PSC预分频器后变为IWDG的时钟,在时钟下进行递减,当递减计数器的值计数到0时,会产生一个复位,如果期间进行喂狗,就不会产生复位。

2. IWDG框图

在这里插入图片描述

从 IWDG 框图整体认知就是,IWDG 有一个输入(时钟 LSI),经过一个 8 位的可编程预分频器提供时钟给一个 12 位递减计数器,满足条件就会输出一个复位信号。

STM32F103的独立看门狗由内部专门的40Khz低速时钟(LSI)驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的 40Khz,而是在30~60Khz之间的一个可变化的时钟,只是我们在估算的时候,以40Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。

3. IWDG寄存器

  • 键寄存器IWDG_KR
    在这里插入图片描述

    独立看门狗的控制寄存器

    0xCCCC:开始启动独立看门狗;

    0x5555:表示允许访问IWDG_PR和IWDG_RLR寄存器;

    0xAAAA:重新装载寄存器的初值.

  • 预分频寄存器IWDG_PR
    在这里插入图片描述

  • 重装载寄存器IWDG_RLR
    在这里插入图片描述

  • 状态寄存器IWDG_SR
    在这里插入图片描述

4. IWDG寄存器操作步骤

在这里插入图片描述

5. IWDG溢出时间计算

在这里插入图片描述

最短最长超时时间
在这里插入图片描述

6. IWDG配置步骤

在这里插入图片描述

函数主要寄存器主要功能
HAL_IWDG_InitIWDG_PR/RL/KR使能IWDG,设置预分频系数和重装载值等
HAL_IWDG_RefreshIWDG_KR把重装载寄存器的值重载到计数器中,喂狗

7. 代码实现

  • 实验效果

    在配置看门狗后,LED0将常亮,如果KEY_UP按键按下,就喂狗,只要KEY_UP不停的按,看门狗就一直不会产生复位,保持LED0的常亮,一旦超过看门狗定溢出时间(Tot)还没按,那么将会导致程序重启,这将导致LED0熄灭一次。

  • 硬件连接
    在这里插入图片描述
    在这里插入图片描述

  • 软件代码

    1. IWDG初始化函数

      void iwdg_init(uint8_t prer, uint16_t rlr)
      {g_iwdg_handle.Instance = IWDG;g_iwdg_handle.Init.Prescaler = prer;  //设置IWDG分频系数g_iwdg_handle.Init.Reload = rlr;      //重装载值HAL_IWDG_Init(&g_iwdg_handle);   //进行初始化
      }
      
    2. 喂狗函数

      void iwdg_feed(void)
      {HAL_IWDG_Refresh(&g_iwdg_handle);  //重装载计数器
      }
      
    3. 主函数代码

      int main(void)
      {HAL_Init();                         /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72);                     /* 延时初始化 */usart_init(115200);                 /* 串口初始化为115200 */led_init();                         /* 初始化LED */key_init();                         /* 初始化按键 */delay_ms(100);                      /* 延时100ms再初始化看门狗,LED0的变化"可见" */iwdg_init(IWDG_PRESCALER_64, 625);  /* 预分频数为64,重载值为625,溢出时间约为1s */LED0(0);                            /* 点亮LED0(红灯) */while (1){if (key_scan(1) == 4)       /* 如果WK_UP按下,则喂狗 */{iwdg_feed();            /* 喂狗 */}delay_ms(10);}
      }
      

      在main函数里,先初始化系统和用户的外设代码,然后先点亮LED0,在无限循环里开始获取按键的键值,按下就喂狗,不是则延时10s,继续上述操作。当1秒钟后都没测到按键按下,WDG就会产生一次复位信号,系统复位,可以看到LED0因系统复位熄灭一次,再亮。反之,当按下按键后,1秒内再按下按键,就会及时喂狗,结果就是系统不会复位,LED0也就不会闪烁。

声明:资料来源(战舰STM32F103ZET6开发板资源包)

  1. Cortex-M3权威指南(中文).pdf
  2. STM32F10xxx参考手册_V10(中文版).pdf
  3. STM32F103 战舰开发指南V1.3.pdf
  4. STM32F103ZET6(中文版).pdf
  5. 战舰V4 硬件参考手册_V1.0.pdf

相关文章:

STM32-09-IWDG

文章目录 STM32 IWDG1. IWDG2. IWDG框图3. IWDG寄存器4. IWDG寄存器操作步骤5. IWDG溢出时间计算6. IWDG配置步骤7. 代码实现 STM32 IWDG 1. IWDG IWDG Independent watchdog,即独立看门狗,本质上是一个定时器,这个定时器有一个输出端&#…...

Android手动下载Gradle的使用方法

导入新项目通常会自动下载gradle版本,这种方式很慢而且经常下载失败,按照提示手动下载的gradle应该放在那里,如何使用,本篇文章为你提供一种亲测有效的方法: 在Android Studio打开Setting搜索Gradle找到Gradle的存放目…...

2024彩虹医械维修培训邀请

INVITATION 2024年5月20日 时间/TIME 地点/SITE (西安、成都) 随着我国医疗水平的提升,为适应现代医疗的发展步伐,提升医疗服务水平,各个医院在当下都开始重视医疗器械的维修。在医械行业,由于医疗器械…...

车辆超龄无法注册滴滴司机怎么办理账号

车辆超龄无法注册滴滴司机,别担心这个视频教你如何解决,滴滴司机注册过程中 车辆年限是一个常见的限制条件,如果您的车辆超过了8年,那么注册滴滴可能会遇到困难,但是不要因此而放弃成为滴滴司机的机会,《 …...

MATLAB车辆动力学建模 ——《控制系统现代开发技术》

引言 在上这门课之前,我已经用过CasADi 去做过最优化的相关实践,其中每一步迭代主要就是由:对象系统优化求解两部分组成的。这里我们重点介绍 “对象系统”如何去描述 ,因为它是每一步迭代中重要的一环——“优化求解”会获得控制…...

复杂json解析(其中有一个key的value是json格式的字符串)

app上报的参数如下: {"clientId": "8517895440514039afcf6d3e5d7832ae","dua": "SNDOCKCJPH90_GA&VN900042418&BN0&VCXiaomi&MOM2012K11AC&RL1080_2239&CHIDunknown_unknown&LCID&RV&OSAndroid13&…...

线程池的一些问题

核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…...

企业或者个体户为什么会经营异常?

在复杂多变的市场经济环境中,无论是企业还是个体工商户,都可能遭遇经营异常的情况。及时识别这些预警信号并采取有效措施,对于避免潜在风险、保持健康发展至关重要。本文将深入探讨企业与个体户常见的经营异常类型、识别方法以及应对策略&…...

ROS从入门到精通4-3:制作Docker镜像文件Dockerfile

目录 0 专栏介绍1 为什么需要Dockerfile?2 Dockerfile书写原则3 Dockerfile常用指令3.1 FROM3.2 MAINTAINER3.3 RUN3.4 ADD3.5 COPY3.6 CMD3.7 ENV3.8 EXPOSE3.9 WORKDIR3.10 ARG 4 Dockerfile构建ROS工程实例 0 专栏介绍 本专栏旨在通过对ROS的系统学习&#xff0…...

【CV】计算机视觉是什么?

计算机视觉是一门研究如何使机器“看”的学科,旨在实现从图像或视频中获取信息的技术和方法。它涵盖了图像处理、模式识别、机器学习等多个领域,是人工智能领域的重要分支之一。以下是计算机视觉的一般概要介绍: 概要介绍: 图像…...

如何在Vue中实现鼠标悬浮展示与隐藏弹窗的功能

如果你需要鼠标在元素和弹窗上时保持弹窗显示,而鼠标离开这两者时隐藏弹窗,你可以使用一个稍微复杂的逻辑来处理鼠标的进入和离开事件。 这通常涉及到延时关闭弹窗,以便给用户足够的时间从元素移动到弹窗上,而不触发弹窗关闭。以…...

03 Linux编程-进程

1、进程的相关概念 1.1 程序与进程 程序是静态的概念,进程是程序的一次运行活动。 1.2 查看系统中有哪些进程 ps #只显示一小部分进程 ps -aux #会打印当前所有进程 ps -aux|grep init #使用grep筛选出只含有init的进程top #运行显示的进程有点类似windows…...

Hbuild-X运行ios基座app

一、说明 ios真机第一次运行的时候需要下载插件,这个都是自动监测,自动下载的,不用多说。ios真机运行是需要签名的,不然就会报以下错误。如何制作免费的签名证书呢,需要借助爱思助手来完成。 二、安装爱思助手 &…...

Node.js基础:从入门到实战

初识 Node.js 与内置模块 (初识) 1、知道什么是node.js 2、知道node.js可以做什么 3、node.js 中js的组成部分 (内置模块) 4、用 fs 模块读写操作文件 5、使用 path 模块处理路径 6、使用http 模块写一个基本的web服务器 初识 N…...

考研408笔记总结~

目录 一.数据结构 二.计算机组成原理 三.操作系统 四.计算机网络 私以为边看视频,边做笔记会更专注些,大家需要自取。欢迎大家和我一起探讨考研的问题,包括不仅限于专业课,数学,英语等等......,想说什么…...

使用在线工具等方式下载推特视频

使用在线工具等方式下载推特视频 使用在线工具 Visit a Twitter video downloader website: Websites like twdown.net, twittervideodownloader.com, and savevideo.me offer services to download Twitter videos.Paste the Twitter video URL into the designated input bo…...

性能优化:几方面考虑

我们可以继续再考虑下关于性能优化,我们还能从哪些方面着手呢? 1. 代码层面: 使用更高效的数据结构和算法。使用缓存避免多次数据库交互减少不必要的计算和内存分配。利用并行和异步编程提高性能。使用性能分析工具定位和优化瓶颈。 2. We…...

学习大数据:论学习Spark的重要性

随着科技的不断发展,大数据已经成为了当今社会的热门话题。大数据技术的出现,为我们提供了处理海量数据的新方法,使得我们能够从这些数据中挖掘出有价值的信息。在众多的大数据处理框架中,Apache Spark无疑是最为出色的一种。本文…...

学习java第七十一天

DI:依赖注入 依赖注入是spring容器中创建对象时给其设置依赖对象的方式,比如给spring一个清单,清单中列出了需要创建B对象以及其他的一些对象(可能包含了B类型中需要依赖对象),此时spring在创建B对象的时候…...

Altium Designer PCB快捷键设置

6)PCB修改快捷键,并自定义工具栏 添加boardlayerset系统命令。 修改系统脚本, 在D:\Program Files\Altium\AD18\System下,找到advpcb.rcs文件,打开。 Tree MNPCB_LayerSets CaptionManage Layer Se&ts Popup Emp…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)

漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...