STM32-09-IWDG

news2024/12/25 23:50:25

文章目录

  • 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

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

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

相关文章

ZYNQ之嵌入式驱动开发——字符设备驱动

文章目录 Linux驱动程序分类Linux应用程序和驱动程序的关系简单的测试驱动程序在petalinux中添加LED驱动新字符设备驱动 Linux驱动程序分类 驱动程序分为字符设备驱动、块设备驱动和网络设备驱动。 字符设备是按字节访问的设备,比如以一个字节收发数据的串口&#…

谷歌全力反击 OpenAI:Google I/O 2024 揭晓 AI 新篇章,一场激动人心的技术盛宴

🚀 谷歌全力反击 OpenAI:Google I/O 2024 揭晓 AI 新篇章,一场激动人心的技术盛宴! 在这个人工智能的全新时代,只有谷歌能让你眼前一亮!来自全球瞩目的 Google I/O 2024 开发者大会,谷歌用一场…

项目组GIT操作规范

分支规范 在开发过程中,一般会存在以下几种分支: main分支(master) master为主分支,也是用于部署生产环境的分支,一般由 dev 以及 fixbug分支合并,任何时间都不能直接修改代码。dev分支 develop 为开发分支&#xff…

Altium Designer封装库和元器件符号库下载与导入教程(SnapEDA 、Ultra Librarian、Alldatasheetcn)

1.AD封装库和元器件符号库下载网址 以下是一些全球热门的Altium Designer封装库和元器件符号库下载网址推荐: Altium Content Vault (现称为Altium Manufacturer Part Search):这是Altium官方提供的元器件库,可以直接在Altium Designer中使用…

Java码农的福音:再也不怕乱码了

即便是Java这样成熟的语言,开发者们也常常会遇到一个恼人的问题——乱码。 本文将深入探讨乱码的根本原因,并针对Java开发中的乱码场景提出有效的解决方案,辅以实战代码,让Java程序员从此告别乱码困扰。 一,字符集的…

文件存储解决方案-阿里云OSS

文章目录 1.菜单分级显示问题1.问题引出1.苹果灯,放到节能灯下面也就是id大于1272.查看菜单,并没有出现苹果灯3.放到灯具下面id42,就可以显示 2.问题分析和解决1.判断可能出现问题的位置2.找到递归返回树形菜单数据的位置3.这里出现问题的原因…

什么是最大路径?什么是极大路径?

最近学习中,在这两个概念上出现了混淆,导致了一些误解,在此厘清。 最大路径 在一个简单图G中,u、v之间的距离 d ( u , v ) min ⁡ { u 到 v 的最短路的长度 } d(u,v) \min \{ u到v的最短路的长度 \} d(u,v)min{u到v的最短路的…

音乐的力量

常听音乐的好处可以让人消除工作紧张、减轻生活压力、避免各类慢性疾病等等,其实这些都是有医学根据的。‍ 在医学研究中发现,经常的接触音乐节 奏、旋律会对人体的脑波、心跳、肠胃蠕动、神经感应等等,产生某些作用,进而促进身心…

Postman基础功能-接口返回值获取

大家好,之前给大家分享关于Postman的接口关联,我们平时在做接口测试时,请求接口返回的数据都是很复杂的 JSON 数据,有着多层嵌套,这样的数据层级在 Postman 中要怎么获取呢? 接下来给大家展示几个获取 JSO…

容联云零代码平台容犀desk:重新定义坐席工作台

在数智化浪潮的推动下,企业亟待灵活适应市场变化、快速响应客户需求,同时还要控制成本并提升效率,传统的软件开发模式因开发周期长、成本高、更新迭代慢等问题,逐渐难以满足企业灵活多变的业务需求。 容犀Desk,观察到…

(1)双指针算法介绍与练习:移动零

目录 双指针算法介绍 练习:移动零 双指针算法介绍 双指针算法常见于数组和双向链表的题型 在数组中,双指针中的指针代表数组元素的下标,而不是真正的指针类型变量 在双向链表中,双指针中的指针即为真正意义上的指针&#xff…

Windows安装Django

1、下载Python程序包 Python程序包官网下载地址Download Python | Python.org,若下载最新版本,有最新版本则下载"Windows installer (64-bit)" 若是下载其他版本,可在下图位置找到相应的版本,然后点击Download.如下图所示: 打开后查看注意事项…

开源连锁收银系统哪个好

针对开源连锁收银系统的选择,商淘云是一个备受关注的候选。商淘云以其功能丰富、易于定制和稳定性等优势,吸引了众多企业和开发者的关注。下面将从四个方面探讨商淘云开源连锁收银系统的优势: 首先,商淘云提供了丰富的功能模块。作…

Retrying,一个神奇优雅的 Python 库

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…

Docker安装Mosquitto

在物联网项目中,我们经常用到MQTT协议,用MQTT协议做交互就需要部署一个MQTT服务,而mosquitto是一个常用的MQTT应用服务, Mosquitto是一个实现了消息推送协议MQTT v3.1的开源消息代理软件。MQTT(Message Queuing Teleme…

AI大模型日报#0515:Google I/O大会、 Ilya官宣离职、腾讯混元文生图大模型开源

导读:欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”(ERNIE 4.0)、“零一万物”(Yi-34B)生成了今日要点以及每条资讯的摘要。 《AI大模型日报》今日要点:谷歌…

Java 自然排序和比较器排序区别?Comparable接口和Comparator比较器区别?

注:如果你对排序不理解,请您耐心看完,你一定会明白的。文章通俗易懂。建议用idea运行一下案例。 1)自然排序和比较器排序的区别? 自然排序是对象本身定义的排序规则,由对象实现 Comparable 接口&#xff…

什么?你设计接口什么都不考虑?

如果让你设计一个接口,你会考虑哪些问题? 1.接口参数校验 接口的入参和返回值都需要进行校验。 入参是否不能为空,入参的长度限制是多少,入参的格式限制,如邮箱格式限制 返回值是否为空,如果为空的时候是…

代码随想录算法训练营第二十九天 | 39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 题目链接/文章讲解: 代码随想录 视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)| 回溯法精讲!_哔哩哔哩_bilibili 解题思路 这里和组合不同的是元素可以重复选取…

2024 Google I/O大会:全方位解读最新AI技术和产品

引言: 2024年的Google I/O大会如期举行,作为技术圈的年度盛事之一,谷歌展示了其在人工智能领域的最新进展。本次大会尤其引人注目,因为它紧随着OpenAI昨天发布GPT-4o的脚步。让我们详细解析Google此次公布的各项新技术和产品&…