【STM32基础 CubeMX】外部中断

news2024/12/29 4:41:21

文章目录

  • 前言
  • 一、中断是什么
  • 二、使用CubeMX配置你的第一个中断
  • 三、代码分析CubeMX
  • 四、中断函数
  • 按键中断点灯示例代码
  • 总结


前言

当涉及到STM32基础的外部中断时,我们进入了一个引人入胜的领域,它允许微控制器与外部世界进行互动并实时响应各种事件。外部中断是STM32系列微控制器的一个强大功能,它允许我们在特定条件下中断当前的程序执行,以执行一些特殊的任务或处理来自外部世界的事件。
在这个系列的教程中,我们将深入研究STM32外部中断的基础知识和应用。我们将探讨以下关键主题:

1.什么是外部中断? 我们会解释外部中断的概念以及它在嵌入式系统中的作用。
2.STM32外部中断引脚 我们将了解如何配置和使用STM32微控制器上的外部中断引脚,包括选择引脚、配置触发方式和中断优先级。
3.编程STM32外部中断 我们将介绍如何使用STM32的HAL库或Cubemx来编程配置和管理外部中断。
4.外部中断的应用 我们将讨论一些常见的应用场景,包括按钮按下检测、传感器触发以及实时事件处理。

通过这个系列,你将能够掌握如何在STM32微控制器上利用外部中断来增强你的嵌入式系统的交互性和实时响应能力。无论你是初学者还是有一定经验的开发者,这个系列都将帮助你更好地理解和利用STM32的外部中断功能。让我们开始吧,一起探索外部中断的奥秘!


一、中断是什么

中断就像你在忙于一项任务时,突然听到电话铃响,于是你中断当前的工作,去接电话。在计算机和嵌入式系统中,中断是一种类似的概念。它是一种机制,允许计算机或微控制器在执行某个任务时,临时中止当前工作,处理一个重要事件,然后再返回原来的任务。
具体来说,中断是一种通信方式,用于向计算机或微控制器提供外部事件的通知。这些外部事件可以是各种事情,比如按下键盘上的按键、传感器检测到某个条件变化、网络数据到达等等。当一个中断事件发生时,计算机或微控制器会停下手头的工作,跳转到一个特定的处理程序(中断处理程序)来处理这个事件。一旦事件被处理完毕,计算机或微控制器会回到之前的工作状态,就像你挂断电话后又回到了之前的工作一样。
中断使得系统可以高效地响应外部事件,而不需要持续地检查这些事件是否发生。这对于实时控制和处理异步事件非常重要。因此,中断是计算机和嵌入式系统中一种重要的事件处理机制。

二、使用CubeMX配置你的第一个中断

1、我们可以点击一个GPIO,一般是按钮这些,然后设置为exit
在这里插入图片描述
2、设置按钮的上下拉模式:
在这里插入图片描述
3、把中断启用
在这里插入图片描述
4、选择中断触发方式
中断触发方式有上升沿和下降沿。
他们的是什么,我们该如何选择:
上升沿:

想象一下,你站在一个楼梯上,然后你开始往上爬。每当你迈过一级楼梯的边缘,这就好比一个信号从低电平(在楼梯下方)变成高电平(在楼梯上方)。这个变化点就是上升沿。所以,上升沿就是从低到高的变化,就像你从楼梯下爬到楼梯上一样。

在电子领域,上升沿通常表示电压信号从低电平变为高电平的瞬间。

下降沿:

现在,反过来想象一下,你站在楼梯上,然后你开始往下走。每当你走到一级楼梯的边缘,这就好比一个信号从高电平(在楼梯上方)变成低电平(在楼梯下方)。这个变化点就是下降沿。所以,下降沿就是从高到低的变化,就像你从楼梯上走到楼梯下一样。

在电子领域,下降沿通常表示电压信号从高电平变为低电平的瞬间。

综合起来,上升沿和下降沿描述的是信号电平的变化,就好比你在楼梯上下行时,每一级楼梯的变化一样。

他的选择:按下去如果是上拉:我们就需要下降沿,如果是下拉:我们就需要上升沿

最后,让我们生成代码!

三、代码分析CubeMX

/*Configure GPIO pin : PE4 */
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI4_IRQn);

在这里插入图片描述

代码分析:
GPIO_InitStruct.Pin = GPIO_PIN_4;:指定要配置的GPIO针脚为GPIO_PIN_4,即针脚PE4。

GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;:配置GPIO工作模式为中断触发模式,而且是下降沿触发(IT_FALLING,即在下降沿触发中断)。

GPIO_InitStruct.Pull = GPIO_PULLUP;:配置GPIO针脚上拉,意味着在没有外部信号时,该引脚被拉高(逻辑上是1)。

HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);:使用上述配置初始化GPIOE中的指定针脚,即PE4。

/* EXTI interrupt init*/:这是一段注释,说明接下来要初始化外部中断(EXTI)的配置。

HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);:设置外部中断EXTI4的中断优先级,此处设置为优先级0,亚优先级0。

HAL_NVIC_EnableIRQ(EXTI4_IRQn);:使能外部中断EXTI4的中断处理,即允许该中断触发时执行相应的中断服务程序。

四、中断函数

当中断产生后,他会进入一个函数中执行函数中的东西,函数原型如下:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

在这里插入图片描述

参数为触发中断的GPIO_Pin

我们需要实现他。

按键中断点灯示例代码

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	static char state = 0;
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, state);
	state = !state;
}

在这里插入图片描述

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin):这是一个函数的声明,名称为HAL_GPIO_EXTI_Callback,接受一个参数GPIO_Pin,它表示触发中断的GPIO引脚的标识(通常是一个数字)。

{:这标志着函数的开始。

static char state = 0;:这行代码定义了一个静态(static)变量state,并将其初始化为0。静态变量在函数调用之间保持其值,即使函数调用完毕也不会丢失其值。

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, state);:这行代码调用了HAL库中的函数HAL_GPIO_WritePin,它用于控制GPIO引脚的电平状态。在这里,它将GPIOB引脚5的状态设置为state的值。这意味着,每次触发中断时,GPIOB的引脚5的状态会在0和1之间切换。

state = !state;:这行代码将state的值取反,所以如果state是0,它将变成1,反之亦然。这个操作确保了每次中断触发时,GPIO引脚的状态都会切换。

}:这标志着函数的结束。

总的来说,这个函数用于处理外部中断,每次触发中断时,它会将GPIO引脚的状态在0和1之间切换,从而实现了一种简单的状态切换操作。这种模式在许多应用中用于切换设备状态或控制LED等外部设备。


总结

对于中断的使用是非常简单的,只需要在cubemx里面配置一下,写一个函数实现,很快就可以实现中断的效果!

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

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

相关文章

【论文阅读】通过3D和2D网络的交叉示教实现稀疏标注的3D医学图像分割(CVPR2023)

目录 前言方法标注3D-2D Cross Teaching伪标签选择Hard-Soft Confidence Threshold Consistent Prediction Fusion 结论 论文:3D Medical Image Segmentation with Sparse Annotation via Cross-Teaching between 3D and 2D Networks 代码:https://githu…

2023年中国艺术涂料市场发展历程及趋势分析:艺术涂料市场规模将进一步扩大[图]

艺术涂料是一种用于绘画和装饰,具有各种纹理或通过涂装手段后具有高装饰性的新型涂料。由于具有高度饱和的颜色、良好的遮盖力和可塑性,呈现立体装饰效果好、色彩搭配适当、风格独具特色的特点,而使得涂装出的饰面自然贴合、更加美观漂亮&…

Centos7环境下安装MySQL8详细教程

目录 一、Xftp7下载二、MySQL8安装包的下载三、将MySQL8安装包上传至服务器四、解压mysql8安装包五、rpm包的安装六、依次安装下列文件七、对MySQL进行初始化和授权八、查看数据库初始密码九、启动MySQL服务十、使用初始密码登录MySQL关于MySQL的卸载 一、Xftp7下载 关于Xftp7…

