2、串口通信基础:RS-232标准、波特率与数据位、奇偶校验与停止位、硬件握手
各位同学,咱们今天聊聊串口通信。说实话,这玩意儿虽然老,但直到现在,我在调试嵌入式设备、连接工业仪表时,还是离不开它。你想想看,一个从1960年代就开始用的协议,到现在还在发光发热,肯定有它的道理。
串口通信,说白了就是一根线发数据,一根线收数据,再加一根地线。简单、可靠、成本低。我刚开始做自动化那会儿,最怕的就是串口调不通,后来摸清了门道,才发现其实就那么几个关键参数。今天咱们一个一个掰开揉碎了讲。
2.1 RS-232标准:电压与电平的江湖
RS-232是串口通信的鼻祖标准。它定义了数据怎么在线上传输。我记得第一次用示波器看RS-232波形时,心里直犯嘀咕:这电压怎么是负的?
没错,RS-232的逻辑电平跟我们平时用的TTL(0V和3.3V/5V)完全相反:
- 逻辑1(Mark):-3V 到 -15V
- 逻辑0(Space):+3V 到 +15V
为什么要用负逻辑?其实是为了抗干扰。电压摆幅大,信号在长线传输时不容易被噪声淹没。我在一个工厂项目里,RS-232线拉了15米,用的就是±12V的电压,愣是没丢一个字节。
2.2 波特率:通信的节拍器
波特率,就是每秒传输多少个符号。对于串口来说,一个符号就是一个bit。所以9600波特率,就是每秒传9600个bit。
你可能会问:为什么常见的是9600、19200、115200这些数字?而不是10000、20000?
嗯,这里有个小历史。早期的晶振频率是1.8432MHz,这个频率除以16再除以某个数,刚好能得到9600。说白了,这些波特率是为了让时钟分频更精确。我个人习惯,低速场景用9600,高速场景用115200。再高的话,比如921600,对线缆和干扰就比较敏感了。
| 波特率 | 每字节传输时间(10位) | 适用场景 |
|---|---|---|
| 9600 | 约1.04ms | 调试、传感器、GPS |
| 38400 | 约0.26ms | 工业仪表、PLC |
| 115200 | 约0.087ms | 高速数据、固件升级 |
2.3 数据位与停止位:帧的骨架
串口传输数据,不是光秃秃地发bit。它要打包成一个「帧」。一个典型的帧长这样:
起始位(1bit) + 数据位(5~8bit) + 奇偶校验位(0/1bit) + 停止位(1/1.5/2bit)
数据位最常见的是8位,因为一个字节就是8位。但有些老设备用7位,比如某些ASCII终端。我建议你一律用8位,除非你明确知道对方只支持7位。
停止位,说白了就是给接收方一点时间消化数据。1位停止位最常用。2位停止位用在慢速设备或长线缆上,给信号多一点稳定时间。1.5位?我只在古董级的电传打字机上见过。
2.4 奇偶校验:简单的错误检测
奇偶校验,就是给数据加一个额外的bit,让整个数据中1的个数是奇数(奇校验)或偶数(偶校验)。
举个例子:数据是 0b0100 0001(字符'A'),里面有2个1。
- 偶校验:校验位设为0,保持1的总数为偶数(2个)。
- 奇校验:校验位设为1,让1的总数变成奇数(3个)。
接收方收到后,数一下1的个数。如果不对,就知道数据出错了。
但说实话,奇偶校验只能检测奇数个bit的错误。如果两个bit同时翻转,它检测不出来。我在一个项目中用过奇校验,后来发现干扰导致连续两个bit出错,校验完全没反应。从那以后,我对奇偶校验的态度就是:聊胜于无。
2.5 硬件握手:让数据不丢包
硬件握手,也叫流控制。它用额外的两根线——RTS(请求发送)和CTS(允许发送)——来控制数据流。
工作原理很简单:
- 发送方想发数据,先把RTS拉高。
- 接收方准备好了,把CTS拉高。
- 发送方看到CTS为高,开始发数据。
- 如果接收方缓冲区满了,就把CTS拉低,发送方看到后立即停止发送。
我建议在以下场景一定要用硬件握手:
- 高速通信(115200以上)
- 接收方处理速度慢(比如单片机要处理大量计算)
- 长距离传输(线缆超过10米)
有一次,我在调试一个高速数据采集系统,波特率设到460800。不用硬件握手时,每发几百个字节就丢一个。加上RTS/CTS后,稳如老狗。嗯,这就是硬件的魅力。
2.6 总结:串口配置的黄金法则
好了,咱们把串口通信的几个核心参数都过了一遍。最后,我给大家一个配置清单,照着做基本不会出错:
- 波特率:首选115200,兼容性选9600
- 数据位:一律8位
- 停止位:1位
- 奇偶校验:无(除非设备要求)
- 硬件握手:高速或长距离时开启
串口通信,说白了就是发方和收方约定好一套规则。只要两边参数一致,线接对了,基本就能通。如果通不了,别慌,拿示波器看看波形,或者用串口助手抓一下数据,问题往往出在电平转换或者波特率误差上。
下一章,咱们聊聊RS-485,那个能传1200米的串口变种。到时候你会发现,RS-232只是开胃菜。