1. 概述
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种全双工、串行、异步的通信协议。
UART 信号线说明:
- VCC:电源正极
- GND:接地
- TXD:发送数据信号线
- RXD:接收数据信号线
通信协议:UART、I2C、SPI、CAN等
典型应用:GPS 传感器(经度、纬度),如 ATGM336H-5N 型号,通过 UART 与 51 单片机进行数据通信。

2. 通信方式
根据数据传输方向,通信方式可分为以下三种:
(1)单工通信
- 数据的发送方和接收方是固定的
- 数据的传输通过一根信号线完成
- 数据的传输方向是固定的,只能从发送方到接收方

(2)半双工通信(I2C:VCC、GND、SDA、SCL)
- 通信双方既可以作为数据的发送方,也可以作为数据的接收方
- 数据传输通过一根信号线完成
- 数据传输方向可以是双向的,但同一时刻数据传输方向呈现单一性
(3)全双工通信(UART)
- 通信双方既可以作为数据的发送方,也可以作为数据的接收方
- 数据传输通过两根信号线完成
- 数据传输方向在任意时刻可以是双向的

3. 串口传输数据顺序
串口通信遵循 LSB 先行 原则,即先发送数据的低位,再发送高位。
例如字符 'A' 的 ASCII 码为 0x41,二进制为 0100 0001,发送时先发送最低位 1,最后发送最高位 0。
4. 串行传输与并行传输的区别
(1)串行传输
通过一根信号线传输数据,按照先后次序逐个 bit 发送
特点:
- 传输速率慢(只有一根线逐个 bit 传输数据)
- 硬件成本低,实现简单
- 传输距离远,抗干扰性强(信号线少,干扰小,不存在多根线之间的信号偏移,如 RS485 差分信号)
(2)并行传输
通过多根信号线同时传输多个 bit 数据
特点:
- 传输速率快(通过多根线同时发送多个 bit 数据)
- 硬件成本高,实现复杂
- 传输距离近,抗干扰性差(30 米距离内,存在信号偏移、电磁波干扰、误差)
5. 串口通信时序
6. 同步通信与异步通信
时钟线:约定双方的通信频率。
- 同步通信:通信双方有一根共享的时钟信号线来约定通信的频率
- 异步通信:通信双方没有时钟线进行通信频率约定
波特率:bits per second(bps),即每秒传输的 bit 数量。常见波特率有 2400bps、4800bps、9600bps、115200bps。
7. 串口通信参数配置
串口通信参数格式为:波特率、数据位、校验位、停止位。
| 9600 8 N 1 | 波特率 9600,8 位数据位,无校验(None),1 位停止位 |
| 2400 8 E 1 | 波特率 2400,8 位数据位,偶校验(Even),1 位停止位 |
| 4800 8 O 1 | 波特率 4800,8 位数据位,奇校验(Odd),1 位停止位 |
校验规则
- 奇校验:校验位为 '1',若数据位中 '1' 的个数加上校验位的 '1',保持 '1' 的总个数为奇数个,则代表奇校验通过
- 偶校验:校验位为 '0',若数据位中 '1' 的个数加上校验位的 '0',保持 '1' 的总个数为偶数个,则代表偶校验通过
例如字符 'A'(0100 0001)使用奇校验时,校验位为 1,即 0100 0001 1。校验机制无法检测偶数个 bit 出错的问题。
8. 电气特性与电平标准
TTL 电平
- 1(高电平):5V
- 0(低电平):0V
RS232 电平(负逻辑)
- 1(高电平):-3V 至 -15V
- 0(低电平):3V 至 15V
RS485 电平(差分)
- 1(高电平):2V 至 6V
- 0(低电平):-2V 至 -6V
CH340 芯片:电平转换芯片,用于实现 TTL 电平与 USB 电平之间的转换。
9. 51 单片机串口编程
(1)串口数据缓冲
- SBUF:串口数据缓冲寄存器,分为发送缓冲区和接收缓冲区
- 发送数据:SBUF = 'a';
- 接收数据:从 SBUF 读取接收到的数据
(2)串口初始化配置
51 单片机通过定时器(Timer0/Timer1)作为波特率产生器,配置串口工作方式为 8 位 UART、波特率可变。
- SCON 寄存器:bit6 和 bit7 清 0,bit6 置 1,配置串口工作方式;bit4 置 1,允许串口接收数据
- PCON 寄存器:bit6 清零(SMOD0),可通过 SCON 寄存器中的 bit6 和 bit7 指定串口工作方式;bit7 置 1,波特率翻倍
(3)定时器 1 配置(8 位自动重装载模式)
- TMOD 寄存器:高 4 位清 0,bit5 置 1,配置定时器 1 为 8 位自动重装载模式
- 初值计算:12MHz 晶振初值为 230;11.0592MHz 晶振、2400bps 时初值为 232(按公式计算)
- TCON 寄存器:bit6 置 1,打开定时器 1,开启计数
(4)中断配置
- IE 寄存器:bit7 和 bit4 置 1,开启串口中断和 CPU 总中断

(5)发送与接收方式
- 发送:采用轮询方式,通过 putchar() 或 puts() 逐字符发送
- 接收:采用中断方式,接收数据后进入中断服务函数处理
(6)存储类型
- data:将变量的存储位置放到芯片内部 RAM(256 字节)
- xdata:将变量的存储位置放到芯片外部扩展 RAM(64KB)
10. 主从应答机制
- 主机:永远是发起通信的一方,拥有对通信的绝对控制
- 从机:无法发起通信,只能根据主机下发的指令完成对应的控制
- 应答:从机完成对应功能后,需要给主机一个回复
11. 串口任务与 Modbus 协议
串口任务:主机(Windows)向从机发送 Modbus 协议格式指令,从机解析指令,根据指令完成对应功能,并向主机回复应答。
Modbus 协议位于 TCP/IP 应用层,使用 CRC 校验。
Modbus 报文格式
| 0xAA | 0xBB | 0x01 | 0x00 | 0x42 | 累加和校验 | 0xEE |
功能码定义(示例)
- 0x01:控制 LED 灯
- 0x02:数码管显示
- 0x03:蜂鸣器控制
- 0x04:温度采集
从机处理流程
数据流向位
- 主机到从机:功能码 0x01(0000 0001),数据流向位为 0
- 从机到主机:功能码 0x81(1000 0001),数据流向位为 1
数据流向位含义:0 表示数据从主机到从机,1 表示数据从从机到主机。




