确定 GPIO EXTI 处理程序内部的端口

Determining port inside the GPIO EXTI Handler

如何在处理程序中确定产生中断的端口?例如,在EXTI0_IRQHandler中,如何判断中断是通过PA0、PB0还是PC0产生的?是否有可能在同一条 EXTI 线上处理来自这些引脚的中断(如果一次只有一个引脚产生中断,这样就没有冲突)?

我不熟悉你的板子,但通常你会想从你的处理程序中查询中断控制器以确定实际的中断源。

您可以在 ARM 站点上找到一个相当容易理解的示例(但您的硬件可能与此处讨论的控制器不同):http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/15708.html

示例中的设置在 .zip 存档的自述文件中进行了讨论。简而言之,这显示了使用向量中断控制器处理中断以及通过该主 VIC 处理级联控制器。

不可以,PA0、PB0等中只有一个可以配置为EXTI0源。请参阅 SYSCFG_EXTICR* 寄存器的描述,STM32F4 Reference Manual.

中的第 9.2.3 节

如果中断处理程序在多个 EXTI 源之间共享,例如 EXTI9_5_IRQHandler 和 EXTI15_10_IRQHandler,则读取 EXTI_PR 寄存器以确定哪个(哪些)产生了中断。