进阶教程
GPIO中断
STM32 GPIO中断使用教程:从入门到实战
摘要
STM32GPIO中断配置步骤:初始化引脚为输入模式,使能GPIO及SYSCFG时钟,映射中断线至对应引
STM32 GPIO 外部中断配置与实战
在STM32嵌入式项目里,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
使能复用功能时钟
GPIO外设时钟必须先行开启,否则寄存器配置无效。使能GPIOF时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
建立IO口与中断线的映射关系
每个GPIO引脚只能映射到对应的外部中断线。PF1固定对应EXTI1,通过此函数绑定:
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);
编写中断处理函数
当PF1上出现上升沿时,硬件自动跳入此函数。执行计数或业务逻辑后,务必清除中断标志位,否则后续触发被阻塞:
void EXTI1_IRQHandler(void)
{
count ;
EXTI_ClearITPendingBit(EXTI_Line1); //清除LINE0上的中断标志位
}
手动清除挂起中断
初始化后或中途需要手动清理残留中断标志,防止意外触发。调用方式与函数内一致:
EXTI_ClearITPendingBit(EXTI_Line1); //清除LINE0上的中断标志位
来源:互联网
免责声明
本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。