- 1. 一、串口通信的基础:三个物理层,一个逻辑层
- 2. 二、调试前的自检:你的工具本身有没有问题
- 3. 2.1 USB 转 TTL 模块自检
- 4. 2.2 串口助手确认参数真的生效了
- 5. 三、物理接线检查:九成的问题出在这一层
- 6. 3.1 共地——最容易被遗忘的第三根线
- 7. 3.2 RX/TX 交叉——对了吗?
- 8. 3.3 RS-485 的 A/B 线——不同厂商的混乱标记
- 9. 3.4 RS-422 的四线接线
- 10. 四、电气层诊断:当万用表不够用了
- 11. 4.1 用示波器看 RS-232 波形
- 12. 4.2 用差分探头看 RS-485 的 A/B 波形
- 13. 4.3 终端电阻——什么时候接、接在哪
- 14. 五、参数匹配:波特率、数据位、停止位、校验位
- 15. 5.1 波特率不匹配时的波形特征
- 16. 5.2 停止位和校验位
- 17. 六、实际故障场景及解决
- 18. 场景一:电脑 USB 转串口能和设备通信,换 HMI 屏就不行
- 19. 场景二:RS-485 总线上偶尔能读到数据、偶尔 CRC 错误
- 20. 场景三:降低波特率就能通,高了就不行
- 21. 场景四:USB 转 TTL 模块 TX/RX 短接自测正常,但连设备就是没反应
- 22. 场景五:RS-485 能不能两个主站
- 23. 七、排查工具链
- 24. 7.1 万用表
- 25. 7.2 USB 转串口模块自测
- 26. 7.3 逻辑分析仪
- 27. 7.4 示波器
- 28. 八、排查清单速查表
来源:Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区
本文:串口通信故障排查:从电平到协议的完整手册 · 作者:modbus技术团队 · 发布于 2026-07-01
摘要:串口通信不通、乱码、时断时续?本文是一份可操作的串口排障手册,覆盖 RS-232/RS-485/RS-422 三种物理层的接线检查、电气层诊断、参数匹配和常见故障场景,附真实波形分析和工具使用方法。关键词:串口通信故障、RS-485 排障、波特率不匹配、共地问题、USB转TTL调试。
在工业现场调试串口通信,有一种体验每个工程师都懂:明明接线没问题、参数没设错,设备就是不回数据。查了半天,最后发现是 GND 没接——或者接了,但和隔壁变频器的 GND 共模干扰太大,把信号淹了。
串口通信的问题根因之分散,比 Modbus 更甚。因为它不关心协议内容,只负责把位传过去。所以「传不过去」的原因可以从物理层一路蔓延到上位机驱动。
这篇文章按「物理接线 → 电气层 → 参数匹配 → 工具链 → 常见故障场景」的顺序展开。你从头到尾查一遍,一个下午足够定位绝大多数串口通信故障。
一、串口通信的基础:三个物理层,一个逻辑层
串口通信这个概念,在工程现场其实涵盖了三个完全不同的物理层。很多人说「串口不通」的时候,其实没有区分 RS-232、RS-485、RS-422——但它们的故障表现和排查方法差异很大。
RS-232:三根线,RX、TX、GND。点对点通信,全双工。电平是 ±3V~±15V,空闲时 TX 和 RX 都保持负电压(逻辑 1)。最关键的约束是距离——不加驱动器的情况下,15 米以内。超过这个距离,波形就陡了。
RS-485:两根线,A 和 B(也叫 + 和 -)。差分信号,半双工。总线上可以挂多达 32 个节点(用中继器能到 256 个)。距离最长约 1200 米,但波特率越高,距离越短——115200bps 时实际能用的大概只有 100 来米。这个约束在现场经常被忽略。
RS-422:四根线,RX+、RX-、TX+、TX-。全双工差分,其实是 RS-485 的「收、发各一对」。也常被标注为 485-4(485-2 指两线的 RS-485)。与 RS-485 相比最大的区别:RS-422 只能一个发送器接多个接收器,不支持多个发送器。

