番外篇 - 如果同时有两个 GPIO 配成中断会发生什么?
番外篇 - 如果同时有两个 GPIO 配成中断会发生什么?
SarznSTM32 中断架构的两个共享机制
第一层共享:EXTI 线按引脚号共用
每个引脚号对应一条固定的 EXTI 线:
- 所有端口的 0 号脚(PA0/PB0/PC0…)共用
EXTI0 - 所有端口的 1 号脚共用
EXTI1,以此类推到 15
同一条线同时只能接一个引脚: 所以你不能同时把 PA0 和 PB0 都设成中断(都抢 EXTI0),CubeMX 会报冲突。两个中断引脚要选不同的引脚号
第二层共享:多条 EXTI 线共用一个 NVIC 中断向量(服务函数)
这里有一个很好的图,
希望能帮助你理解
如果你配置了两个 GPIO_EXIT
情况一:两个引脚分属不同向量(比如 PA0 用 EXTI0、PA10 用 EXTI15_10)它们有各自独立的中断服务函数,可以单独设置不同的抢占优先级,互不干扰。CubeMX 会在 NVIC 里使能两个中断。
情况二:两个引脚落在同一个分组(比如 PA5 和 PA6,都属于
EXTI9_5)它们共用同一个服务函数
EXTI9_5_IRQHandler,优先级也只能设一个(因为只有一个
NVIC
向量)。这时进了中断你必须自己判断是哪个引脚触发的。
但其实无论哪种情况,HAL 都把它们最终汇集到同一个回调
HAL_GPIO_EXTI_Callback,靠参数 GPIO_Pin
区分(这里如果你没有看实验篇的话可能有点不好理解,
看完实验篇之后再回头来看就行)
Comment
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果




