自学内容网 自学内容网

【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视而不见

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

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

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

点击领取更多详细资料


原文地址:https://blog.csdn.net/weixin_66608063/article/details/143754201

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!