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

news/2024/12/26 21:58:45/

在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.ppmy.cn/news/1546782.html

相关文章

创新体验触手可及 紫光展锐携手影目科技推出AI眼镜开放平台

近日,紫光展锐携手影目科技共同发布了搭载展锐W517芯片的影目X系列AI眼镜开放平台。这一产品的推出标志着双方在智能穿戴领域的深度协作,将紫光展锐的领先芯片技术与影目的产品创新相融合,合力打造全球智能眼镜市场的标杆产品。这一战略布局不…

vue3中的组件通信方式有哪些?

在vue3里,组件是一个非常重要的概念,项目中各个组件间的通信也是一个非常常见的需求,接下来我将为大家展示vue3组件有哪几种常见的通信方式。 一、props 适用场景:父子组件之间的通信 父传子: 父组件在子组件的标签…

HarmonyOS入门简介

🍁 作者:知识浅谈,CSDN签约讲师&博客专家,华为云云享专家,阿里云专家博主,InfoQ签约作者 📌 擅长领域:全栈工程师、爬虫、ACM算法,大数据,深度学习 &…

软考系统架构设计师论文:论边缘计算及其应用

试题一 论边缘计算及其应用 边缘计算是在靠近物或数据源头的网络边缘侧,融合网络、计算、存储、应用核心能力的 分布式开放平台(架构),就近提供边缘智能服务。边缘计算与云计算各有所长,云计算擅长全局性、非实时、长周期的大数据处理与分析,能够在长周期维护、业务决策…

sudo docker ps才能查看,docker ps不能查看问题

出现 permission denied while trying to connect to the Docker daemon socket 的错误,通常是因为当前用户没有权限访问 Docker 的 Unix 套接字 /var/run/docker.sock。在 Linux 系统中,这个套接字默认只能由 root 用户或 docker 组的成员访问。 要解决…

深入了解区块链:Web3的基础架构与发展

区块链技术是Web3生态系统的核心,它正推动互联网走向去中心化。Web3不仅代表着技术的创新,也挑战着现有互联网结构和用户数据的控制方式。区块链作为Web3的基础,正逐步改变我们对网络交互和数据管理的认知。本文将介绍区块链的基本原理及其在…

半导体企业如何利用 Jira 应对复杂商业变局?

以下是一篇关于如何利用 Jira 构建半导体企业数字化研发管理蓝图的文章。借鉴了 ONES 案例中的思路,并结合了 Jira 的特点,为半导体企业在复杂商业环境下进行数字化转型提供支持: 半导体企业如何利用 Jira 应对复杂商业变局? 在全…

【小程序】封装网络请求request模块

一、封装request请求 因为我把所有项目中的接口也封装到了一个文件中,所以我建了一个services的文件夹,在下面建了一个request.js 在这个里面做了请求拦截器和响应拦截器, const apiConfig require(../config/baseUrl.js);class httpClie…