【Bluetooth】【Transport层篇】第三章 基础的串口(UART)通信
一、串口简介
串口(UART)是嵌入式系统与外设通信中最常用的接口之一,其 “通用、异步、串行” 的特性使其在低速数据传输场景中占据重要地位。本章将从基本概念、工作原理到实际特性,系统解析 UART 通信的核心知识。
1.1 UART 的定义与核心作用
UART(Universal Asynchronous Receiver/Transmitter,通用异步接收 / 发送装置)是一种串行通信协议,通过两根数据线(发送线 TX、接收线 RX)实现设备间的双向数据传输,无需专用时钟线(“异步” 的核心特征)。
其核心作用是:将设备内部的并行数据(如 CPU 处理的 8 位字节)转换为串行数据(逐位传输)发送出去,同时将接收的串行数据转换为并行数据供设备处理,是 “并行数据” 与 “串行传输” 之间的桥梁。
1.2 串行通信与并行通信的本质区别
通信按数据传输方式可分为串行通信和并行通信,UART 属于典型的串行通信,二者的核心差异如下:
维度 | 串行通信(以 UART 为例) | 并行通信(如 CPU 与内存) |
---|---|---|
数据线数量 | 仅需 1-2 根(单工 1 根,全双工 2 根) | 需多根(如 8 位数据需 8 根数据线,加控制线共十余根) |
传输方式 | 数据位逐位依次传输(如 1 字节的 8 位分 8 次发送) | 多个数据位同时传输(如 1 字节的 8 位同时发送) |
抗干扰能力 | 强(少线传输,受干扰概率低) | 弱(多线间存在串扰,高速时更明显) |
传输距离 | 较长(通常数米至数十米,配合优化可达百米) | 短(通常厘米级,高速时仅数厘米) |
硬件复杂度 | 低(布线简单,适合小型设备) | 高(布线复杂,成本高) |
串行
并行
举例:用 UART 传输字符 “A”(二进制01000001
)时,需通过 TX 线分 8 次逐位发送;而并行通信则通过 8 根线同时发送这 8 位,速度更快但硬件成本更高。
二、 UART 的硬件组成与工作流程
UART 的硬件核心由三部分组成,协同完成数据的发送与接收:
- 发送器(Transmitter):将设备内部的并行数据(如 8 位字节)转换为串行数据,按约定格式添加起始位、校验位、停止位,通过 TX 线发送。
- 接收器(Receiver):通过 RX 线接收串行数据,去除起始位、停止位(校验位可选),转换为并行数据供设备处理。
- 波特率发生器(Baud Rate Generator):生成稳定的时钟信号,控制数据位的传输速率(波特率),确保收发双方节奏一致。
工作流程示例(发送 “A”,8 位数据,无校验,1 位停止位):
- 发送器接收并行数据
01000001
(字符 “A” 的 ASCII 码); - 按 UART 格式封装:添加起始位(1 位低电平
0
)→ 数据位(01000001
)→ 停止位(1 位高电平1
),形成完整帧0 01000001 1
; - 发送器以约定波特率(如 115200 bps)将帧数据逐位通过 TX 线发送;
- 接收器通过 RX 线检测到起始位(低电平跳变),触发同步,按相同波特率逐位接收数据;
- 接收器去除起始位和停止位,将数据位
01000001
转换为并行数据,传递给设备内部处理。
三、UART 数据帧格式:异步通信的 “规则”
UART 通过固定帧结构实现异步同步(无需时钟线),确保接收方正确解析数据。标准帧格式由 5 部分组成(按传输顺序):
-
起始位(Start Bit)
- 1 位低电平(逻辑 0),标志数据传输开始。
- 作用:空闲时总线为高电平(逻辑 1),起始位的低电平跳变可触发接收方 “开始采样”,实现收发同步。
-
数据位(Data Bits)
- 5-9 位(常用 8 位),代表实际传输的数据(如 ASCII 字符、传感器数值)。
- 传输顺序:从最低位(LSB)到最高位(MSB),例如发送
01000001
时,先传1
(最低位),最后传0
(最高位)。
-
校验位(Parity Bit,可选)
1 位,用于简单错误检测,根据数据位中 “1” 的数量计算:- 无校验(None):不添加校验位(常用,需上层协议保障可靠性)。
- 偶校验(Even):数据位 + 校验位中 “1” 的总数为偶数;
- 奇校验(Odd):数据位 + 校验位中 “1” 的总数为奇数;
-
停止位(Stop Bit)
- 1 位、1.5 位或 2 位高电平(逻辑 1),标志一帧数据结束。
- 作用:为接收方提供缓冲时间,确保下一帧起始位的低电平跳变可被准确识别。
-
空闲位(Idle)
- 总线空闲时为高电平(逻辑 1),无数据传输时持续保持,直到新帧的起始位到来。
示例:8 位数据、奇校验、1 位停止位的帧结构
发送数据01000001
(含 3 个 “1”)→ 奇校验位为0
(3+0=3,奇数)→ 完整帧:0(起始) 01000001(数据) 0(校验) 1(停止)
。
四、波特率:UART 的 “传输速度”
波特率(Baud Rate)是 UART 的核心参数,定义为每秒传输的位数(bps,bit per second),直接决定通信速度。
-
常见波特率:9600、19200、38400、115200、921600 bps 等(蓝牙模块常用 115200 或更高)。
-
实际有效速率:需扣除起始位、校验位、停止位。例如:
波特率 115200 bps,8 位数据、无校验、1 位停止位 → 每帧含 10 位(1+8+1)→ 有效字节速率 = 115200÷10=11520 字节 / 秒。 -
同步原理:收发双方必须使用相同波特率,接收方通过起始位触发后,按波特率对应的时间间隔(如 115200 bps 对应每 bit 约 8.68μs)采样数据,确保采样点落在数据位的中间(最稳定区域)。
五、通信方向:单工、半双工与全双工
UART 支持全双工通信,其通信方向特性如下:
- 单工(Simplex):数据仅能单向传输(如红外遥控器→电视),仅需 1 根数据线(TX 或 RX)。
- 半双工(Half-Duplex):数据可双向传输,但同一时刻只能单向进行(如对讲机),需 1 根数据线(分时收发)。
- 全双工(Full-Duplex):数据可同时双向传输(如手机通话),UART 通过 TX(发送)和 RX(接收)两根独立数据线实现,无需切换方向。
六、流控:避免数据丢失的 “交通规则”
当发送方速率快于接收方处理速度时,可能导致接收方缓冲区溢出、数据丢失。UART 通过流控机制解决这一问题,分为两类:
-
硬件流控(Hardware Flow Control)
- 需额外两根线:RTS(Request To Send,发送请求)和 CTS(Clear To Send,发送允许)。
- 工作逻辑:
- 接收方准备好接收数据时,拉低 RTS(通知发送方 “可发送”);
- 发送方检测到对方 CTS(即接收方 RTS)为低电平时,开始发送数据;
- 接收方缓冲区满时,拉高 RTS(禁止发送),发送方暂停传输。
-
软件流控(Software Flow Control)
- 无需额外硬件,通过特定字符(XON=0x11,XOFF=0x13)控制:
- 接收方缓冲区快满时,发送 XOFF(暂停发送);
- 接收方处理完数据后,发送 XON(恢复发送)。
- 无需额外硬件,通过特定字符(XON=0x11,XOFF=0x13)控制:
说明:硬件流控响应速度快、可靠性高,适合高速通信(如蓝牙 HCI 交互);软件流控节省硬件资源,适合低速场景(如调试打印)。
注:基础串口硬件流控模式下 四线制(TX, RX, RTS, CTS) 的详细介绍表格:
信号线 | 方向 (DTE视角) | 全称 | 功能描述 |
---|---|---|---|
TX | 输出 → | Transmit Data | DTE 发送数据到 DCE(如:计算机 → 调制解调器) |
RX | 输入 ← | Receive Data | DTE 接收来自 DCE 的数据(如:计算机 ← 调制解调器) |
RTS | 输出 → | Request To Send | DTE 通知 DCE:“我已准备好接收数据,你可以发送”(请求对方发送) |
CTS | 输入 ← | Clear To Send | DCE 通知 DTE:“我已准备好接收数据,你可以发送”(允许本端发送) |
关键说明:
-
硬件流控作用
-
通过 RTS/CTS 信号自动协调数据传输,避免因缓冲区满导致的数据丢失(解决“过载”问题)。
-
当接收方无法处理数据时,通过拉低 CTS 信号暂停发送方传输。
-
-
信号方向
-
DTE (数据终端设备):如计算机、单片机
-
DCE (数据通信设备):如调制解调器、串口模块
-
RTS 是 DTE 的输出 → DCE 的输入
-
CTS 是 DCE 的输出 → DTE 的输入
-
-
流控交互流程
步骤 DTE 动作 DCE 动作 1 置高 RTS:"我可以接收" 检测到 RTS 高电平 2 等待 CTS 高电平 若就绪,置高 CTS:"你可以发送" 3 开始发送 TX 数据 接收数据 4 若 DCE 缓冲区满 拉低 CTS:"暂停发送!" 5 立即停止发送 缓冲区空后重新置高 CTS -
物理连接
-
直连方案(DTE 与 DCE 连接):
text
DTE_TX → DCE_RX DTE_RX ← DCE_TX DTE_RTS → DCE_CTS DTE_CTS ← DCE_RTS
-
交叉方案(两台 DTE 直连需交叉 RTS/CTS):
text
DTE1_RTS → DTE2_CTS DTE1_CTS ← DTE2_RTS
-
应用场景
-
高速串口通信(≥115200 bps)
-
大数据量传输(如文件传输、视频流控制)
-
嵌入式设备与模组通信(如4G模块、GPS模块)
注意:若无需流控,仅 TX/RX 2根线即可工作;启用硬件流控需 4根线(TX+RX+RTS+CTS)。RTS/CTS 是硬件流控的核心,可显著提升通信可靠性。
(注:因为蓝牙产品会用到可靠的硬件流控,所以这里补充说明了一下。)
七、UART 的优缺点与典型应用
优点:
- 硬件简单:仅需 2-4 根线(TX、RX、RTS、CTS),布线成本低;
- 灵活性高:支持不同波特率、数据位配置,适配多种设备;
- 全双工:可同时收发,适合交互场景。
缺点:
- 速率有限:最高通常不超过 10Mbps(远低于 USB、SPI);
- 抗干扰弱:TTL 电平信号易受电磁干扰,传输距离短(通常数米);
- 无时钟线:波特率误差超过 3% 可能导致数据错误(需严格匹配)。
典型应用:
- 嵌入式调试(通过 UART 打印日志);
- 传感器数据传输(如温湿度传感器→MCU);
- 蓝牙模块交互(如 MCU 通过 UART 控制蓝牙模块发送 AT 指令);
- 低速外设通信(如 GPS 模块、RFID 读卡器)。
八、基础串口小结
UART 作为一种通用异步串行通信协议,通过简洁的硬件设计和灵活的配置,成为嵌入式系统中低速数据传输的首选方案。其核心是通过固定帧结构(起始位、数据位、停止位)实现异步同步,通过波特率控制传输速度,通过流控机制保障可靠性。理解 UART 的工作原理,是掌握蓝牙模块交互、传感器通信等场景的基础。
九、补充说明
9.1 RS485
请参考:【STM32】基于标准库和HAL库分别实现RS485通信方式-CSDN博客
9.2 RS232
9.2.1 RS232:UART 物理层的标准化升级
RS232(全称 EIA-RS-232)是串行通信领域首个标准化接口规范,由美国电子工业协会(EIA)于 1970 年联合设备厂商制定,旨在解决基础 UART 在实际应用中的兼容性问题。它并非替代 UART 的协议,而是对 UART物理层(接口形式、电平标准、抗干扰设计)的规范化定义,让不同厂商的设备能通过统一标准实现串行通信。
9.2.2 RS232 的核心价值:解决 UART 的三大痛点
基础 UART 虽能实现串行通信,但存在接口混乱、电平不统一、抗干扰弱等问题,RS232 针对性地给出了解决方案:
(1)接口标准化:统一硬件连接形式
UART 仅定义了信号名称(如 TX、RX),但未规定物理接口(如连接器类型、引脚排列),导致不同设备间难以直接对接。
RS232 通过DB9 连接器(9 针插头 / 插座)统一了接口标准,所有遵循 RS232 的设备均采用相同的引脚定义和机械尺寸,彻底解决了 “线不对口” 的兼容问题。
(2)电平规范化:提升抗干扰能力
UART 采用 TTL 电平(通常 3.3V 或 5V,逻辑 1 为高电平、逻辑 0 为低电平),但未统一电平范围,且低电压信号易受电磁干扰(如工业环境中的电机噪声)。
RS232 重新定义了电平标准:
- 逻辑 “1”(MARK):-5V~-15V(负电压);
- 逻辑 “0”(SPACE):+5V~+15V(正电压);
- 噪声容限:±2V(即接收器会将 + 3V 以下视为逻辑 1,-3V 以上视为逻辑 0)。
通过正负电压差(最小 10V)传输信号,RS232 能有效抵抗环境噪声,大幅提升通信稳定性。
(3)延长传输距离:突破 UART 的短距限制
UART 的 TTL 电平信号传输距离通常仅数米(受噪声干扰限制),而 RS232 通过高电压信号和抗干扰设计,在无中继的情况下可稳定传输30 米;若配合光电隔离(20mA 电流环)或 Modem(调制解调器),传输距离可延伸至千米级甚至更远(如通过电话线、光纤传输)。
9.2.3 RS232 的核心特性:协议层兼容,物理层优化
- 与 UART 的关系:RS232 不改变 UART 的协议逻辑(如数据帧格式、波特率、软件编程接口),仅优化物理层。因此,RS232 通信的软件实现(如串口初始化、数据收发代码)与 UART 完全一致,开发者无需修改程序即可适配。
- 通信模式:仅支持一对一通信(点到点),无法像 RS485 那样实现多设备组网。
9.2.4 DB9 接口:RS232 的 “标准化连接器”
RS232 最常用的接口是DB9(9 针),其引脚定义严格规范了信号功能和传输方向,以下是各引脚的核心说明(蓝牙场景重点关注标红部分):
引脚编号 | 定义(全称) | 传输方向 | 功能说明 |
---|---|---|---|
1 | DCD(Data Carrier Detect) | ← | 数据载波检测:DCE(如 Modem)通知 DTE(如计算机)“已检测到载波信号” |
2 | RXD(Receive Data) | ← | 接收数据:DTE 从 DCE 接收串行数据(对应 UART 的 RX 线) |
3 | TXD(Transmit Data) | → | 发送数据:DTE 向 DCE 发送串行数据(对应 UART 的 TX 线) |
4 | DTR(Data Terminal Ready) | → | 终端就绪:DTE 通知 DCE “自身已准备好接收数据” |
5 | GND(Ground) | — | 信号地:为所有信号提供参考电位(必须连接,否则电平无法正确识别) |
6 | DSR(Data Set Ready) | ← | 设备就绪:DCE 通知 DTE “自身已准备好通信”(如 Modem 已拨号成功) |
7 | RTS(Request To Send) | → | 请求发送:DTE 向 DCE 请求发送数据(硬件流控信号,对应 UART 的 RTS) |
8 | CTS(Clear To Send) | ← | 允许发送:DCE 通知 DTE “可开始发送数据”(硬件流控信号,对应 UART 的 CTS) |
9 | RI(Ring Indicator) | ← | 振铃指示:DCE 通知 DTE “检测到外部呼叫”(如 Modem 接到电话振铃) |
蓝牙场景的简化应用:
蓝牙模块与上位机(如 PC、MCU)通过 RS232 通信时,无需使用全部引脚,核心只需连接 4 根线:
- TXD(3 脚):蓝牙模块→上位机(发送数据);
- RXD(2 脚):上位机→蓝牙模块(接收数据);
- RTS(7 脚)+ CTS(8 脚):硬件流控(可选,高速通信时必接);
- GND(5 脚):信号地(必须连接,否则电平紊乱)。
9.2.5 硬件设计关键:TTL 与 RS232 的电平转换
UART 设备(如蓝牙模块、MCU)通常输出 TTL 电平(3.3V/5V),而 RS232 设备(如 PC 的 DB9 串口)使用 ±15V 电平,二者无法直接连接,必须通过电平转换芯片实现信号转换。
- 典型转换芯片:MAX232、SP3232 等(支持 3.3V 或 5V 供电);
- 转换原理:将 TTL 的高电平(3.3V/5V)转为 RS232 的 + 5V~+15V(逻辑 0),将 TTL 的低电平(0V)转为 RS232 的 - 5V~-15V(逻辑 1);
- 电路架构:UART 设备 → 转换芯片 → DB9 接口 → 另一端 RS232 设备(如 PC)。
9.2.6 RS232 的应用与局限性
(1)典型应用场景
- 传统计算机与外设通信(如老式 PC 的串口与蓝牙模块调试);
- 工业设备本地调试(如 PLC 通过 RS232 连接蓝牙网关);
- 低速数据传输(如 POS 机、考勤机与主机通信)。
(2)局限性
- 仅支持一对一通信,无法组网;
- 速率较低(通常≤115200 bps,高速时抗干扰能力下降);
- 电缆成本高(需屏蔽线减少干扰);
- 逐渐被 USB、以太网等替代,但在工业和传统设备中仍广泛存在。
9.2.7 RS232 小结
RS232 是 UART 物理层的标准化升级,通过统一接口(DB9)、规范电平(±15V)、增强抗干扰能力,解决了早期串行通信的兼容性和可靠性问题。它不改变 UART 的协议逻辑,却大幅扩展了串行通信的应用场景(如中短距离设备互联)。在蓝牙领域,RS232 常用于模块与上位机的调试或近距离数据传输,是理解更复杂串行标准(如 RS485)的基础。