STM32开发(十七)STM32F103 片内资源 —— 独立看门狗 IWDG 详解

news/2024/11/29 7:54:33/

文章目录

    • 一、基础知识点
    • 二、开发环境
    • 三、STM32CubeMX相关配置
    • 四、Vscode代码讲解
    • 五、结果演示


一、基础知识点

STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。

主要性能:

  • 自由运行的递减计数器
  • 时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
  • 看门狗被激活后,则在计数器计数至0x000时产生复位

内部框图
在这里插入图片描述

看门狗功能处于VDD供电区,即在停机和待机模式时仍能正常工作。
喂狗过程就是将12位 重装载数值刷新12位递减计数器。
当计数器计数至0x000时产生复位

看门狗设定时间(40kHz的输入时钟(LSI))
在这里插入图片描述


二、开发环境

1、硬件开发准备
主控:STM32F103ZET6
芯片内部独立看门狗模块IWDG

2、软件开发准备
软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。
该部分可参考:软件开发环境构建


三、STM32CubeMX相关配置

1、STM32CubeMX基本配置
本实验基于CubeMX详解构建基本框架 进行开发。

2、STM32CubeMX RTC相关配置
(1)时钟配置
在这里插入图片描述
使能独立看门狗,40kHz的输入时钟(LSI)将会开启

(2)看门狗设置
在这里插入图片描述
看门狗时间:1/(40KHz/32) * 2500 = 2s


四、Vscode代码讲解

1、定义看门狗相关结构体并初始化

typedef struct MyIWDG_s
{uint32_t IWDG_flag;            // 看门狗标志位,用于看门狗测试void (*Feed_WDG)(void);        // 喂狗函数
} MyIWDG_t;extern MyIWDG_t MyIWDG;MyIWDG_t MyIWDG = 
{TRUE,Feed_WDG                        
};

2、具体喂狗函数实现

static void Feed_WDG(void)
{HAL_IWDG_Refresh(&hiwdg);
}

3、系统初始化时添加打印(只要看门狗复位系统就会打印)

    printf(" =============== WDG test =============== \n");

4、主循环添加喂狗机制

if( MyIWDG.IWDG_flag == TRUE )
{MyIWDG.Feed_WDG();
}

5、测试看门狗部分,通过之前触摸按键控制喂狗动作(改变看门狗标志位IWDG_flag) 触摸按键相关代码可参考外部中断 按键 详解

static void Key3_Monitoring_Function(void)
{if(Key3.key_flag == TRUE){Key3.key_press = FALSE;Key3.key_hold = TRUE;for(int i=0; i<200; i++){HAL_Delay(10);if(GPIO_PIN_SET == HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin)){Key3.key_press = TRUE;Key3.key_hold = FALSE;break;}}}if( Key3.key_press == TRUE ){MyIWDG.IWDG_flag = FALSE;printf(" System restart \n\r ");LED3_Toggle;}if( Key3.key_hold == TRUE ){LED3_ON;HAL_Delay(500);LED3_OFF;}Key3.key_flag = FALSE;Key3.key_press = FALSE;Key3.key_hold = FALSE;
}

五、结果演示

在这里插入图片描述


http://www.ppmy.cn/news/52084.html

相关文章

Django框架之定义模型和表迁移

django3.0 定义表模型并通过定义好的模型实现源代码创建数据表。 概述 模型是一个用于表示数据的Python类&#xff0c;包含基本的数据字段和行为。 通常一个模型就代表一张数据库表。 模型继承自django.db.models.Model&#xff0c;模型的每一个属性代表一个数据的字段。 定…

什么是索引(保姆级)

目录 索引&#xff1a; 1、什么是索引&#xff1f; 2、索引是用来做什么的&#xff1f; 3、使用索引有什么好处 四、索引的分类&#xff1a; 1、普通索引 2、唯一索引 3、主键索引 4、全文索引 5、空间索引 六、索引的作用&#xff1a; 七、普通索引 1、普通索引的…

2023全网汇总PMP备考攻略(附答题技巧)

一&#xff0c;多复习和学习新版考纲 01《PMBOK》看三遍 这边建议看三遍《PMBOK》&#xff0c;更有利于我们巩固知识&#xff0c;查缺补漏。 第一遍 第一遍是老师带着我们去看。这个时候一定要非常专心&#xff0c;千万不要上课走神或者玩手机。因为这一遍老师会告诉我们&a…

数据挖掘实验-week8-关联规则挖掘(Association Rule Mining)

Contents 0. 引言0.1 关联规则挖掘0.2 Apriori算法 实验Step 1&#xff1a;Familiarize yourself with the arules package in R.1.1 Load the package.1.2 To load data into R enter.1.3 To get information about the total number of transactions in a file sample1.csv e…

从Qt5升级至Qt6的总结

升级过程 整体工作分为如下几个阶段&#xff1a; 调研Qt6和Qt5的差异&#xff0c;收集官方文档和中文相关的资料。梳理产品源码中使用到的Qt5的特性和模块。参照Qt官方文档和产品的构建说明&#xff0c;整理Qt6软件包的构建脚本。按照产品的构建规范&#xff0c;制作软件包。在…

Python 标准方形信号定义(完美实现)

之前我们介绍了如何定义一个标准的正弦信号,这里我们做一下延申,简单说明一下如何定义一个方形函数。 方形信号表达式 square signal = g ( t ) = sign [ sin ⁡ ( 2 π f t +

常见的NoSQL数据库介绍

目录 一、NoSQL概述 二、为什么用NoSQL 三、NoSQL特点 四、NoSQL的分类 五、NoSQL适用场景 六、NoSQL不适用场景 一、NoSQL概述 NoSQL(NoSQL Not Only SQL )&#xff0c;意即“不仅仅是SQL”&#xff0c;泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储&#xf…

力扣二叉树专题(五)- 左叶子之和、找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树、从前序与中序遍历序列构造二叉树、最大二叉树 C++实现 总结

文章目录 一、404.左叶子之和二、513. 找树左下角的值三、112. 路径总和四、106.从中序与后序遍历序列构造二叉树五、相关题-105.从前序与中序遍历序列构造二叉树六、654.最大二叉树总结 一、404.左叶子之和 注意点&#xff1a; 是左叶子&#xff0c;不是左节点&#xff01;&…