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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shiro_attack工具-shiro反序列化漏洞的快速检测和利用

shiro反序列化漏洞的快速检测和利用 前言 今天分享一个好用的渗透测试工具,主要是针对shiro框架漏洞的,它可以自动的爆破shiro密钥,同时可以写入大马,本人实战中觉得很好用!!! 工具名称 shi…

DDoS防护的市场需求将不断增长,DDoS高防IP显得各位重要

分布式拒绝服务(DDoS)攻击是一种恶意攻击,它借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的为例。DDoS攻击通过大量合法的请求占用大…

[HNCTF 2024] crypto/pwn

周日的比赛,赛后拿别人的WP又作了俩,最后一个题也是没弄懂,先记一下吧。 Crypto EZmath 一个简单的函数题。在sagemath里有个two_squares函数,可以从平方和恢复两个规模相近的数。这种比较适合于RSA里的p,q。另外未知的e用来猜…

【神经网络与深度学习】Transformer原理

transformer ENCODER 输入部分 对拆分后的语句x [batch_size, seq_len]进行以下操作 Embedding 将离散的输入(如单词索引或其他类别特征)转换为稠密的实数向量,以便可以在神经网络中使用。位置编码 与RNN相比,RNN是一个字一个字…

机器学习(3)

目录 3-1线性回归 3-2最小二乘解 3-3多元线性回归 3-4广义线性模型 3-5对率回归 3-6对率回归求解 3-7线性判别分析 3-8LDA的多类推广 3-9多分类学习基本思路 3-10类别不平衡 3-1线性回归 线性模型为什么重要? 人类在考虑问题时,通常…

Cocos Creator 3.8.x 透明带滚动功能的容器

ScrollView 是一种带滚动功能的容器 1、删除ScrollView下Sprite组件的SpriteFrame 2、ScrollView下scrollBar的Sprite组件的Color设为:FFFFFF00 3、ScrollView下view的Graphics组件的FillColor设为:FFFFFF00

文档可视化+表单引擎,让数据交互更流畅!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开发的文档引擎 Nocode/WEP 的最新更新。 往期精彩 零代码AI的阶段性复盘文档引擎AI可视化打造下一代文档编辑器爆肝100…

用docker命令行操作远程的Dockerd daemon服务

本地安装 Dockerd 服务太耗本机磁盘空间了,共用已有的Dockerd服务能够节省一部分空间 修改 Dockerd 服务启动文件,增加TCP监听方式 Dockerd 服务默认监听方式为 Unix Domain Socket ,只允许本机连接,想要能够远程连接&#xff0…

selenium发展史

Selenium Core 2004 年,Thoughtworks 的工程师 Jason Huggins 正在负责一个 Web 应用的测试工作,由于这个项目需要频繁回归,这导致他不得不每天做着重复且低效的工作。为了解决这个困境,Jason 开发了一个运行在 JavaScript 沙箱中…

43k Star!推荐一款功能强大的开源笔记软件!

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法&…

每天Get一个小技巧:用DolphinScheduler实现隔几天调度

转载自tuoluzhe8521 这篇小短文将教会你如何使用Apache DolphinScheduler实现隔几天调度,有此需求的小伙伴学起来! 1 场景分析 DolphinScheduler定时器模块-定时调度时每3秒|每3分钟|每3天这种定时,不能够跨分钟,跨小时&#x…