这三个物理层的故障模式分别看下面几节。
二、调试前的自检:你的工具本身有没有问题
排串口问题,最容易被忽略的是——你用来调试的工具本身可能就是坏的。
2.1 USB 转 TTL 模块自检
把你的 USB 转 TTL 模块的 TX 和 RX 用杜邦线直接短接。打开串口助手(推荐 SSCOM 或 AccessPort),设好和你即将通信的设备相同的参数——波特率 9600、8 数据位、1 停止位、无校验。随便发一串数据(建议用十六进制发 01 03 00 00 00 01 这种带可变字节的帧),看接收区是否原样返回。
注意,必须用十六进制模式看。ASCII 模式显示时,0x00、0x0A、0x0D 这些特殊字符会被吃掉,你看到「回了」但其实少字节了。
如果短接后收发不一致,换一根 USB 数据线再试——有些充电线没有数据通道,接上去灯亮了但不传数。别笑,这是真实的。
2.2 串口助手确认参数真的生效了
很多人以为在串口助手界面上选了「9600,8,N,1」就真的是 9600 了。实际上发生过:串口助手界面显示 9600,但底层 Windows 驱动实际打开的是 115200——因为插拔 USB 时串口号变了,软件用了旧的配置。最稳妥的方法是,先用逻辑分析仪抓一下你发的第一个字节,验证位宽是不是 1/9600 ≈ 104µs。
如果你没有逻辑分析仪,至少用另一台确认正常通信的设备来验证当前串口参数是否真的有效。
三、物理接线检查:九成的问题出在这一层
3.1 共地——最容易被遗忘的第三根线
RS-232 通信必须共地。GND 提供了一个 0 电平参考基准。如果两个设备的 GND 没有连通,TX 上的 ±12V 信号飘在对端看来没有任何意义——它没有一个参考点可以判断电平高低。
实际排查方法:万用表打到蜂鸣档,一头点 A 设备的 GND 脚,一头点 B 设备的 GND 脚,确认导通。同时打到 DC 电压档,测两端 GND 之间的电压差。如果超过 ±3V,说明你的系统有严重的接地问题——这种情况下即使接了 GND,通信也是抖的。
RS-485 在理想情况下不需要共地线。差分信号只看 A/B 之间的电压差,不需要参考 GND。但实际上——当两个设备的 GND 之间共模电压超过 RS-485 收发器的共模输入范围(通常 -7V ~ +12V),通信就会不稳定。所以工业现场的 RS-485 总线,最好还是接一条弱 GND 参考线(一端接地,另一端通过 100Ω 电阻 + 0.1µF 电容并联接 GND),限制共模电压的同时不形成接地环路。
3.2 RX/TX 交叉——对了吗?
RS-232 的规则很简单但总有人接错:A 设备的 TX 接 B 设备的 RX,A 设备的 RX 接 B 设备的 TX。
确认方法:用万用表二极管档测 USB 转 TTL 模块的 TX 脚——在空闲状态下 TX 应该输出负电压(约 -5V 到 -12V 范围),而 RX 空闲时是高阻态(电压不确定)。如果测到 RX 上有稳定的负电压,那就是把 RX 和 TX 搞反了。
3.3 RS-485 的 A/B 线——不同厂商的混乱标记
RS-485 的 A/B 线标记在不同厂商设备上没有统一标准。你可能会遇到:
| 设备标注 | 高电平(逻辑1)对应的极性 | 实际做法 |
|---|---|---|
| A / B | A 为正, B 为负 | A 接另一个设备的 A, B 接 B |
| + / – | + 为正, – 为负 | + 接 B, – 接 A(反逻辑,但厂商就这么标的) |
| D+ / D- | D+ 为高 | D+ 接 A, D- 接 B |
| 485-A / 485-B | A 为高 | A 接 A, B 接 B |
所以最靠谱的方法不是看标记,而是查芯片手册。 找到你设备上 RS-485 收发器芯片的型号(常见的有 MAX485、SP3485、SN65HVD08 等),然后查 Datasheet——DI 对应发送输入,RO 对应接收输出,DE/RE 是收发使能。A 脚是接收器的同相输入端(Non-inverting),B 脚是反相输入端(Inverting)。同相接同相、反相接反相——如果接了不通,把 A 和 B 交换一下。这不是笑话,这是在现场最常用的排障手段。
3.4 RS-422 的四线接线
RS-422 把 RS-232 的 RX 拆成 RX+ 和 RX-,把 TX 拆成 TX+ 和 TX-。接线规则:发送端的 TX+ 接接收端的 RX+,发送端的 TX- 接接收端的 RX-。

