news 2026/5/22 12:41:44

从0到1搞懂串口通信:UART、USART、RS232、RS485到底有啥区别?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从0到1搞懂串口通信:UART、USART、RS232、RS485到底有啥区别?


做工业自动化快十年了,见过最多的入门级坑就是串口。刚入行的时候,我被这几个名词折磨了整整一个月。一会儿UART,一会儿USART,一会儿RS232,一会儿RS485,资料看了一大堆,还是分不清谁是谁。接个传感器,线接了拆拆了接,调试了三天通信就是不通,最后发现是把RS232和RS485搞混了,差点被师傅骂死。

后来做的项目多了才发现,90%的人都搞不清这几个东西的区别。甚至很多工作三五年的工程师,也只会照着接线图插线,出了问题根本不知道怎么排查。今天我就把这些东西彻底讲透,从底层原理到实际应用,再到那些年我踩过的所有坑,全给你说明白。

别觉得串口简单,工业现场80%的通信问题都是串口问题。把串口搞懂了,你就能解决工业自动化一半的通信故障。

先搞懂最基础的:什么是串口通信?

在讲各种名词之前,先搞明白最根本的问题:什么是串口通信?

串口通信,说白了就是一位一位地按顺序传输数据。和它对应的是并口通信,就是一次传8位、16位甚至更多位。

很多人会问,现在都2026年了,USB、以太网、Profinet满天飞,为什么串口还没死?而且在工业界反而越来越吃香?

答案很简单:简单、稳定、便宜、易实现

  • 简单:不需要复杂的协议栈,两个设备只要三根线就能通信
  • 稳定:对硬件要求低,抗干扰能力强,适合恶劣的工业环境
  • 便宜:一个串口芯片几毛钱,一个RS485模块几块钱
  • 易实现:几乎所有的单片机、PLC、传感器都自带串口,不需要额外的硬件

你去任何一个工厂,随便拆开一个设备,里面肯定有串口。小到温度传感器,大到变频器、机器人,没有不支持串口的。

UART vs USART:99%的人都搞混了

先解决第一个误区:UART和USART不是协议,是芯片内部的硬件外设

很多人说"用UART协议通信",这句话是错的。UART根本不是协议,它是一个硬件模块,全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)

它的作用只有一个:把芯片内部的并行数据转换成串行数据发出去,再把收到的串行数据转换成并行数据给芯片

那USART又是什么?USART全称是通用同步异步收发传输器(Universal Synchronous/Asynchronous Receiver/Transmitter)

看到区别了吗?多了一个"同步"。

也就是说,USART比UART多了一个同步通信模式。同步通信需要额外的时钟线来同步数据,收发双方用同一个时钟,传输速度更快。

但是!重点来了:在工业界,99.9%的情况下,我们都只用异步模式。同步模式几乎没人用。

所以你会发现,现在几乎所有的单片机,比如STM32,上面的串口外设都叫USART,但大家都习惯叫它UART。因为没人用它的同步功能,都是当UART来用的。

这就是为什么很多人会把UART和USART混为一谈的原因。本质上,在实际应用中,你可以认为它们是同一个东西。

记住这个结论:UART是异步的,USART是同步+异步的,工业上只用异步,所以USART=UART

RS232 vs RS485:这才是最核心的区别

这是最容易搞混的两个东西,也是工业现场用得最多的。

先纠正第二个最大的误区:RS232和RS485不是协议,也不是硬件外设,它们是物理层电气标准

很多人说"RS232协议",这句话也是错的。它们只是规定了电信号的传输方式,和协议没有任何关系。

UART是芯片内部的东西,输出的是TTL电平(3.3V或者5V)。这种电平传输距离非常短,最多也就几米,而且抗干扰能力很差,根本不能用在工业现场。

所以我们需要把TTL电平转换成更适合长距离传输的电平标准,这就是RS232和RS485的作用。

单片机UART外设

MAX232电平转换芯片

RS232接口

MAX485电平转换芯片

RS485接口

