在 STM32F103 中按下释放按钮时,EXTI 线获得奇/偶中断计数

Posted

技术标签:

【中文标题】在 STM32F103 中按下释放按钮时,EXTI 线获得奇/偶中断计数【英文标题】:EXTI line got odd/even interrupts count when push-release button in STM32F103 【发布时间】:2021-03-31 21:49:38 【问题描述】:

我遇到了一个问题。

我用的是STM32F103。一根 EXTI 线用于检查按钮的按下和释放。 EXTI 线设置为由下降沿和上升沿触发。

我知道当我推到底部时会有毛刺。问题是,当我按下然后释放按钮时,中断计数有时是奇数,有时是偶数。据我了解,它应该是偶数,因为无论如何,你都会回到你原来的信号值(比如说高)。例如,如果您在推送中有 2 个毛刺,则应该有 4 次中断(HIGH(origin)->LOW->HIGH->LOW->HIGH)。我不明白为什么。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

处理中断需要时间。因此,如果输入引脚上的下一次转换发生在中断标志被清除之前,则不会触发额外的中断。事件(转换)丢失。

如果您在中断处理程序中尽早清除中断标志,您可以稍微改善这种情况。但是如果转换可以快速连续发生,它并不能完全解决它。只需一个按钮,他们就可以。所以你必须相应地调整你的代码。

【讨论】:

感谢您的回复。我使用 ST 提供的 HAL。在调用计算中断的中断回调之前清除中断标志。在回调函数中,只有一行:count++;我不知道 count++ 需要多少时间,也许我们需要一个硬件过滤器来忽略快速毛刺,因为无论如何,MCU 只能做'count++'...... 不要忘记在调用中断处理程序之前保存所有寄存器所需的时间。所以count++ 只是一小部分。此外,由于另一个具有相同或更高优先级的中断,可能会推迟 EXTI 中断处理程序调用。 非常感谢科多。也许真的需要一个硬件过滤器来避免无意义的短毛刺。

以上是关于在 STM32F103 中按下释放按钮时,EXTI 线获得奇/偶中断计数的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103VET6基于STM32CubeMX利用EXTI外部中断测量PWM频率

STM32F103 | libopencm3 | GPIO 使用中断问题切换

STM32外部中断EXTI简介

基于STM32F103入门2——按键点灯

如何修复在 EXTI9-5 上多次触发的中断?

基于STM32F1系列和LDV5语音模块的语音控制LCD屏幕的点亮