跨协议应急连接:如果你的控制器是 RS-232,传感器是 RS-422,没有转换器,在 5 米以内的短距离可以尝试以下应急方案(不保证稳定,仅限调试):
- 422 设备的 TX+ 接 232 设备的 RX
- 422 设备的 TX- 接 232 设备的 GND
- 422 设备的 RX+ 接 232 设备的 TX
- 422 设备的 RX- 接 232 设备的 GND
原理是 422 的差分信号在短距离内,单端对 GND 的摆幅足以让 232 识别。但这是完全不符合规范的用法,能不用就不用。如果你需要产线长期使用,买个 RS-232 转 RS-422 转换器,几十块钱的事。
四、电气层诊断:当万用表不够用了
物理接线查完了,线是通的对的,但还是没数据——这时候就得看电气层了。
4.1 用示波器看 RS-232 波形
示波器探头夹 GND,探针搭 TX 脚。RS-232 空闲时是负电压(-5V ~ -12V)。当开始发送数据时,起始位是正电压(+5V ~ +12V,对应逻辑 0),然后是 8 个数据位(低位先发),接着是校验位(如果有),最后停止位回到负电压(逻辑 1)。
正常的波形应该是方方正正的——上升沿和下降沿都干脆。如果你看到方波的角是圆的,或者电平幅值严重不足(应该是 ±8V 左右,实际只有 ±2V),那是驱动芯片老化了,或者你的 USB 转 232 模块供电不足。
公式:每个位的持续时间 = 1 / 波特率。9600bps 时每个位约 104µs;115200bps 时约 8.68µs。用示波器光标量一下起始位的宽度,如果明显偏离预期值,那就是波特率设置错了。
4.2 用差分探头看 RS-485 的 A/B 波形
RS-485 的差分电压 = V_A – V_B。发送逻辑 1 时,V_A > V_B(差分电压 ≥ +1.5V);发送逻辑 0 时,V_A < V_B(差分电压 ≤ -1.5V)。
但真正有用的诊断在总线空闲时。RS-485 总线上所有发送器都关闭的时候,A/B 之间的差分电压应该由偏置电阻(Fail-Safe Bias)维持在一个确定的空闲电平(通常 ≥ +200mV,确保接收器不会在 0V 附近振荡)。如果你用万用表 DC 档测 A/B 之间的电压,空闲时读数接近 0V,那么接收器输出是不确定的——通信要么时断时续,要么全是 0xFF。
偏置电阻的设计值取决于节点数量和终端电阻:
- 终端电阻 Rt 通常为 120Ω,两端各一个,等效并联后 Rt_eq = 60Ω
- 需要一个上拉电阻(B 到 VCC)和一个下拉电阻(A 到 GND),保证空闲时 V_AB ≥ 200mV
- 以 VCC=5V 为例,需要的上拉/下拉电阻 ≈ (VCC – 0.2V) * Rt_eq / (2 * 0.2V) ≈ 720Ω。实际选 680Ω 或 560Ω。
偏置电阻只需要在总线上有一组就够了(一个位置),不需要每个节点都焊。
4.3 终端电阻——什么时候接、接在哪
终端电阻 120Ω 必须接在总线的物理两端,用来消除信号反射。不是每个从站都接——如果五个从站每个都焊上了 120Ω,等效并联后只有 24Ω,可能直接把 RS-485 驱动芯片拉死。
使用场景判断:
- 波特率低于 19200 且总线长度短于 50 米的,不接终端电阻通常也能用
- 波特率 115200 或距离超过 200 米的,必须接
- 如果是星形拓扑(设备的 A/B 线从一个中心分出去多个支线),终端电阻的位置很难确定——这种拓扑本身就不适合 RS-485,建议加一个 485 集线器
五、参数匹配:波特率、数据位、停止位、校验位
串口通信的五个参数(波特率、数据位、停止位、校验位、流控)必须两端一致。这是常识——但也是出错率最高的一环。
5.1 波特率不匹配时的波形特征
通信时双方都要识别起始位——从空闲(高电平)跳到低电平的那个下降沿。如果波特率不一致,接收端会在错误的时刻采样,读到的就是乱码。

