当前位置: 首页 > news >正文

【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 位停止位):

  1. 发送器接收并行数据01000001(字符 “A” 的 ASCII 码);
  2. 按 UART 格式封装:添加起始位(1 位低电平0)→ 数据位(01000001)→ 停止位(1 位高电平1),形成完整帧0 01000001 1
  3. 发送器以约定波特率(如 115200 bps)将帧数据逐位通过 TX 线发送;
  4. 接收器通过 RX 线检测到起始位(低电平跳变),触发同步,按相同波特率逐位接收数据;
  5. 接收器去除起始位和停止位,将数据位01000001转换为并行数据,传递给设备内部处理。

三、UART 数据帧格式:异步通信的 “规则”

       UART 通过固定帧结构实现异步同步(无需时钟线),确保接收方正确解析数据。标准帧格式由 5 部分组成(按传输顺序):

  1. 起始位(Start Bit)

    • 1 位低电平(逻辑 0),标志数据传输开始。
    • 作用:空闲时总线为高电平(逻辑 1),起始位的低电平跳变可触发接收方 “开始采样”,实现收发同步。
  2. 数据位(Data Bits)

    • 5-9 位(常用 8 位),代表实际传输的数据(如 ASCII 字符、传感器数值)。
    • 传输顺序:从最低位(LSB)到最高位(MSB),例如发送01000001时,先传1(最低位),最后传0(最高位)。
  3. 校验位(Parity Bit,可选)

    1 位,用于简单错误检测,根据数据位中 “1” 的数量计算:
    • 无校验(None):不添加校验位(常用,需上层协议保障可靠性)。
    • 偶校验(Even):数据位 + 校验位中 “1” 的总数为偶数;
    • 奇校验(Odd):数据位 + 校验位中 “1” 的总数为奇数;
  4. 停止位(Stop Bit)

    • 1 位、1.5 位或 2 位高电平(逻辑 1),标志一帧数据结束。
    • 作用:为接收方提供缓冲时间,确保下一帧起始位的低电平跳变可被准确识别。
  5. 空闲位(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 通过流控机制解决这一问题,分为两类:

  1. 硬件流控(Hardware Flow Control)

    • 需额外两根线:RTS(Request To Send,发送请求)和 CTS(Clear To Send,发送允许)。
    • 工作逻辑:
      • 接收方准备好接收数据时,拉低 RTS(通知发送方 “可发送”);
      • 发送方检测到对方 CTS(即接收方 RTS)为低电平时,开始发送数据;
      • 接收方缓冲区满时,拉高 RTS(禁止发送),发送方暂停传输。
  2. 软件流控(Software Flow Control)

    • 无需额外硬件,通过特定字符(XON=0x11,XOFF=0x13)控制:
      • 接收方缓冲区快满时,发送 XOFF(暂停发送);
      • 接收方处理完数据后,发送 XON(恢复发送)。

       说明:硬件流控响应速度快、可靠性高,适合高速通信(如蓝牙 HCI 交互);软件流控节省硬件资源,适合低速场景(如调试打印)。


注:基础串口硬件流控模式下 四线制(TX, RX, RTS, CTS) 的详细介绍表格:

信号线方向 (DTE视角)全称功能描述
TX输出 →Transmit DataDTE 发送数据到 DCE(如:计算机 → 调制解调器)
RX输入 ←Receive DataDTE 接收来自 DCE 的数据(如:计算机 ← 调制解调器)
RTS输出 →Request To SendDTE 通知 DCE:“我已准备好接收数据,你可以发送”(请求对方发送)
CTS输入 ←Clear To SendDCE 通知 DTE:“我已准备好接收数据,你可以发送”(允许本端发送)

关键说明:

  1. 硬件流控作用

    • 通过 RTS/CTS 信号自动协调数据传输,避免因缓冲区满导致的数据丢失(解决“过载”问题)。

    • 当接收方无法处理数据时,通过拉低 CTS 信号暂停发送方传输。

  2. 信号方向

    • DTE (数据终端设备):如计算机、单片机

    • DCE (数据通信设备):如调制解调器、串口模块

    • RTS 是 DTE 的输出 → DCE 的输入

    • CTS 是 DCE 的输出 → DTE 的输入

  3. 流控交互流程

    步骤DTE 动作DCE 动作
    1置高 RTS:"我可以接收"检测到 RTS 高电平
    2等待 CTS 高电平若就绪,置高 CTS:"你可以发送"
    3开始发送 TX 数据接收数据
    4若 DCE 缓冲区满拉低 CTS:"暂停发送!"
    5立即停止发送缓冲区空后重新置高 CTS
  4. 物理连接

    • 直连方案(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 针),其引脚定义严格规范了信号功能和传输方向,以下是各引脚的核心说明(蓝牙场景重点关注标红部分):

引脚编号定义(全称)传输方向功能说明
1DCD(Data Carrier Detect)数据载波检测:DCE(如 Modem)通知 DTE(如计算机)“已检测到载波信号”
2RXD(Receive Data)接收数据:DTE 从 DCE 接收串行数据(对应 UART 的 RX 线)
3TXD(Transmit Data)发送数据:DTE 向 DCE 发送串行数据(对应 UART 的 TX 线)
4DTR(Data Terminal Ready)终端就绪:DTE 通知 DCE “自身已准备好接收数据”
5GND(Ground)信号地:为所有信号提供参考电位(必须连接,否则电平无法正确识别)
6DSR(Data Set Ready)设备就绪:DCE 通知 DTE “自身已准备好通信”(如 Modem 已拨号成功)
7RTS(Request To Send)请求发送:DTE 向 DCE 请求发送数据(硬件流控信号,对应 UART 的 RTS)
8CTS(Clear To Send)允许发送:DCE 通知 DTE “可开始发送数据”(硬件流控信号,对应 UART 的 CTS)
9RI(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)的基础。

http://www.lryc.cn/news/609112.html

相关文章:

  • 文本换行问题
  • Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程
  • 【从零开始学习Redis】初识Redis
  • [Oracle] DUAL数据表
  • CAP 理论笔记
  • 推荐系统学习笔记(九)曝光过滤 Bloom Filter
  • 【领域热点】【Vue】Vue 与 WebAssembly:前端性能优化的黄金搭档
  • 自动驾驶中的传感器技术18——Camera(9)
  • Connection refused: no further information: localhost/127.0.0.1:2375
  • docker 可用镜像列表(长期免费)
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 4 部分
  • Docker环境离线安卓安装指南
  • centos9 安装docker engine
  • C++ : 反向迭代器的模拟实现
  • Java基本技术讲解
  • 深入解析C++函数重载:从原理到实践
  • 【1】WPF界面开发入门—— 图书馆程序:登录界面设计
  • K8S部署ELK(五):集成Kibana实现日志可视化
  • B+树索引结构原理解析与最佳实践
  • 创建型设计模式:对象诞生的艺术与智慧
  • 设计模式学习[17]---组合模式
  • 控制建模matlab练习06:比例积分控制-②PI控制器
  • 【stm32】按键控制LED以及光敏传感器控制蜂鸣器
  • STM32-驱动OLED显示屏使用SPI(软件模拟时序)实现
  • Spring Boot 的事务注解 @Transactional 失效的几种情况
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-55,(知识点:STM32,外设及其特点)
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)
  • 08【C++ 初阶】类和对象(下篇) --- 类知识的额外补充
  • MySQL 事务原理 + ACID笔记
  • 计算机网络(TCP篇)