看到没?UART是内核,RS232和RS485只是不同的外壳。你用UART输出的TTL电平,经过MAX232芯片就变成了RS232电平,经过MAX485芯片就变成了RS485电平。

这就是它们最本质的关系。很多人搞不清,就是因为不知道中间还有个电平转换芯片。

接下来我从各个维度对比一下RS232和RS485,让你一眼就能看明白。

对比项RS232RS485
电气特性单端信号,正负电平表示0和1
逻辑1:-3V ~ -15V
逻辑0:+3V ~ +15V
差分信号,AB线电压差表示0和1
逻辑1:A-B > +200mV
逻辑0:A-B < -200mV
传输距离最大15米(9600波特率)最大1200米(9600波特率)
传输速率最高115200bps,常用9600/19200最高10Mbps,常用9600/19200/38400
节点数点对点,只能接1个主设备和1个从设备总线型,最多可接32/128/256个节点
接线方式至少3根线:TX、RX、GND
需要交叉线连接
最少2根线:A、B
建议3根线:A、B、GND
不需要交叉线
抗干扰能力差,单端信号容易受干扰强,差分信号可以抵消共模干扰
通信方式全双工,同时收发半双工,同一时间只能发或收
适用场景短距离、点对点、简单设备
比如电脑和单片机通信
长距离、多节点、工业现场
比如传感器网络、变频器通信

这个表格一定要保存好,以后再分不清的时候拿出来看一眼。

串口通信的完整流程:数据是怎么跑起来的

很多人只会照着接线图接线,根本不知道数据是怎么从一个设备传到另一个设备的。今天我就把这个过程拆解开,让你彻底搞懂。

串口异步通信的数据是一帧一帧传输的,每帧数据的格式如下:

起始位

数据位(5-8位)

校验位(可选)

停止位(1/1.5/2位)

  • 起始位:总是低电平,告诉接收方"我要开始发数据了"
  • 数据位:真正要传输的数据,通常是8位,也就是一个字节
  • 校验位:可选,用来检查数据传输是否出错,常用奇校验、偶校验或者无校验
  • 停止位:总是高电平,告诉接收方"这帧数据发完了"

举个例子,我们最常用的串口参数:9600波特率,8位数据位,无校验,1位停止位。

意思就是:每秒传输9600位数据,每帧数据有1个起始位+8个数据位+0个校验位+1个停止位=10位。所以每秒最多能传输960字节的数据。

这里有个非常重要的点:收发双方的串口参数必须完全一致。只要有一个参数不一样,通信就绝对不通。

这是工业现场最常见的问题。很多人调试了半天,最后发现只是波特率设错了,或者停止位设成了2位。

工业现场最常用的串口协议:Modbus RTU

前面说了,RS232和RS485只是物理层标准,它们只负责把数据传过去,不管数据是什么意思。

所以我们需要在上面加一个应用层协议,规定数据的格式和含义。工业现场用得最多的就是Modbus RTU协议

可以说,Modbus RTU是工业界的通用语言。几乎所有的PLC、变频器、传感器、仪表都支持Modbus RTU协议。

Modbus RTU的帧格式非常简单:

地址码功能码数据区CRC校验
1字节1字节N字节2字节
  • 地址码:从设备的地址,范围1-247,用来区分总线上的不同从设备
  • 功能码:告诉从设备要做什么操作,比如读数据、写数据
  • 数据区:具体的数据内容,比如要读的寄存器地址和数量
  • CRC校验:用来检查数据传输是否出错

最常用的功能码只有两个:

  • 03:读保持寄存器
  • 06:写单个保持寄存器

比如主设备要读地址为1的从设备的100号寄存器,发出去的帧就是:01 03 00 64 00 01 D5 CA

从设备返回的帧就是:01 03 02 00 0A 79 84,表示寄存器100的值是10。

就这么简单。Modbus RTU之所以这么流行,就是因为它足够简单,容易实现,而且开放免费。

那些年我踩过的串口坑

