新手区 有没有大佬玩过串口通信啊?

辣子鸡 · 2025年01月08日 · 最后由 辣子鸡 回复于 2025年01月14日 · 4601 次阅读

最近有个项目需要我测试测串口,作为一名纯软突然高一些嵌入式还是有点难顶,也没人带,故来求助各位大佬。
语言:python+serial 包
通信说明:
数据传输方式为串口传输,其串口配置为:波特率 115200,无奇偶校验,数据位为 8;


数据说明:
仪器数据按小端模式,即当数据为 0xFFF67B6A,其串口发送先发送 0x6A,…,0xFF。
重点在于这个小端模式,
已知数据:
Byte0 = 0xA5
Byte1 = 0x5A
Byte2 = 0x09
Byte3 = 0x0F
Byte4 = 0x03
Byte5 = 0x26
Byte6 = 0x08
Byte7 = 0xAA
Byte8 = 0x51
我已经有了上述数据,我要怎么发送呢?这个小端模式需要我按照 Byte8,Byte7,Byte6...Byte0 的顺序发送嘛?
还是我有拼接成字符串 “0xA55A090F032608AA51” 然后直接使用?
因为协助不具备测试条件,且也没有环境给我调试,但是后续测试时间又比较紧张,故求助个位大佬/(ㄒ o ㄒ)

共收到 11 条回复 时间 点赞

前置 0x 应该都不用,直接拼接成字符串发送,发送"A55A090F032608AA51",
注意选 hex 模式发送, serial 包中 bytes.fromhex,看看有没有对应的返回值

我之前做过类似的场景,我们当时是开发一个上位机, 然后是将完整的报文直接发给我们的设备(拼接成字符串 “0xA55A090F032608AA51” 然后直接使用),由设备根据报文中的 leth,拿到对应正确的 data。
我的个人理解:0xA5 或者 0x5A 是标志位,设备拿到一段报文,找到这个标志位,才知道后续的内容该如何处理。 如果单独发给设备一字节,再发一个字节,例如 发送 0x51,然后再发送 0xAA,设备并不知道 0x51 和 0xAA 具体是干什么用的,对设备来讲,一个字节一个字节,就相当于乱码了。

数据包是一个 8 个字节的数据,你拼成字符串显然超过 8 个字节,你应该先搞懂字符编码

不需要 0x,直接拼接

通信协议会分为设备上报数据包,跟指令下发数据包 ,直接问通信协议,开发怎么组装 ,测试代码就怎么组装

具体是什么协议通信呢? 如果是 modbus 可以用 pymodbus 对于大小端数据的转换都有支持。
简单的串口测试可以直接用 tcp.com 去发送接收数据

回复

上面的内容我是把通信协议直接复制粘贴过来的,我的理解是:数据位不等同于字节数,Start1 和 Start2 是固定的,应该是固定一个数据位,这样子就刚刚好 8 个数据位

相信过程13 回复

协议是开发自己写的,还是说会有类似协议模板之类的?开发根据模板修改的?

甬力君 回复

感谢感谢

Duke 回复

大佬解释的很到位呢,非常感谢

迷瞪熊 回复

感谢解答,又学到了,到时候我尝试一下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册