【STM32】GPIO口以及EXTI外部中断

在STM32微控制器中,GPIO(通用输入输出)口和EXTI(外部中断)是实现用户交互和事件响应的重要功能。本文将详细介绍STM32的GPIO口和EXTI外部中断的配置和使用方法,以及如何通过代码实现这些功能。

GPIO口简介

STM32的GPIO口可以配置为多种模式,包括输入模式、输出模式、模拟模式和复用模式。每个GPIO口都可以独立配置,以适应不同的应用需求。

EXTI外部中断简介

EXTI是STM32的外部中断/事件控制器,它允许微控制器响应外部事件,如按钮按下、传感器信号变化等。EXTI可以配置为响应上升沿、下降沿或双边沿触发。

硬件连接

以STM32F103C8T6为例,假设我们使用PA0作为外部中断输入。

软件编程

1. 初始化GPIO

首先,需要初始化GPIO口为输入模式,并配置为上拉或下拉输入。

#include "stm32f1xx_hal.h"void GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_0;GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // 下降沿触发GPIO_InitStruct.Pull = GPIO_PULLUP;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

2. 配置AFIO

对于STM32F1系列,需要配置AFIO(Alternate Function I/O)来映射GPIO口到EXTI线。

void AFIO_Init(void) {__HAL_RCC_AFIO_CLK_ENABLE();GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_0);
}

3. 配置EXTI

配置EXTI线,设置触发方式,并使能EXTI线。

void EXTI_Init(void) {EXTI_HandleTypeDef EXTI_InitStruct = {0};__HAL_RCC_EXTI_CLK_ENABLE();EXTI_InitStruct.Line = EXTI_LINE_0;EXTI_InitStruct.Mode = EXTI_MODE_INTERRUPT;EXTI_InitStruct.Trigger = EXTI_TRIGGER_FALLING;EXTI_InitStruct.LineCmd = ENABLE;HAL_EXTI_Init(&EXTI_InitStruct);
}

4. 配置NVIC

配置NVIC(Nested Vectored Interrupt Controller),设置中断优先级。

void NVIC_Init(void) {NVIC_InitTypeDef NVIC_InitStruct = {0};NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x01;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x01;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;HAL_NVIC_Init(&NVIC_InitStruct);
}

5. 实现中断服务函数

实现EXTI0的中断服务函数,处理中断事件。

