首页 > 解决方案 > STM32F070 EXTI(n) 误触发

问题描述

MCU Sch 用于按钮

我有 5 个按钮已映射到 EXTI 中断。

PA0,PA1,PA2,PA3,PA15

我观察到,当按下 PA0 上的按钮时,它会为 PA1 调用 EXTI 中断,反之亦然。PA2 和 PA3 的行为相似。

这是回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
        if(GPIO_Pin == GPIO_PIN_0)
        {
            val1++;
        }
        if(GPIO_Pin == GPIO_PIN_1)
        {
            val2++;
        }
        if(GPIO_Pin == GPIO_PIN_2)
        {
            val3++;
        }
        if(GPIO_Pin == GPIO_PIN_3)
        {
            val4++;
        }       
        
}

按 Key0 应该只增加 val1 ,但它增加 val2 ,反之亦然

这是 ISR

void EXTI0_1_IRQHandler(void)
    {
      /* USER CODE BEGIN EXTI0_1_IRQn 0 */
        /* USER CODE END EXTI0_1_IRQn 0 */
      
      HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
      HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
        
      /* USER CODE BEGIN EXTI0_1_IRQn 1 */
      /* USER CODE END EXTI0_1_IRQn 1 */
    }

我检查了电源轨上的噪音,但没有看到。在一个版本中,也添加了去抖动(尽管您在当前版本中看不到它)当我在 ISR 中放置断点时,当按下 PA0 上的按钮时会触发 PA1 上的错误中断(val1 应该增加,而不是 val2增量)我还尝试在中断进入 ISR 后禁用中断,并在处理后重新启用 main() 中的中断。但它的行为方式同样不稳定。

有人可以指出我的代码中是否存在错误或任何其他问题吗?

提前致谢

标签: buttonstm32interrupt

解决方案


推荐阅读