首页 > AI教程 >STM32 GPIO中断使用详解

STM32 GPIO中断使用详解

来源:互联网 2026-07-05 06:28:08

STM32GPIO中断配置步骤:初始化引脚为输入模式,使能GPIO及SYSCFG时钟,映射中断线至对应引脚,设置EXTI触发边沿(上升沿/下降沿/双边沿),使能EXTI中断线,配置NVIC优先级分组及中断优先级,编写中断服务函数并清除EXTI标志位,实现外部信号触发响应。

STM32 GPIO中断的使用方法

在嵌入式开发中,GPIO中断是最基础且常用的功能之一,广泛用于按键检测、外部触发信号、传感器中断输出等场景。配置过程虽然不复杂,但每个步骤都需要准确执行。下面将完整步骤拆解,并配合代码逐步说明。

初始化GPIO引脚为输入引脚 GPIO_Init()

首先将引脚配置为输入模式,并设置上下拉电阻。以PF1为例,配置为下拉输入,代码如下:

长期稳定更新的攒劲资源: >>>点此立即查看<<<

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // PF1设置为输入,默认下拉
GPIO_Init(GPIOF, &GPIO_InitStructure);         // 初始化GPIOF.1

使能复用功能时钟

需要先打开对应的外设时钟,否则初始化不会生效。这里使能GPIOF的时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);

设置IO口与中断线的映射关系

引脚与中断线之间需要建立一一对应关系。PF1对应外部中断线1,使用以下函数绑定:

GPIO_EXTILineConfig(GPIO_PortSourceGPIOF, GPIO_PinSource1);

初始化线上中断并设置触发条件

接下来配置EXTI,包括指定中断线、触发方式(上升沿、下降沿或双边沿)。这里选择上升沿触发:

EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line1;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

配置中断分组(NVIC)

NVIC负责管理中断优先级。此处将EXTI1中断的抢占优先级设为2,子优先级设为3:

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

中断处理函数

当引脚上产生上升沿时,硬件自动跳转到该函数。在函数内部进行计数或其他操作,最后必须清除中断标志位,否则无法再次触发:

void EXTI1_IRQHandler(void)
{
    count  ;
    EXTI_ClearITPendingBit(EXTI_Line1); // 清除LINE1上的中断标志位
}

手动清除中断标志

除了在中断处理函数中清除标志,有时也需要在外部手动清除,例如初始化后先清理一次,避免残留的悬挂中断。方法相同:

EXTI_ClearITPendingBit(EXTI_Line1); // 清除LINE1上的中断标志位

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。