找到发生中断的特定引脚

时间:2014-04-13 13:40:23

标签: stm32 cortex-m3

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

2 个答案:

答案 0 :(得分:2)

很抱歉,但是您不能有多个引脚,来自不同的端口但具有相同的引脚编号(例如PA0和PD0,或PC10和PE10),在STM32中触发中断。您可能认为自己正在这样做,但发生的事情是单个引脚正在触发中断,您可能会认为其他引脚也在触发中断,但您错了。< / p>

我会解释原因,但不要接受我的话 - 你可以在自己的电路板上试一试,而且你只能看到它,例如, 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寄存器控制。由于它是多路复用器而非OR门,因此您无法从多个端口触发中断。

答案 1 :(得分:1)

是的,例如:

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

您可以在文件stm32f1xx_exti.h中找到所有相关的外部中断线定义。