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

当按下STM32F103中的释放按钮时,EXTI线路获得奇数/偶数中断计数,stm32,interrupt,keil,Stm32,Interrupt,Keil,我遇到了一个问题 我用的是STM32F103。一条EXTI线用于检查按钮的按下和释放。EXTI线设置为由下降和上升边缘触发 我知道当我推底部时会有毛刺。问题是,当我按下并释放按钮时,中断次数有时是奇数,有时是偶数。至于我的理解,它应该是偶数,因为无论如何,你会回到你的原始信号值(比方说高)。例如,如果推送释放中有2个毛刺,则应该有4次中断(高(原点)->低->高->低->高)。我不明白为什么 谢谢你的帮助 处理中断需要时间。因此,如果输入引脚上的下一个转换发生在中断标志清除之前,则不会触发额外的

我遇到了一个问题

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

我知道当我推底部时会有毛刺。问题是,当我按下并释放按钮时,中断次数有时是奇数,有时是偶数。至于我的理解,它应该是偶数,因为无论如何,你会回到你的原始信号值(比方说高)。例如,如果推送释放中有2个毛刺,则应该有4次中断(高(原点)->低->高->低->高)。我不明白为什么


谢谢你的帮助

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


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

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