STM32如何使用多中断?

问题描述 投票:0回答:2

我在stm32f100系列中使用中断事件。我的问题很容易理解。有一个交互功能可以控制 EXTI10 到 EXTI15。

    void EXTI15_10_IRQHandler(void){
    void EXTI15_10_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI15_10_IRQn 0 */

    
    //EXTI10
    if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_10) != RESET){
      
   //functionevent
    

    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_10);
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
    }
    
    //EXTI11 
    if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_11) != RESET){
      
  //function event
    }
     __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_11);
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
    }
}

    }

当 EXTI10 和 EXTI12 事件分别中断时,我如何管理它们。当他们打断时

stm32 interrupt hal
2个回答
0
投票

您需要测试 EXTI 寄存器以查看哪些寄存器触发了中断。

类似:

void EXTI10_15_IRQHandler(void)
{
  if (LL_EXTI_IsActiveFallingFlag_0_31(LL_EXTI_LINE_10) != RESET)
  {
    LL_EXTI_ClearFallingFlag_0_31(LL_EXTI_LINE_10);
    
    // Process EXTI10 interrupt
  }

  if (LL_EXTI_IsActiveFallingFlag_0_31(LL_EXTI_LINE_12) != RESET)
  {
    LL_EXTI_ClearFallingFlag_0_31(LL_EXTI_LINE_12);
    
    // Process EXTI12 interrupt
  }
}

这是一个将中断配置为下降沿的示例。如果您使用其他中断配置,您可能需要调整。

此示例将项目配置为使用“低级”

LL
驱动程序接口。使用 HAL 可能有类似的东西,或者您可以直接进行寄存器访问。 (查看
LL
驱动程序以了解它使用的寄存器。)


0
投票

void EXTI15_10_IRQHandler(void)
将在 EXTI10 - EXTI15 之间任何线路上的 EXTI 中断时被调用(读取 GPIO 引脚 10 至 GPIO 引脚 15)。您必须确定处理程序本身的来源。您的处理程序的结构通常应类似于以下内容:

void EXTI15_10_IRQHandler(void){

  uint8_t sourcepin = get_exti10_15_source_pin(); //tests EXTI registers, returns pin number

  switch(sourcepin){
    case(10):
      gpio_10_exti_handler();
      break;
    case(15):
      gpio_15_exti_handler();
      break;
    default:
      break;
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.