最后分享一些我踩过的串口坑,这些都是花钱买不来的经验。

  1. RS232交叉线问题。RS232是全双工,TX发RX收,所以两个设备连接的时候,必须TX接RX,RX接TX,GND接GND。很多人直接直连,结果怎么都通信不上。记住:公头对母头直连,公头对公头或者母头对母头必须交叉。

  2. RS485终端电阻问题。RS485总线长度超过100米的时候,一定要在总线的两端各加一个120Ω的终端电阻。否则会有信号反射,导致通信时好时坏,距离越远问题越严重。我曾经因为这个问题,在客户现场调试了整整两天。

  3. RS485一定要接GND。很多人以为RS485只要接A和B两根线就行,这是大错特错。如果不接GND,两个设备的地电位不同,会产生很高的共模电压,轻则通信不稳定,重则直接烧MAX485芯片。工业现场一定要接GND,血的教训。

  4. 波特率不要太高。很多人喜欢用115200波特率,觉得速度快。但是在工业现场,波特率越高,传输距离越短,抗干扰能力越差。除非特殊情况,否则用9600或者19200就足够了,稳定最重要。

  5. 发送数据不要太快。很多人写代码,发完一帧数据马上发下一帧,结果导致数据丢失。因为串口是低速设备,接收方需要时间处理数据。一定要加适当的延时,一般10-20ms就够了。

  6. 接地问题。工业现场的接地非常重要。如果接地不好,会产生很大的干扰,导致串口通信乱码,甚至烧设备。一定要把所有设备的地都接在一起,并且可靠接地。

总结

最后用一句话总结一下这几个东西的关系:

UART是芯片内部的硬件外设,负责并行和串行数据的转换;RS232和RS485是物理层电气标准,负责把TTL电平转换成适合长距离传输的电平;Modbus RTU是应用层协议,规定了数据的格式和含义。

串口通信看起来简单,其实细节非常多。很多人觉得串口没什么技术含量,但是真正能把串口玩明白的人,在工业界绝对是香饽饽。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 12:39:06

git reset 怎么用?2026年最完整操作指南,撤销提交不再手足无措

代码提交了才发现写错了&#xff0c;或者本地 commit 堆了一堆想整理——你是直接新建一个"撤回"commit&#xff0c;还是对着搜索结果一脸茫然不敢乱动&#xff1f; 如果你还没搞清楚 git reset 的三种模式&#xff0c;随时可能把代码撤没了。学完本文&#xff0c;你…

作者头像 李华
网站建设 2026/5/22 12:39:04

Java类与对象:编程核心解密

好的&#xff0c;我们来详细解释一下Java中的类和对象这两个核心概念。1. 类 (Class)定义&#xff1a;类是一个模板或蓝图。它定义了某一类“事物”的共同特征&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;。作用&#xff1a;类描述了该种“事物”具有哪些信…

作者头像 李华
网站建设 2026/5/22 12:36:06

3分钟掌握R3nzSkin:英雄联盟国服免费全皮肤终极方案

3分钟掌握R3nzSkin&#xff1a;英雄联盟国服免费全皮肤终极方案 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 想在英雄联盟国服免费体验所有皮肤吗&a…

作者头像 李华
网站建设 2026/5/22 12:32:07

内网规划练习

本文基于172.16.0.0/16 内网规划&#xff0c;实现双核心交换机互为备份&#xff0c;整合 VLAN、MSTP、VRRP、Eth-Trunk、DHCP 中继、NAT outbound 等技术&#xff0c;满足 PC 自动获取 IP、内网互通、访问公网及 ISP 环回的全业务需求。一、网络需求与规划内网地址&#xff1a;…

作者头像 李华
网站建设 2026/5/22 12:30:06

如何用Python快速接入Taotoken并调用多模型API完成数据清洗任务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 如何用Python快速接入Taotoken并调用多模型API完成数据清洗任务 对于需要处理客户数据的开发者而言&#xff0c;数据清洗与结构化是…

作者头像 李华