STM32F4 - 我可以在中断例程中使用延迟吗?

Joe*_*ath 4 c arm stm32 stm32f4discovery

我正在为一个项目使用 STM32F4 探索板,我想知道我是否正确地解决了这个问题。当我按下一个按钮时,会触发一个运行例程的外部中断;不使用延迟,这部分工作正常。当例程移动伺服器然后将其返回到其原始位置时,会添加一个延迟,以允许伺服器在返回到原始位置之前赶上新的 PWM 输出。当我运行带有延迟的新中断例程时,电路板锁定。在调试中,代码似乎在延迟循环中停滞。

延迟是一个简单的 sysstick 例程。把它放在我的中断中是不好的做法(因此是我崩溃的原因),我应该使用不同的方法吗?例如,在外部中断程序中设置一个一次性定时器,在设定的时间后返回伺服?

谢谢!

Mic*_*kis 6

正如您所发现的,中断例程旨在快速处理外部事件,并将额外的工作推迟到其他设施。这就是为什么在您的情况下,延迟循环会导致电路板锁定:当代码在中断处理程序中休眠时,没有其他工作正在执行。这是所有中断处理程序的典型特征。

如果您需要执行单独的任务(再次移动伺服),请按照您的描述进行安排:

  • 如果保证伺服器在指定的时间内到达预期位置,则设置一个计时器在该时间后触发
  • 如果伺服机构可以通过另一个中断通知您,当它到达指定位置时,请使用它来处理其返回原始位置的运动。