UART 是一种常见于嵌入式系统的串行通信方法。它以不共用时钟线的方式,一次发送一个比特的数据,采用匹配设置来保持同步。可靠的UART链路依赖于正确的布线、波特率、帧格式、电压水平和信号时序。本文介绍了UART的操作、设置、用途及常见问题。

通用异步接收-发射(UART)基础知识
UART代表通用异步接收-发射器。它是一种串行通信接口,每次在连接的设备之间传输数据,每一位位。UART模块集成在许多微控制器、处理器、通信芯片和嵌入式模块中。它在传输时将并行数据转换为串行流,接收时将输入串行数据转换回字节。UART 不使用共享时钟线。相反,两台设备通过匹配的通信设置和检测每个数据帧的起点和结束点来保持同步。
UART仍然常见的原因
• 仅使用少数信号线路
• 设置简单,便于直接通信
• 它被集成在许多嵌入式设备中
• 支持通过串口终端进行可读输出
UART帧和时序如何工作?
UART框架的组成部分

| 框架元素 | 功能 |
|---|---|
| 起始位 | 标记一帧的开始 |
| 数据位 | 携带发送的价值 |
| 奇偶校验位 | 使用时增加了基本的错误检查 |
| 停止嚼子 | 标记本帧结束 |
| 空闲状态 | 当没有数据发送时,保持线路高电平 |
主要UART设置
| 背景 | 它控制的内容 |
|---|---|
| 波特率 | 通信速度 |
| 数据位 | 每帧中的值位数 |
| 奇偶性 | 是否添加奇偶校验 |
| 停止位 | 帧结尾格式 |
| 流量控制 | 连接设备间的数据节奏 |
波特率决定了比特发送的速度。更高的波特率提高传输速度,但需要更精确的时序和更清晰的信号路径。UART通信还依赖于双方匹配帧设置。
常见波特率
| 波特率 | 典型用途 |
|---|---|
| 9600 | 基础终端、简单模块与旧系统 |
| 19200–38400 | 中速通信 |
| 57600 | 更快的控制与诊断链路 |
| 115200 | 控制台输出与调试 |
帧长度与数据效率
帧长度会影响每次传输中携带多少有用数据。两个UART链路可以使用相同的波特率,但如果帧格式不同,仍然能提供不同的有效数据吞吐量。例如,8N1和7E1每帧使用不同的总位数,因此每帧的有效载荷数据量不同。
UART布线、电压水平与流量控制

