Stm32 查找发生中断的特定管脚

Stm32 查找发生中断的特定管脚,stm32,cortex-m3,Stm32,Cortex M3,我正在为stm32f103微控制器编写一个程序,对来自rc接收器的多个ppm信号进行解码。但在cortex-m3微控制器中,多个I/O引脚映射在同一个外部中断控制器上。是否可以在中断处理程序中检索触发中断的I/O引脚?是,例如: if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // Do here whatever you want to do EXTI_ClearITPendingBit(EXTI_Line0); } 您可以在文件st

我正在为stm32f103微控制器编写一个程序,对来自rc接收器的多个ppm信号进行解码。但在cortex-m3微控制器中,多个I/O引脚映射在同一个外部中断控制器上。是否可以在中断处理程序中检索触发中断的I/O引脚?

是,例如:

if (EXTI_GetITStatus(EXTI_Line0) != RESET)
{
    // Do here whatever you want to do
    EXTI_ClearITPendingBit(EXTI_Line0);
}

您可以在文件
stm32f1x_exti.h

中找到所有相关的外部中断线定义。很抱歉,您不能有多个来自不同端口但具有相同管脚号的管脚(例如,PA0和PD0,或PC10和PE10)在STM32中触发中断。你可能会认为你在这样做,但是现在发生的是一个引脚触发了中断,你可能会认为其他引脚也触发了中断,但是你错了

我会解释原因,但不要相信我的话——你可以在自己的板上尝试,你会看到,只有PA0会触发中断,而不是PB0、PC0等。默认情况下,PAx引脚确实会触发中断,除非你使用
GPIO_EXTILineConfig()
从标准外设库执行功能,或更改下面描述的
AFIO_EXTICRx
寄存器

请参阅参考手册(RM0008)上的AFIO_EXTICRx,x={1,2,3,4}寄存器。例如,以下是AFIO_EXTICR1的位15:0的解释文本:

EXTIx[3:0]: EXTI x configuration (x= 0 to 3)

These bits are written by software to select
the source input for EXTIx external interrupt.
Refer to Section 10.2.5: External
interrupt/event line mapping on page 200

0000: PA[x] pin
0001: PB[x] pin
0010: PC[x] pin
0011: PD[x] pin
0100: PE[x] pin
0101: PF[x] pin
0110: PG[x] pin
如您所见,您必须选择一个端口(PA、PB、PC、PD、PE、PF或PG)。不能启用多个端口,因为它不是位字段


如果您仍有疑问,请查看手册第201页第10.2.5节中的图21(至少这是我的手册版本中的图和页码)。多路复用器控制传递到
EXTIx
线路的信号,该多路复用器由上述
AFIO_EXTICRx
寄存器控制。因为它是一个多路复用器而不是一个或门,所以不能从多个端口触发中断。

谢谢,但这只提供了触发EXTI线路的信息。多个管脚映射到单个EXTI线上(例如,PA0、PB0、PC0……都在EXTI_线上0)。我的问题是,我是否可以检查一行上的哪个特定pin触发了中断。