void EXTI0_IRQHandler(void) {HAL_EXTI_IRQHandler(&hexti[0]);
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if (GPIO_Pin == GPIO_PIN_0) {// 处理外部中断事件}
}

注意事项

  1. GPIO模式:确保GPIO口配置为正确的输入模式,并且触发方式(上升沿、下降沿或双边沿)符合应用需求。
  2. 中断优先级:合理配置中断优先级,避免中断冲突。
  3. 中断处理:在中断服务函数中,确保及时清除中断标志位,避免重复进入中断。

通过上述步骤,我们可以在STM32上成功配置GPIO口和EXTI外部中断,实现对外部事件的响应。这为开发需要外部事件响应的嵌入式系统提供了基础。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

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

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

相关文章

SE30 程序运行时间评估

日常执行报表的时候 可能会遇到报表反应时间太长 用户无法接受的情况,此时 作为IT同事 需要分析程序的运行时间,可以使用SAP标准事务码SE30. 1、选择运行时分析-测量-立即执行(有些程序可能没有此按钮 需联系开发增加) 2、以发…

T-Rex Label标注

这个是做大量数据集的时候用到的,但我觉得他比labelimg好用。 仙人指路✈trexlabel 基本标注 如果是从新开始的话就是 导入图片然后进行直接标注 如果是后期添加图片继续标注,选择你需要的数据集格式,导入即可。 如此,进去就…

部署zabbix遇到问题: cannot find a valid baseurl for repo:centos-sclo-rh/x86 64 怎么解决 ?

安装 Zabbix 前端包,提示cannot find a valid baseurl for repo:centos-sclo-rh/x86 64 安装zabbix前端包 # yum install zabbix-web-mysql-scl zabbix-apache-conf-scl 解决办法: 原因是:CentOS7的SCL源在2024年6月30日停止维护…

小程序+公众号统一账号unionid,实现pc+公众号+小程序统一身份

一、微信开放平台 注册开发者账号、绑定公众号、小程序 二、小程序端获取unionid 1获取code wx.login({success: res > {console.log("getCode", res.code)this.getOpenId(res.code)}}) 2通过code调用后台方法获取openid,unionid 小程序端 getOpenId: functi…

LeetCode【0037】解数独

本文目录 1 中文题目2 求解方法:递归回溯法2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只…

零碎02-接口文档管理

目录 一、背景故事 二、解决方案分析 1. 静态文档方案 2. Swagger Springfox 3. Knife4j增强方案 三、示例 1. 添加依赖 2. 配置Knife4j 3. 创建knife4j配置类 4. 启动Spring Boot项目并访问接口文档 5. 使用示例 6. 测试和使用 四、总结 一、背景故事 酷乐是一名…

指标体系构建:如何设计北极星指标设计?

目录 1 北极星指标的作用 2 北极星指标设计标准 标准1 标准2 标准3 标准4 标准5 标准6 3 小结 1 北极星指标的作用 北极星指标是公司业务成功的关键指标,反映了公司为用户带来的价值,有以下3点作用: ● 像北极星一样&#xff0c…

三菱FX5UPLC以太网Socket通信功能Passive开放的程序示例

Passive开放的通信流程如下所示。 参数设置 示例程序中使用的参数设置如下所示。 [CPU模块】 导航窗口↔[参数]↔[模块型号]↔[模块参数]-[以太网端口]-[基本设置]-[对象设备连接配置设置]↔[详细设置]→[以太网配置(内置以太网端口)]画面 【以太网模块】 [导航]中「参数]→[模…

【MATLAB源码-第292期】基于matlab的4ASK调制解调窄带通信系统仿真,输出各节点波形图以及误码率曲线图。

操作环境: MATLAB 2022a 1、算法描述 窄带通信系统是指带宽较小、频谱利用效率较低的通信系统。与宽带通信系统相比,窄带系统的特点是信号的带宽相对较窄,因此需要更精确的调制技术来实现有效的通信。在窄带通信中,常见的调制方…

【搜索结构】AVL树的学习与实现

目录 什么是AVL树 AVL树的定义 插入函数的实现 左单旋和右单旋 左右双旋与右左双旋 什么是AVL树 AVL树实际上就是二叉搜索树的一种变体,我们都知道二i叉搜索树可以将查找的时间复杂度提升到O(logn),极大提升搜索效率。但是在极端情况下,当…

【专题】2024年中国消费者消费意愿调查报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38242 当今时代,经济社会多元发展,消费市场复杂多变。消费者的行为、需求和支出意愿不断演变,深刻影响着各个领域的发展。家庭余钱的用途反映出消费者在储蓄、教育、医疗等方面的考量。在消费领域…

推荐一款游戏玩家性能优化工具:Razer Cortex

Razer Cortex是一款专为游戏玩家设计的性能优化工具,它旨在提升玩家的游戏体验。通过该软件,用户可以优化 PC 性能,从而提高游戏的流畅度,减少延迟并增强视觉效果,尤其在需要精准操作的游戏中,流畅的画面和…

人工智能(AI)对于电商行业的变革和意义

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/402a907e12694df5a34f8f266385f3d2.png#pic_center> 🎓作者简介:全栈领域优质创作者 🌐个人主页:百锦再新空间代码工作室 📞工作室:新空间代…

1435:【例题3】曲线 一本通 代替三分

1435:【例题3】曲线 题目来源:一本通oj链接 代替三分 题意 给出t组数据,每组里面有n个函数,求出t组数据的函数的最小值 思路 函数是二次函数,具有单峰性,利用左右两边单调性的原理可以进行答案三分处…

英伟达Isaac Manipulator产品体验

相关配置 Isaac Manipulator3.1.0Isaac Sim4.2.0Ubuntu20.04GPURTX 4090 LaptopCPUI9 13900HXMem64GB 过程记录与反馈 GPU加速效果 请描述您在使用Isaac Manipulator时,调用cuMotion加速库来进行机器人运动规划和轨迹优化等任务的步骤和过程,并记录任…

“非法”操控lambda(python)

能过python解释器关卡即是合法脚本代码,偶尔的“违规”操控也是一种唯美。 (笔记模板由python脚本于2024年11月13日 11:18:21创建,本篇笔记适合熟悉python的lambda操控的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.pyth…

[ 网络安全介绍 5 ] 为什么要学习网络安全?

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

java八股笔记-1-java基础

java 特点: 1.平台无关性,java 的字节码文件可以在任何安装了 JVM 的系统上运行 2.面相对象,几乎一切都可以抽象为对象,包括类,对象,继承,封装,多态,抽象 抽象&#xf…

Java入门16——接口

我们今天来学习接口,和继承有点像,话不多说,开始正题~ 一、接口 1.为什么要用接口 接口其实和继承很像,但是继承是 is-a 的关系,接口是 has-a 的关系,而且继承只能是一对一的关系,但是接口可以…

Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行串扰分析操作指导-trace耦合

Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行串扰分析操作指导-trace 耦合 Sigrity Power SI Power Ground Noise Simulation模式可以用来分析信号间的串扰,以下图为例 2D视图