同一EXTI Line STM32上有多个中断

San*_*ius 1 c interrupt stm32 interrupt-handling

对于PA1和PC1的例子,是否可以从相同的EXTI线获得多个中断,它们都在EXTI1上.

因此,通过点击PA1上的按钮,LED在PB6上亮起,然后点击PC1,LED在PC0上切换.

微控制器==> STM32F091

这是我用于2个不同行的中断的代码:

//PC1
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI1_PA;
EXTI->IMR = EXTI_IMR_MR1;
EXTI->RTSR = EXTI_RTSR_TR1;
EXTI->FTSR = EXTI_FTSR_TR1; 
//PB0
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI1_PC;
EXTI->IMR |= EXTI_IMR_MR1; 
EXTI->RTSR |= EXTI_RTSR_TR1; 
EXTI->FTSR |= EXTI_FTSR_TR1;
NVIC_EnableIRQ(EXTI0_1_IRQn);
NVIC_SetPriority(EXTI0_1_IRQn,0);
Run Code Online (Sandbox Code Playgroud)

中断处理程序:

void EXTI0_1_IRQHandler(void)
{
if ((EXTI->PR & EXTI_PR_PR1) == EXTI_PR_PR1)  /* Check line 1 has triggered      the IT */
{
EXTI->PR = EXTI_PR_PR1; /* Clear the pending bit */
GPIOC->ODR ^= 1<<0;
}
if ((EXTI->PR & EXTI_PR_PR0) == EXTI_PR_PR0)  /* Check line 0 has triggered  the IT */
{
EXTI->PR = EXTI_PR_PR0; /* Clear the pending bit */
    GPIOB->ODR ^= 1<<6;
}
Run Code Online (Sandbox Code Playgroud)

dus*_*uff 7

不,你不能.抱歉.

16个GPIO驱动的EXTI中的每一个只能连接到六个相应引脚中的一个.例如,EXTI0可以连接到PA0,PB0,PC0,PD0,PE0或PF0 .像价值观SYSCFG_EXTICR1_EXTI1_PA不是纯粹的位掩码,而不能结合.

在此输入图像描述

有关其他详细信息,请参见STM32F0参考手册的第12.2.5节.