button - STM32F070 EXTI(n) 误触发
问题描述
我有 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() 中的中断。但它的行为方式同样不稳定。
有人可以指出我的代码中是否存在错误或任何其他问题吗?
提前致谢
解决方案
推荐阅读
- python - 有没有一种方法可以找到 SymPy 中定义的函数的独立变量?
- python - 如何绘制networkx图的节点子集
- javascript - 如何将多个jquery函数变成一个函数?
- java - 我正在使用 getNumberOfMaxParam 方法来查找三个数字中最大值的位置。我如何找到位置?
- c++ - 带节点的树可以是 3 种不同的类型(字符串、整数或浮点数)
- angular - Angular对子组件使用多个父组件服务实例
- angular - 如何在现有的 Angular 项目中使用 Ionic 组件
- python - 在 Pandas python 中按时隙分组数据帧
- excel - 获取 Power BI 文件夹源中的最新更新文件
- postgresql - 如何在 postgresql 中的 select 语句本身中使用列值?