浅谈stm32的外部中断
简述
本文简单介绍stm32外部中断的一般操作步骤,后续会补充外部中断的相关内容
stm32的中断控制器支持19个外部中断/事件请求:
- line0~line15:这16条line分别对应不同GPIO口的输入中断,比如:
line0对应GPIOA的pin0、GPIOB的pin0、GPIOC的pin0、GPIOD的pin0、GPIOE的pin0;
line1对应GPIOA的pin1、GPIOB的pin1、GPIOC的pin1、GPIOD的pin1、GPIOE的pin1;
依此类推 - line16:连接到PVD的输出
- line17:连接到RTC闹钟事件
- line18:连接到USB唤醒事件
需要注意的是,line0到line15,每条line同一时刻只能选择一个GPIO口作为中断源。
中断服务函数列表如下:
EXTIO_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
一个中断向量对应到一个中断服务程序。在stm32中,外部中断线只分配到了7个中断向量,而外部中断线有19根;所以有些中断线是共用同一个中断向量的。从上面的列表可以看出:
- line0到line4分别对应一个中断向量
- line5到line9共用一个中断向量
- line10到line15也是共用一个中断向量
- line16到line18分别对应一个中断向量
所以一般情况下,系统响应外部gpio中断时都需要判断是哪一条中断线产生了中断,这时可以使用以下接口来判断:
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判断中断线中断状态,是否发生
并且在中断服务函数里面还需要清除中断标志,这时可以使用以下接口来清除:
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中断线上的中断标志位
gpio中断工作流程
使用gpio中断功能,一般有以下几个步骤:
1、初始化GPIO口,配置IO口为输入
GPIO_Init()
2、开启IO口的复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
3、设置IO口与中断线的映射关系
void GPIO_EXTILineConfig();
4、初始化线上中断,设置触发条件等
EXTI_Init();
5、配置NVIC IRQ通道,并使能中断
NVIC_Init();
6、编写中断服务函数
EXTIx_IRQHandler();
7、清除中断标志位
EXTI_ClearITPendingBit();
总结
后续本人有时间再继续补充外部中断相关内容。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律