嵌入式入门指南:一文读懂串口通信(UART)与常见协议
在嵌入式系统开发中,串口(UART)是工程师最常打交道的通信接口之一。它结构简单、应用广泛,是设备与设备、设备与上位机之间沟通的“基础语言”。今天,我们就来系统性地梳理一下串口通信的核心概念、参数和一种常见的应用层协议。
一、 串口通信:异步串行的艺术
UART,全称为通用异步收发器,其核心特点是“异步”和“串行”。
-
异步:指通信双方没有统一的时钟线来同步节奏。它们依靠预先约定好的速度(波特率)来协调收发。
-
串行:数据是一位一位地,通过一根信号线依次传输。与之相对的是“并行通信”(通过多根线同时传输多位数据)。串行通信虽然速度相对慢,但成本低、实现简单、抗干扰能力强、传输距离可以很远(尤其在使用了RS-485等差分标准后)。
一个完整的UART数据帧包含:
-
起始位:标志一帧数据的开始。
-
数据位:通常是8位,按LSB(低位先行) 原则发送。
-
校验位:用于检错,可选“无校验(N)”、“奇校验(O)”或“偶校验(E)”。
-
停止位:标志一帧数据的结束,通常为1位。
将这些参数组合起来,就是我们常说的“串口参数”,例如 9600 8N1,表示波特率为9600bps,8位数据位,无校验,1位停止位。
二、 关键概念辨析
理解串口,还需要厘清几组重要的通信模式:
-
单工、半双工与全双工
-
单工:数据单向流动,如同广播,一方固定发,一方固定收。
-
半双工:数据可以双向流动,但同一时刻只能朝一个方向传输,如同对讲机,需要“按键说话,松键收听”。
-
全双工:数据可以同时双向传输,UART需要两根独立的数据线(RXD和TXD)来实现,如同电话通话。
-
-
电平标准
UART本身是TTL电平,但为了延长传输距离和增强抗干扰性,常通过电平转换芯片(如CH340)转换为其他标准:
-
TTL:高电平5V/3.3V,低电平0V。适用于板内或短距离通信。
-
RS-232:采用负逻辑,高电平-3V~-15V,低电平+3V~+15V。传输距离可达15米。
-
RS-485:采用差分信号传输,抗共模干扰能力极强,传输距离可达千米级。
-
-
校验方式
为了保证数据正确性,串口帧中可加入校验位:
-
奇偶校验:确保数据位与校验位中“1”的总个数为奇数(奇校验)或偶数(偶校验)。但它有一个明显缺陷:无法检测出偶数个比特同时发生错误的情况。
-
文档中还提到了累加和校验与CRC校验,这两种是更复杂、更可靠的校验方法,通常用于多个字节的数据包校验。
-
三、 对比其他常用串行总线
UART并非唯一的串行通信方式,在嵌入式领域,I2C和SPI同样举足轻重,它们都是“同步”通信(有专用的时钟线SCL/SCLK)。
-
I2C:只需两根线(时钟线SCL和数据线SDA),支持多主多从,通过地址寻址。
-
SPI:通常需要四根线(时钟线SCLK、主机输出从机输入MOSI、主机输入从机输出MISO、片选CS),全双工,速率高,但占用引脚多。
核心区别:UART是异步的,点对点通信为主;I2C和SPI是同步的,更易于构建一对多的总线网络。
四、 从物理层到应用层:Modbus协议示例
仅有底层的物理连接和字节帧格式还不够,设备之间需要能理解彼此发送的“命令”和“数据”,这就需要应用层协议。Modbus 是一种在工业控制领域极其流行的主从式应用层协议。
从您提供的文档指令示例中,我们可以解析出一个典型的Modbus RTU帧结构(基于串口传输):
主机发送指令:0xAA 0x01 0x01 0x42 0x00 0x00 0xBB
-
0xAA:帧起始标识。
-
0x01:从机设备地址。
-
0x01:功能码(例如,文档中
0x01代表控制LED)。 -
0x42, 0x00, 0x00:数据域(具体控制参数)。
-
0xBB:帧结束标识。
通信流程:
-
主机(如PC或主控制器)按照上述格式构造一个请求帧,通过串口发送出去。
-
从机(如传感器、执行器)接收到数据,首先进行CRC校验(文档示例中未体现,实际Modbus RTU必有),校验通过后,解析地址码、功能码和数据。
-
从机根据功能码执行相应操作(如点亮LED、读取温度),然后构造一个应答帧返回给主机,格式类似:起始位 + 自身地址 + 功能码 + 执行结果数据 + 结束位。
通过Modbus这样的协议,串口通信就从简单的字节流传输,上升为了有明确语义的“问答”机制,从而能够可靠地控制复杂系统。
串口是连接硬件世界与软件逻辑的经典桥梁。掌握其原理与协议,是开启嵌入式系统设计与调试大门的关键一步。
更多推荐

所有评论(0)