直接按顺序排查,90% 问题都能快速定位,全是实战踩坑总结:
-
先看串口是否被独占(只允许一个程序打开)
关闭所有串口调试助手、其他上位机、虚拟机、串口模拟器,只留你的程序运行。
→ 串口被占用,发的数据根本出不去。
-
检查发送的【数据总长度】对不对
对比协议格式,数一下字节数:
有没有少字段、缺字节、多字节 ?
帧头、功能码、长度、数据、CRC、帧尾必须完整。
→ 长度不对,MCU 直接解析失败,不回复。
-
检查【数据长度字段】是否正确占位
即使没有数据(空包),长度字段必须写
0x00,不能省略 。→ 少了长度字段,MCU 帧结构错位,直接丢弃。
-
确认发送模式是【纯十六进制 HEX 模式】
绝对不能发字符串、ASCII、中文、空格,必须发纯十六进制字节。
→ 模式错了,MCU 收到全是乱码,不回复。
-
核对 CRC16 校验是否正确(必须用 MODBUS 标准)
用标准 CRC16/MODBUS 算法,低字节在前,高字节在后。
校验范围:帧头 ~ 数据域,不包含帧尾 。
→ CRC 错 = 数据包无效,MCU 直接扔掉。
-
检查串口参数是否完全一致
波特率、数据位、停止位、校验位,必须和 MCU 一模一样。
→ 参数不对,收发全是乱码。
-
检查硬件接线
TX 接 RX,RX 接 TX,GND 共地,不要接反。
→ 接线错,发得再对也收不到。
一句话总结
先看串口被没被占 → 再看数据包长度对不对 → 再看空数据有没有占位 → HEX 模式 + 正确 CRC,必通!