This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5438A:GPIO 中断标志故障

Guru**** 2454880 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1472600/msp430f5438a-gpio-interrupt-flag-failure

器件型号:MSP430F5438A

工具与软件:

您好!

GPIO 中断函数存在问题。 我将使用端口1引脚0、1和2、这些引脚通过1K 欧姆电阻进行上拉。

每当引脚变为低电平时、就会发生中断、但现在它会随机触发。 但是、当我在调试模式下运行代码并在中断函数中放置一个断点时、它会正常工作。

问题可能是什么、我如何解决?

此外、我使用万用表进行测试、方法是将一个探针连接到电路板上的接地引脚、将另一个探针连接到控制器引脚(P1.1)。 在这种情况下、中断运行良好、背后的原因是什么?

谢谢!

Anbu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这听起来像是开关抖动。 什么连接到该引脚?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    该引脚连接到按钮。

    您说开关会反弹、但是、它的确切工作原理是什么? 当我把万用表放在上面时、会发生什么情况?

    注意:电压模式中的多乘法器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您不会看到使用万用表、您需要一个示波器。

    https://www.allaboutcircuits.com/textbook/digital/chpt-4/contact-bounce/

    大多数开关会指定它们反弹的时间、有多种方法可以处理它、例如在接触反弹时间内锁定中断。

    (这适用于 Cherry MX1)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果你谷歌"开关反弹"你会得到(很多)描述/解决方案比我有更好. 简而言之:当(物理)开关上的触点闭合时、将会有许多短暂的触点(电弧/ricochet)、每个触点都将记录在 PxIFG 中。 持续时间为微秒级、可以持续毫秒数。 您需要等待、直到这种反弹完成、以了解开关的位置。 (也很容易忘记开关在释放时也会抖动。)

    您的万用表的平均值超过(类似于)一两秒钟、因此它看不到一个微秒长的事件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bruce、您好!

    感谢您提供此澄清!

    根据您的回答、我有几个后续问题:

    减少开关抖动并将去抖时间降至1毫秒以下的方法有哪些?

    2.当我用万用表测量控制器输入引脚的电压时,检查它是高电平还是低电平,只有当探针接触输入引脚时,电路才能正常工作。 否则、它的行为是不可预测的。 这可能是什么原因呢?

    谢谢!

    Anbu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    万用表可能具有足够的电容来减慢反弹、

    我已经列出了一种防止开关反弹的方法-一旦你得到一个中断、将一个计时器设置1毫秒左右-并且只在这段时间之后响应下一个中断。

    我所链接的页面显示了一个硬件解决方案:放置一个电容器来减慢上升时间。

    您不能"将去抖时间降至1毫秒以下"。 这是开关的机械特性。 您只能减轻它。

    最好的方法可能是轮询开关、而不是让它触发中断。