力扣 -- 718. 最长重复子数组

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int findLength(vector<int>& nums1, vector<int>& nums2) {int m nums1.size();int n nums2.size();//多开一行&#xff0c;多开一列vector<vector<int>> dp(m 1, ve…

华为云云耀云服务器L实例评测 | 搭建企业级 Registry 服务器 Harbor

文章目录 您需要了解Harbor介绍Harbor特性和优势系统设置关闭防火墙安装Docker安装Docker Compose配置镜像加速器 Habor安装传包并解压配置Harbor安装Horbor登录Harbor 测试创建项目推送镜像拉取镜像 您需要了解 本次搭建采用 华为云耀云服务器 &#xff0c;一键部署、快速搭建…

Visual Studio 代码显示空格等空白符

1.VS2010: 快捷键&#xff1a;CtrlR,W 2.VS2017、VS2019、VS2022&#xff1a; 工具 -> 选项 -> 文本编辑器 -> 显示 -> 勾选查看空白

RWA分析通过10个问题。不要让数字和视觉欺骗您!(文章很长,请仔细阅读)

已经有30个小伙伴加入我们的星球了&#xff0c;如果你不介意的话&#xff0c;可以加入 我的知识星球主要分享 1. 分享区块链各种有价值的内容 2. 一起攻读一些有用的书籍 3. 财富密码&#xff08;不敢保证&#xff09; 4. 一些自我的感悟 1.什么是现实世界资产&#xff08;RWA&…

【Flutter】Flutter Web 开发 如何从 URL 中获取参数值

【Flutter】Flutter Web 开发 如何从 URL 中获取参数值 文章目录 一、前言二、Flutter Web 中的 URL 处理三、如何从 URL 中获取参数四、实际业务中的用法五、完整示例六、总结 一、前言 大家好&#xff01;我是小雨青年&#xff0c;今天我想和大家分享一下在 Flutter Web 开发…

【C++历险记】国庆专辑---探索多态迷宫的代码之旅!

本篇目录 一、什么是多态&#xff1f;二、多态的定义及其实现2.1多态构成的条件2.2虚函数2.3虚函数的重写2.3.1析构函数的重写 2.4C11 override 和 final2.5重载、覆盖(重写)、隐藏(重定义)的对比2.6为什么不能是子类的指针或者引用呢&#xff1f;2.7为什么不能是父类对象呢&am…

【大家的项目】NFS FUSE: 为什么我们用Rust实现了自己的NFS服务器

乐观地看FUSE 我喜欢文件。每个计算机系统都理解文件。每个程序都知道如何读取和写入文件。这是一个真正通用的API。因此&#xff0c;我喜欢FUSE的想法。FUSE的名字来源于Filesystem in Userspace&#xff0c;也就是“用户态文件系统”&#xff0c;是一套允许用户模式程序定义文…

gwas数据根据eaf Z 和N 求beta和se

https://www.nature.com/articles/s41590-023-01588-w#Sec10

基于Java的汽车票网上预订系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【计算机网络】应用层协议原理

文章目录 网络应用程序体系结构客户-服务器体系结构P2P体系结构 进程通信客户和服务器进程进程与计算机网络之间的接口进程寻址 可供应用程序使用的运输服务可靠数据传输吞吐量定时安全性 因特网提供的运输服务TCP服务面向连接的服务可靠数据传输服务TCP安全 UDP服务因特网运输…

Redis实现API访问频率限制

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

phpstudy_pro高效率建一个属于自己的网站

1.下载phpStudy_32 2.下载wordpress-6.3-zh_CN 安装好phpstudy后启动phpstudy中对应的服务&#xff0c;并在网站中配置好对一个的应用的路径 ps:根目录中的路径是你想要通过phpstudy部署应用的路径 这里以wordpress为例 将下载wordpress的压缩包解压后&#xff0c;需要修改…

Python海洋专题六之Cartopy画地形水深图

Python海洋专题六之Cartopy画地形水深图 海洋与大气科学 上期读取nc水深文件&#xff0c;并出图 但是存在一些不完美&#xff0c;本期修饰 本期内容 1&#xff1a;使用Cartopy画出范围图 导入函数包 import matplotlib.pyplot as plt import cartopy.crs as ccrs import c…

上机实验一 顺序表的基本操作和简单程序 西安石油大学数据结构

上机一 实验名称&#xff1a;顺序表的基本操作和简单程序 题目&#xff1a;设计一个有序顺序表&#xff0c;实现以下操作&#xff1a; 1.将元素x插入表中并保持有序&#xff1b; 2.查找值为x的元素&#xff0c;若找到则将其删除&#xff1b; 3.输出表中所有元素。 要求&a…

当面试被问到jvm(Java虚拟机)时,如何将面试官引入自己的节奏?

本文目录 前言快问快答抛砖引玉锦上添花好书推荐总结 前言 作为一名Java开发工程师&#xff0c;不管是校招还是社招jvm一定是必问必会的知识点。虽然说真正开发中用到的不多&#xff0c;甚至可以说用不到&#xff08;对于刚入行或者Java初级&#xff09;&#xff0c;但是当面试…

mathtype试用期后如何继续使用?

MathType7已经正式发布&#xff0c;作为一款强大的数学公式编辑器可以将编辑好的公式保存成多种图片格式或透明图片模式&#xff0c;可以很方便的添加或移除符号、表达式等模板&#xff08;只需要简单地用鼠标拖进拖出即可)&#xff0c;也可以很方便地修改模板&#xff0c;为理…

AdaBoost算法解密:从基础到应用的全面解析

目录 一、简介什么是AdaBoostAdaBoost的历史和重要性定义 二、基础概念集成学习&#xff08;Ensemble Learning&#xff09;定义示例 弱学习器和强学习器定义示例 三、AdaBoost算法原理样本权重&#xff08;Sample Weights&#xff09;定义示例 学习器权重&#xff08;Learner …