用一个具体数值来说明:A 设备 9600bps,B 设备 921600bps。B 向 A 发一个字节(1 起始位 + 8 数据位 + 1 停止位 = 10 位),B 侧耗时 = 10 / 921600 ≈ 10.8µs。A 侧接收一个字节的时间 = 10 / 9600 ≈ 1.04ms。A 在 1.04ms 的时间窗口里看到只有 10.8µs 的低电平脉冲——这被当成噪声忽略了,A 压根不认为「这一帧开始传输了」。

反过来,低波特率向高波特率发送:A(9600bps)发一帧需要 1.04ms,B(921600bps)在 10.8µs 的窗口里只采到了第 1 位的起始沿,后面 9 位的采样点全是错的——结果就是乱码。
所以「波特率不匹配」的故障现象不是「完全不通信」,而是「通信了但数据全是乱的」。 这就是为什么很多人认为接线对了就不该有问题,而忽略了参数越级。
5.2 停止位和校验位
停止位的数量决定了帧之间的最小间隔。多数设备用 1 个停止位。但有些老设备(特别是 80 年代的工控设备)要求 2 个停止位,因为那时的处理器来不及在一个停止位时间内准备好接收下一帧。如果你用的是 1 个停止位去和 2 个停止位的设备通信,发大量数据时会丢帧——不是丢了中间数据,而是接收端还没准备好下一帧就到了。
校验位(None / Odd / Even)也很容易设错。更坑的是,有些串口助手软件的奇偶校验设置不生效——界面上选了 Even Parity,但底层实际没开。这就是为什么你不能只相信软件的界面显示,要用逻辑分析仪去实测一帧的位结构。
六、实际故障场景及解决
场景一:电脑 USB 转串口能和设备通信,换 HMI 屏就不行
这种情况非常常见,原因基本归结为:
- **电脑的 USB 转串口模块有可能流控引脚被拉高了。** 很多 USB 转 TTL 模块内置了 RTS/DTR 信号自动管理。如果设备在串口通信之外还依赖 RTS/DTR 等流控信号,接电脑没问题,接屏(只有 RX/TX/GND)就挂了。查设备手册的串口引脚定义——如果除了 RX/TX/GND 之外还有 RTS/CTS/DTR/DSR 等需要短接的引脚,你必须在屏这边处理好。
- **屏端的串口参数和实际不符。** 一些 HMI 组态软件的串口设置项很深(可能在系统参数-通信-端口配置里),不一定在工程主界面。
- **电脑的串口助手可能在自适应波特率。** 某些上位机软件会先用默认参数发帧,如果设备没回应,自动换另一个波特率重发——用户感觉「自动连上了」。但屏端不会做这种自适应,必须人工配对参数。
场景二:RS-485 总线上偶尔能读到数据、偶尔 CRC 错误
几个可能:
- **偏置电阻缺失或选值不当。** 总线空闲时电压飘在 0V 附近,接收器输出振荡产生的第一个字节被误认为是起始位。用万用表测总线空闲时的 A/B 电压差,< 200mV 就说明需要偏置。
- **总线上一端接了终端电阻另一端没接。** 信号从没接的一端反射回来,在特定比特位置上产生碰撞。尤其容易出在「波特率 19200/总线>50 米」这种场景。
- **星形拓扑。** RS-485 的支线长度有严格要求——反射临界长度 ≈ t_rise * 光速在电缆中的速度 / 2。如果 t_rise 约 10ns,临界长度约 1 米。超过 1 米的支线就会产生反射。把星形改成菊花链,或者加一个 RS-485 集线器。
场景三:降低波特率就能通,高了就不行
这个现象的原因通常是电缆质量或者距离超标。RS-485 的距离和波特率是反比的——标准上 9600bps 能到 1200 米,19200 大概到 600 米,115200 基本只能在 100 米以内。
但不是只有距离。以下因素也会把高速率杀死:
- 电缆特征阻抗不匹配(RS-485 要求 120Ω 特征阻抗的电缆,你用 100Ω 阻抗的电线就会在高速率时产生反射)
- 终端电阻没有接或阻值不对
- 总线上某个节点的驱动芯片输出电容太大,给总线的容性负载太大
诊断方法:用示波器比较 9600bps 和 115200bps 时的 A-B 差分波形。如果 115200bps 时的方波边沿有明显过冲或者出现阶梯状(不是干净地从高跳到低),那就是信号完整性问题。
场景四:USB 转 TTL 模块 TX/RX 短接自测正常,但连设备就是没反应
检查三个:
- **GND。** 你短接自测时不需要 GND,但和设备通信必须有 GND。
- **双方的电平标准。** USB 转 TTL 输出的是 TTL 电平(0V/3.3V 或 0V/5V),如果你接的是 RS-232 接口的设备(±12V),直接接上去信号可能被削峰。确认设备端到底是 TTL、RS-232、还是 RS-485 电平。
- **设备是否处于透传模式。** 有些 4G DTU 或 WiFi 模块在上电后默认进入 AT 指令模式,必须先发 `+++` 退出透传或者发特定指令进入数据透明传输模式。不确认这个状态直接发数据,模块当然不理你。
场景五:RS-485 能不能两个主站
不能。RS-485 是半双工通信,总线上同一时间只能有一个发送器。如果两个主站同时发数据,电流冲突——两个驱动芯片的保护电阻两端瞬间电流过大,运气好的触发短路保护,运气不好烧芯片。
如果确实需要多主站——换 CAN 总线,或者在上面跑 Modbus TCP 走以太网。
七、排查工具链
7.1 万用表
串口排障的第一工具。能做的事:确认接线通断(蜂鸣档)、确认 GND 间电位差(DC 电压档)、确认 RS-485 总线空闲电平(DC 档测 A-B 电压)。
7.2 USB 转串口模块自测
TX 和 RX 短接自测是基本功。但要注意用十六进制模式——ASCII 模式会隐藏控制字符。
7.3 逻辑分析仪
逻辑分析仪是串口通信调试的终极武器。现在的国产逻辑分析仪(如 Saleae 的克隆版、Kingst LA1010)已经非常便宜了——200 块不到就能买到可以自动解析 UART/SPI/I2C 协议的型号。
使用方法:把逻辑分析仪的 CH0 接 TX、CH1 接 RX、GND 接设备 GND。设好协议解析为 UART,波特率等参数设对,然后直接看发送和接收的数据是否和预期一致。
关键分析技巧:如果逻辑分析仪解析出的数据比串口助手显示的多几个字节(比如末尾多了 0x00),说明你的串口助手在 ASCII 模式下列显示了不可见字符。切成十六进制模式确认。
7.4 示波器
当逻辑分析仪只能告诉你「数据错了」但不知道「为什么错了」时,示波器上场。看信号的上升/下降时间、过冲、振铃、幅值衰减——这些都是影响通信质量的电气指标。
八、排查清单速查表
| 排查步骤 | 检查内容 | 工具 | 通过标志 |
|---|---|---|---|
| 1 | USB 转串口模块自测 | 杜邦线 + 串口助手 | TX/RX 短接后十六进制回环一致 |
| 2 | 共地 | 万用表蜂鸣档 | 两端 GND 导通 |
| 3 | GND 电位差 | 万用表 DC 档 | 两端 GND 电压差 < 2V |
| 4 | RX/TX 接线方向 | 万用表 DC 档 | TX 有负电压(RS-232),RX 高阻态 |
| 5 | RS-485 A/B 极性 | 芯片手册对照 | 同相端接同相端 |
| 6 | 总线空闲电平 | 万用表 DC 档 | RS-485 A-B 空闲电压 ≥ 200mV |
| 7 | 终端电阻 | 万用表电阻档 | 总线两端各 120Ω,不在中间节点出现 |
| 8 | 波特率/数据位/停止位/校验位 | 逻辑分析仪 | 实测位宽 = 1/波特率,帧结构一致 |
| 9 | 波形质量 | 示波器 | 方波边沿干净、幅值充足、无过冲振荡 |
| 10 | 设备模式 | 设备手册 | 不在透传/AT/休眠等特殊模式 |
按这个表从上往下查,不到最后一步别跳。串口排障最忌讳的就是「我觉得接线肯定没问题」然后直接跳到第五步——99% 的情况下你就是卡在第一步上。
有问题再聊。串口这东西,查到最后基本就两个结论:要么少接了一根线,要么多接了一根线。
发表回复