我正在编写一个程序来解码来自rc接收器的多个ppm信号,用于stm32f103微控制器。但在cortex-m3微控制器中,多个I / O引脚映射在同一个外部中断控制器上。是否可以检索哪个I / O引脚在中断处理程序中触发了中断?
答案 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
中找到所有相关的外部中断线定义。