我想使用两个不同的时间通过单个 UART 发送和接收数据

问题描述

我想使用 10 毫秒和 1 毫秒的计时器通过单个 UART 发送和接收数据。如果 1ms 定时器标志被设置,那么 10ms 传输应该停止,其他应该开始,因为 1ms 传输是紧急的。完成此操作后,第一个应该恢复。 dspic33ep微控制器系列怎么做?

注意:Uart 可用性受应用程序限制。

解决方法

我建议以 1kHz(即每毫秒)触发一个定时器中断。中断将设置一对全局信号量标志,指示 (a) 需要传输,以及 (b) 应该发生什么类型的传输。信号量应声明为 volatile。

然后,您的主控制循环可以检查/轮询信号量以确定是否到了进行传输的时间,以及需要哪种传输类型。注意每个信号量只检查一次,因为它们的值可以在两次测试之间改变。您的控制循环还需要重置时间发送数据信号量。

此方法会有一些延迟(设置信号量的中断和测试信号量的循环之间的时间)。

还有传输速度的问题。您将不得不使用相当高的波特率来以 1kHz 的重复率传输任何体面的数据。例如,在 9600 波特率下,传输一个字符大约需要 1ms。