【发布时间】:2025-12-04 11:35:01
【问题描述】:
我正在尝试在微控制器和 c# windows 应用程序之间实现串行通信。
我在计算机到微控制器的方向上一切正常。但是我很难弄清楚如何在另一个方向上实现通信。
我的消息由 4 个字节组成
- B0 – 正在发送的值的地址/名称
- B1 – 高字节
- B2 – 低字节
- B3 – 校验和 = 字节 0-2 相加
为了确保接收到完整的消息,如果字节之间的时间超过 20 毫秒,我让微控制器放弃正在接收的当前消息,这似乎运行良好,并且可以容忍可能导致丢失的通信故障同步。
我不确定如何在 c# 应用程序中实现这种延迟,因为我知道您对时间的精细控制要少得多。
我已经看到其他发送开始和停止字符的 ASCII 协议,但我不确定在发送二进制数据时如何实现这一点,其中我的值可以采用字节中可能的任何值,并且可能恰好是开始或停止字符是。
由于资源有限,我需要保持微控制器方面的基本功能,并且控制器的主要任务需要非常精确(低于我们的范围),将 ascii 转换为十进制可能具有。
是否有人对我应该如何从微处理器或计算机端实现这一点提出建议。
编辑
我已经查看了这里的其他一些问题,但它们似乎都指的是更大的基于 ASCII 的消息。
【问题讨论】:
-
不管怎样,我使用过的协议大多指定了开始/结束消息标记,通常是字节值 2 和 3,然后使用转义算法来表示实际数据值数据中的 3(结束标记)(有时称为 DLE 编码。
标签: c# synchronization serial-port communication microcontroller