基本的UART连接使用三种主要信号:TX、RX和GND。一个设备的TX引脚连接到另一个设备的接收引脚,两个设备必须共用相同的接地,信号电平才能正确读取。
许多微控制器和模块使用 TTL 或 CMOS UART 电平,通常为 3.3 V 或 5 V。较老的串行系统可能使用 RS-232,其电压范围和信号方式不同,因此与 TTL UART 不直接兼容。连接这些标准时使用电平移收发器。
一些UART链路还使用流量控制,以防止一方无法快速接收输入字节时丢失数据。
基本UART布线规则
• 一个设备的TX连接到另一个设备上的接收
• 一个设备的接收连接到另一个设备的传输
• 接地必须在两端都连接
UART电气标准
| 类型 | 典型用途 | 主要观点 |
|---|---|---|
| TTL/CMOS UART | 微控制器、模块、开发板 | 使用逻辑电平信号,如3.3 V或5 V |
| RS-232 | 遗留串口、工业链路、PC串口连接 | 使用不同的电压范围和信号行为 |
常见流量控制方法
• 硬件流量控制使用RTS和CTS线路
• 软件流控制使用 XON 和 XOFF 字符
硬件流量控制使用独立的控制线来管理数据流。软件流控制减少了线路数量,但它使用数据流中的控制字符。
UART如何在设备内部工作?
在设备内部,UART外设包含多个处理数据发送和接收的部分。这些部分通常包括发送部分、接收部分、移位寄存器、状态标志和先入先出缓冲区。发送数据时,软件会在UART中插入一个字节,硬件会在将整帧发送至TX线之前添加起始位、可选的奇偶校验位和停止位。
当接收到数据时,UART会监控RX线是否有有效的起始位。然后它在正确的时间采样信号,重建字节,检查帧格式,并存储数据以便软件以后读取。
UART外设还会报告状态和错误状况,而FIFO缓冲区则保留数字节,以减少软件未立即响应时遗漏的数据。
常见的UART状态与错误标志
• 传输缓冲区空
• 接收缓冲区满
• 奇偶校验误差
• 框架错误
• 超速误差
UART在嵌入式系统中的常见应用
• 串口终端调试
• 微控制器与模块之间的通信
• 引导加载程序和固件更新链接
• 简单的指令与响应接口
• 数据记录与诊断
• 嵌入式电路板控制台访问
UART 设置、测试与故障排除
设置UART链路首先要选择兼容的通信设置和信号水平。测试有助于确认链路布线正确、配置正确,并且发送的数据帧有效。
链路规划与设备配置
在连接前选择波特率、帧格式、电压标准和流量控制方法。然后在软件中启用UART硬件,配置所需的缓冲区或先入先出设置。时钟精度、电缆质量和预期数据速率也会影响链路性能。
通信验证
通过发送已知的数据模式或可读文本来查看链接。串口端子、USB转UART适配器、逻辑分析仪或示波器可以帮助确认帧有效,以及线路在传输间保持正确的空闲状态。
UART 问题指南
| 症状 | 可能原因 |
|---|---|
| 随机或无法阅读的字符 | 波特率或帧数设置错误 |
| 未收到数据 | TX/RX反向,缺地,UART禁用,电压水平错误 |
| 间歇性错误 | 噪音、长线路、时序不匹配 |
| 构图或宇称错误 | 设置不好还是信号质量差 |
| 突发时丢失的字节 | 溢流、缓冲弱、无流量控制 |
故障排除检查
• 确认TX和RX正确交叉
• 确保双方共用同一地面
• 在两端验证波特率和帧格式
• 检查信号电平是TTL/CMOS还是RS-232
• 如果怀疑存在时序误差或噪声,降低波特率
• 审查软件中的UART错误标志
• 使用已知良好的终端工具或适配器进行测试
UART、SPI和I2C比较

UART、SPI 和 I2C 是常见的串行通信方式,但它们的工作方式不同。UART使用两个设备之间的直接链路,不需要时钟线路。SPI 使用时钟和独立的数据路径以加快通信速度。I2C也使用时钟,但通过内置寻址允许多个设备共享同一总线。
接口比较
| 特色 | UART | SPI | I2C |
|---|---|---|---|
| 时钟线 | 不 | 是的 | 是的 |
| 典型拓扑 | 点对点 | 控制器-外设 | 共享公交 |
| 复杂性 | 低 | 中等 | 中等 |
| 内置寻址 | 不 | 不 | 是的 |
| 共同力量 | 简洁 | 速度 | 许多设备所需的线更少 |
UART适合简单、直接的链路和终端接入。SPI适合更高速的通信。I2C适用于多个设备共用一条总线且信号线更少的情况。
结论
UART之所以被使用,是因为它提供了简单、直接且硬件复杂度低的通信。其性能依赖于匹配设置、正确的发射和接收布线、共享接地、兼容电压水平,以及正确处理时序、缓冲和错误标志。理解帧结构、波特率、流量控制和常见故障原因有助于解释UART链路失效的原因,以及嵌入式系统中通信的稳定性如何维持。
常见问题解答 [常见问题解答]
UART可以同时发送和接收吗?
是的。UART 支持全双工通信,因此可以在接收接收端同时发送数据。
8N1在UART中意味着什么?
8N1 意味着 8 个数据位,无奇偶校验,1 个停止位。
UART 可以连接多个设备吗?
不是直接的。UART主要用于一对一通信,不包含内置寻址功能。
在UART中,波特率和比特率一样吗?
在标准UART中是可以的。它们被视为同一符号,因为每个符号都携带一个比特。
为什么要用USB转UART适配器?
它允许计算机通过USB与UART接口通信。
UART 是否包含加密或高级纠错?
不。UART本身不包含加密或高级纠错。