1. 串口通信的基础概念
想象一下你和朋友用对讲机聊天,每次只能一个人说,一个人听,而且必须约定好说话的节奏——这就是串口通信的基本场景。在嵌入式开发中,UART/USART就像这个对讲机,负责微控制器与传感器、显示屏等外设之间的"对话"。
我第一次接触串口是在大学电子设计竞赛,当时用STM32通过串口给电脑发数据,结果收到一堆乱码。调试半天才发现是波特率没匹配,这个教训让我深刻理解了串口配置的重要性。串口通信有两个关键角色:UART(通用异步收发器)和它的升级版USART(通用同步/异步收发器)。它们就像邮局的两种寄信方式:UART是平邮,不需要双方实时同步;USART则是挂号信,需要邮局(时钟信号)确认每一步。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. UART协议深度解析
2.1 硬件连接与工作模式
UART的硬件连接简单到令人感动——只需要两根数据线(TXD发送、RXD接收)加一根地线。我在调试树莓派与Arduino通信时,曾尝试省去GND线,结果数据完全错乱。后来用示波器测量才发现,两地之间存在电压差,这让我明白:共地是串口通信的底线(字面意思)。
全双工模式是UART的默认工作方式,就像电话通话可以同时说和听。但实际项目中我经常用半双工节省IO口,比如控制RS485模块时,需要通过DE/RE引脚切换收发状态。这里有个坑:切换延时必须大于一个字符的传输时间,否则会丢失起始位。
2.2 数据帧结构详解
UART的数据帧就像快递包裹:
- 起始位(Start Bit):包裹上的"易碎"标签,固定为逻辑0
- 数据位(5-8位):实际货物内容
- 校验位(可选):货物清单校验码
- 停止位(1-2位):包裹封箱胶带
我在智能家居项目中发现,当通信距离超过3米时,1位停止位经常出现帧错误。改用2位停止位后稳定性大幅提升,代价是传输效率降低约9%。具体配置要根据噪声环境权衡:
| 配置项 | 典型值 | 适用场景 |
|---|---|---|
| 数据位 | 8位 | 大多数ASCII字符传输 |
