通过串行端口接收数据时强制使用干净不间断的波特率

通过串行端口接收数据时强制使用干净不间断的波特率

我制作了一个带有微控制器的项目,该项目允许我将数据发送到 PC,其中数据的低半字节始终遵循相同的顺序。例如,我的数据是这样发送的:

x0 x1 x2 x3 x4 ..... xE xF

其中 x 是从 0 到 F 的任意十六进制值。

一开始传输很好,但是当我将数据从 PC 发送到微控制器然后让它返回数据时,它总是想跳过完全相同的字节位置。例如,而不是...

x0 x1 x2 x3 x4......

我得到:

x0 x2 x3 x4.....

我仔细检查了我的代码及其效率,因此它不能被编码,特别是如果每​​次向 PC 生成数据的完全相同的函数都完全相同,并且该函数格式化数据,因此低半字节是序列号,并且它等待传输完成。

这让我觉得我需要应用一些 UNIX 设置。

我查看了 setserial 和 stty 但我想知道什么设置实际上是最好的。我不介意我的计算机在串行测试运行时是否确实锁定了所有其他进程。

我正在考虑调整setserial中的 opening_wait 和 close_delay 选项,也许启用 low_latency 以及使用应用程序(又名 od)上的 Nice 和 ionice 命令来观察 I/O。但话又说回来,我使用的应用程序可能是坏的吗?这是我用来读取数据的命令......

od -t x1 -w16 -v /dev/ttyS0

那么什么 UNIX 工具最有帮助,可以让我在不丢失串行端口任何字符的情况下获取所有数据呢?两台设备的数据速率设置为 57600bps,我使用的是一米长的串行端口电缆。

相关内容