工程师调试一块新板子,接的第一个外设几乎总是 UART 串口——日志从这里打出来,命令从这里敲进去。UART(通用异步收发器)是设备之间”一发一收两根线就能对话”的串行通信方式,凭协议简单、成本低、调试直观这三个特点,从单片机到工业设备活跃了几十年,至今仍是嵌入式领域的普通话。

两根线的对话规则
UART 是异步通信:没有时钟线,双方靠事先约定的速度各自掐表收发。硬件接口上核心只有三根线——TX(发送)、RX(接收)、GND(地线),连接时交叉对接:本方的 TX 接对方 RX,本方 RX 接对方 TX,GND 共地。这是新手的头号翻车点:把两个 TX 接在一起,什么也收不到。
数据帧的结构约定俗称:空闲时线路保持高电平,起始位拉低”打招呼”,随后 5-9 位数据位(几乎总是 8 位)、可选校验位、停止位拉高收尾。双方掐表的速度就是波特率——每秒传输的码元数,常见档位 9600、115200 等。两端波特率偏差超过约 2-3%,数据就会错位成乱码,这是第二常见翻车点。
| 参数 | 常见取值 | 作用 |
|---|---|---|
| 波特率 | 9600 / 115200 | 双方共同的”语速” |
| 数据位 | 8 位 | 每帧有效数据长度 |
| 校验位 | 无 / 奇 / 偶 | 简单的传输错误检测 |
| 停止位 | 1 / 2 位 | 帧结束标志 |
配置串口就是把这四项对齐,一个都不能错——参数不匹配的表现很固定:能收到数据但全是乱码。
它在工程里承担的三类工作
第一类是调试输出。嵌入式设备没有屏幕,程序运行状态、报错信息全靠串口日志输出到电脑终端,这是嵌入式开发的基本工作流,串口日志的价值不亚于服务端日志。
第二类是模块互联。蓝牙模块、GPS 模块、4G 模组、指纹识别模块,绝大多数低速外设模组对主控的接口就是 UART:主控发 AT 指令,模组回响应。这类”主控+模组”的架构里,串口是两条线之间的翻译通道。
第三类是工业与设备运维。工控设备的编程口、网络设备的 Console 口,本质都是 UART(Console 口只是电平标准不同,需要转换线)。设备网络瘫了、SSH 进不去时,串口是救命的备用通道——这也是为什么机房运维包里总有一根串口线。
用 Python 与串口设备对话,pyserial 十行以内跑通:
import serial
ser = serial.Serial("/dev/ttyUSB0", 115200, timeout=1) # 端口+波特率
ser.write(b"AT\r\n") # 发送一条 AT 指令
print(ser.readline()) # 读取模组回显
ser.close()
三个参数——端口名、波特率、超时——覆盖了绝大多数调试场景,超时参数尤其重要,没有它读数据时程序可能永久阻塞。
UART 与其他串行接口怎么选
嵌入式常用的几种接口各有领地,选型对比一眼分明:
| 接口 | 线数 | 主从结构 | 典型用途 |
|---|---|---|---|
| UART | 2-3 根 | 点对点平等 | 调试、模组通信 |
| I2C | 2 根 | 一主多从 | 低速传感器(温湿度、陀螺仪) |
| SPI | 4 根 | 一主多从 | 高速外设(屏幕、Flash) |
经验法则:点对点、中低速、要打日志——UART;挂多个低速传感器——I2C;要速度(驱动屏幕、读写存储)——SPI。三者不互斥,一块主控板往往三种接口并存,按外设各取所需。
串口不通的排查顺序
设备间串口不通时,按固定顺序过一遍,多数问题当场解决:
- 查接线:TX/RX 是否交叉对接、GND 是否共地,这是出错率两高的一步;
- 查参数:两端的波特率、数据位、校验位、停止位逐项对齐;
- 查电平:3.3V 与 5V 设备直连需要电平转换,别硬连;
- 自环测试:单板 TX 接自己的 RX,能自发自收说明本板串口正常;
- 换工具:用 USB 转串口工具接电脑做第三方验证,把问题切分到具体一侧。
自环测试是这条流程里极好用的一招——它把”两边都可能有问题”的僵局,切成”本板正常,问题在对面”的确定结论。
工程实践里的三个细节
一是电平匹配:3.3V 与 5V 的串口直连可能损坏引脚,跨电平通信用电平转换芯片。二是长距离与抗干扰:UART 的裸 TTL 电平走不了远线,几米以上的通信要换 RS-485 这类差分标准——协议逻辑相同,物理层加强。三是调试技巧:乱码先查波特率和共地,收不到数据先查 TX/RX 是否交叉,两板互发先各自回环自测。这三条排查口诀,能解决串口问题的多数日常案例。
常见问题(FAQ)
Q1:串口收到乱码怎么排查?
按顺序核对波特率、数据位与校验位配置,再确认双方是否共地,多数问题出在前者。
Q2:UART 能不能一主带多个从设备?
标准 UART 是点对点的;多设备场景用 RS-485 总线加地址协议扩展。
Q3:为什么设备间通信要共地?
电平是相对参考点的电压,没有共地参考,收发双方对”高电平”的理解不一致。