UART概念
UART(Universal Asynchronous Receiver/Transmitter)是一种通用异步收发器,用于设备间的异步通信。其核心特点包括:
- 异步通信:无需共享时钟信号,通过预定义的波特率同步数据传输。
- 全双工:支持同时收发数据,通过独立的数据线(TXD和RXD)实现。
- 串行协议:数据按位顺序传输,遵循LSB(低位优先)原则。
UART接线方式
典型接线包括四根线:
- VCC:连接电源正极,为设备供电。
- GND:接地,确保共地参考。
- RXD(接收线):接收来自对方设备的数据。
- TXD (发送线):向对方设备发送数据。
注意:设备间通信时需交叉连接(TXD→RXD,RXD→TXD)。
通信模式
-
单工
- 固定方向的单向通信(如传感器→控制器)。
- 仅需一根数据线,传输方向不可逆。
-
半双工
- 双向通信但分时复用(如对讲机)。
- 单根数据线,同一时间仅允许一端发送。
-
全双工
- 双向同时通信(如电话)。
- 双数据线(TXD/RXD),收发独立进行。
数据传输形式
- 串行传输
- 逐位传输,速率较低,但成本低、抗干扰强,适合远距离通信。
- 并行传输
- 多比特同时传输,速率高,但成本高且易受信号偏移干扰,适合短距离。
奇偶校验
- 奇校验:数据位加校验位后"1"的总数为奇数。
- 偶校验:数据位加校验位后"1"的总数为偶数。
- 无校验 :不进行校验,适用于低误码率环境。
局限性:无法检测偶数个比特的错误。
串口通信参数
常用格式为波特率 数据位 校验位 停止位,例如:
9600 8 N 1:波特率9600bps,8位数据,无校验,1位停止位。115200 8 O 1:波特率115200bps,8位数据,奇校验,1位停止位。
波特率:每秒传输的比特数(如2400、9600、115200等)。
同步与异步
- 同步:通过时钟线同步通信频率(如SPI)。
- 异步:无时钟线,依赖预定义波特率(如UART)。
寄存器配置(以8051为例)
-
SCON寄存器
- 设置
SM0=0、SM1=1,选择8位UART可变波特率模式。 - 置
REN=1允许接收数据。 RI标志位需软件清零,表示数据接收完成。
- 设置
-
PCON寄存器
- 置
SMOD=1使波特率翻倍。 - 清
SMOD0=0,由SCON的SM0/SM1决定工作模式。
- 置
波特率计算 (定时器1 8位自动重装模式):
公式为:
\\text{波特率} = \\frac{2\^{\\text{SMOD}} \\times \\text{定时器溢出率}}{32} \] 其中定时器溢出率由初值决定。 #### 主机与从机 * **主机**:发起通信并控制流程(如发送指令)。 * **从机**:响应主机指令,被动执行操作并回复应答。 #### 时序图与数据帧 UART数据帧包含: 1. 起始位(低电平)。 2. 数据位(5-8位,LSB优先)。 3. 可选的校验位。 4. 停止位(高电平,1-2位)。 **示例代码(8051初始化UART)**: ```c void UART_Init() { SCON = 0x50; // 8位UART,允许接收 PCON |= 0x80; // SMOD=1,波特率加倍 TMOD = 0x20; // 定时器1模式2(8位自动重装) TH1 = 0xFD; // 波特率9600(假设晶振11.0592MHz) TR1 = 1; // 启动定时器1 } ```