相同的EXTI线上出现多个中断(STM32)

5

是否可能从同一EXTI线路获得多个中断,例如对于PA1和PC1,它们都在EXTI1上。

因此,通过单击PA1上的按钮,LED会在PB6上亮起,而通过单击PC1,LED会在PC0上切换。

微控制器==> STM32F091

这是我使用的用于两个不同线路的中断的代码:

//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);

中断处理程序:
void EXTI0_1_IRQHandler(void)
{
  // Check line 1 has triggered the IT.
  if ((EXTI->PR & EXTI_PR_PR1) == EXTI_PR_PR1)
  {
    EXTI->PR = EXTI_PR_PR1; // Clear the pending bit.
    GPIOC->ODR ^= 1 << 0;
  }

  // Check line 0 has triggered  the IT.
  if ((EXTI->PR & EXTI_PR_PR0) == EXTI_PR_PR0)
  {
    EXTI->PR = EXTI_PR_PR0; // Clear the pending bit.
    GPIOB->ODR ^= 1 << 6;
  }
}

警告:我对stm32不是非常熟悉:这种行 EXTI->PR = EXTI_PR_PR1; 是在赋值整个 EXTI>PR 寄存器。我认为您只想修改一位。建议使用 EXTI->PR |= EXTI_PR_PR1; - user3629249
1个回答

11
抱歉,你不能这样做。
16个GPIO驱动的EXTI只能连接到6个对应引脚中的一个。例如,EXTI0可以连接到PA0、PB0、PC0、PD0、PE0或PF0等。像“SYSCFG_EXTICR1_EXTI1_PA”这样的值不是纯位掩码,也不能组合使用。

enter image description here

如需更多详细信息,请参阅STM32F0参考手册的12.2.5节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接