STM32GPIO中断配置步骤:初始化引脚为输入模式,使能GPIO及SYSCFG时钟,映射中断线至对应引脚,设置EXTI触发边沿(上升沿/下降沿/双边沿),使能EXTI中断线,配置NVIC优先级分组及中断优先级,编写中断服务函数并清除EXTI标志位,实现外部信号触发响应。
在嵌入式开发中,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);
引脚与中断线之间需要建立一一对应关系。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负责管理中断优先级。此处将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上的中断标志位
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述