51单片机UART串口通信全解析:从概念到寄存器配置

一、UART核心概念:什么是通用异步收发器?

UART,全称Universal Asynchronous Receiver Transmitter,即通用异步收发器。它是一种硬件接口,同时也是一套独立的异步通信协议,核心特点是异步、全双工、串行------这三个关键词是理解UART的基础,后续会逐一拆解。简单来说,UART就像单片机的"通信信使",负责将单片机内部的并行数据转换成串行数据发送出去,同时将接收的串行数据转换成并行数据供单片机处理,实现与外界设备的双向数据交互。

二、UART接线方式:记住"交叉连接"核心原则

UART通信的硬件接线相对简单,核心是4根线(部分简化场景可省略VCC),关键要注意"TXD与RXD交叉连接",具体接线定义如下:

  • VCC:电源正极,为UART模块供电(若外部设备与单片机共电源,可省略);

  • GND:接地,确保通信双方的电平参考一致,是稳定通信的前提;

  • RXD:数据接收线,负责接收外部设备发送的串行数据;

  • TXD:数据发送线,负责向外部设备发送串行数据。

重要注意事项:当两个设备通过UART通信时,必须遵循"交叉连接"规则------设备A的TXD接设备B的RXD,设备A的RXD接设备B的TXD。若直接将TXD接TXD、RXD接RXD,将无法正常传输数据。

三、三种通信方式对比:单工、半双工、全双工

UART属于全双工通信,为了更好地理解这个概念,我们先对比另外两种常见的通信方式,清晰区分它们的核心差异:

1. 单工通信

通信双方的角色固定:一方只能作为发送方,另一方只能作为接收方。数据通过一根数据线传输,传输方向是单一的,无法反向传输。比如收音机------电台只能发送信号,收音机只能接收信号,无法向电台反馈数据。

2. 半双工通信

通信双方可切换角色,既能发送数据也能接收数据,但同一时刻只能单向传输:当A向B发送数据时,B无法同时向A发送;反之亦然。数据同样通过一根数据线传输,比如对讲机------说话时无法听,听时无法说,需要切换"收发"状态。

3. 全双工通信

这是UART的核心通信方式:通信双方可同时作为发送方和接收方,数据通过两根独立的数据线(TXD和RXD)传输,任意时刻都能双向传输数据。比如我们日常打电话------你说话的同时,也能听到对方说话,收发数据互不干扰。

四、数据传输形式:串行vs并行

数据传输主要分为"串行"和"并行"两种形式,UART采用串行传输,两者的差异直接决定了通信的速率、成本和传输距离:

1. 串行传输(UART采用)

通过一根数据线,将多个bit(二进制位)按照先后次序逐个发送。

  • 优点:硬件成本低(只需一根数据线)、传输距离远、抗干扰性好(少根线减少了信号干扰和偏移);

  • 缺点:传输速率慢(bit逐个传输,耗时较长)。

2. 并行传输

通过多根数据线,将多个bit同时发送(比如8根线同时传输8位数据)。

  • 优点:传输速率快(多个bit同步传输);

  • 缺点:硬件成本高(需要多根数据线)、传输距离近(距离增加后,多根线的信号会出现偏移,易受电磁波干扰,导致数据错误)。

五、UART数据发送顺序:LSB优先原则

UART发送数据时,遵循"低位先行(LSB优先)"的规则,而非我们习惯的"高位先行"。举个例子:

若要发送的数据是 10100110(十六进制A6,bit7为最高位MSB,bit0为最低位LSB),其位序号为bit7~bit0,对应的发送顺序是从bit0(最低位)开始,依次发送bit1、bit2......最后发送bit7(最高位),即发送顺序为"bit0→bit1→bit2→bit3→bit4→bit5→bit6→bit7"。

六、奇偶校验:数据传输的"纠错小助手"

在数据传输过程中,可能因干扰导致bit位出错(比如1变成0,0变成1)。奇偶校验是一种简单的差错检测机制,通过添加"校验位"来判断数据是否传输错误,但要注意:它无法判断偶数个bit出错的情况。常见的奇偶校验分为3种:

1. 奇校验

校验位设为1,要求"数据位中1的个数 + 校验位的1"的总个数为奇数。若接收方检测到总个数为奇数,则代表校验通过(数据大概率正确);若为偶数,则说明数据传输出错。

2. 偶校验

校验位设为0,要求"数据位中1的个数 + 校验位的0"的总个数为偶数。接收方检测到总个数为偶数时,校验通过;否则出错。

3. 无校验

不添加校验位,直接传输数据。这种方式节省传输时间,但无法检测数据错误,适合干扰小、对数据准确性要求不高的场景。

七、串口通信核心参数:波特率、数据位、校验位、停止位

两个设备通过UART通信时,必须保证双方的"通信参数"完全一致,否则会出现数据乱码。这些参数通常用"波特率 数据位 校验位 停止位"的格式表示(如9600 8 N 1),具体含义如下:

1. 波特率

指串口每秒传输的bit数(包括数据位、校验位、停止位等所有bit),是衡量传输速率的核心指标。常见的波特率有2400、4800、9600、115200等,其中9600是最常用的默认值。比如波特率9600,表示每秒可传输9600个bit。

2. 数据位

指每次传输的"有效数据"的bit数,常用的是8位(即一个字节),也有7位、9位等情况。

3. 校验位

对应之前的奇偶校验方式:N(None)表示无校验,E(Even)表示偶校验,O(Odd)表示奇校验。

4. 停止位

数据传输结束后,添加的"结束标志位",常用的是1位停止位,也有1.5位、2位的情况。

示例解析:"9600 8 N 1"表示------波特率9600、8位数据位、无校验、1位停止位,这是单片机UART通信中最常用的配置组合。

八、同步vs异步:UART的"异步"核心

通信的"同步"与"异步",核心区别在于是否需要时钟线进行频率同步:

  • 同步通信:通信双方通过一根独立的时钟线(CLK)同步频率,发送方通过时钟线告知接收方"何时采样数据",数据传输准确性高,但增加了硬件成本(多一根时钟线);

  • 异步通信(UART采用):没有时钟线,双方通过"约定相同的波特率"来同步频率------发送方按照波特率的节奏发送数据,接收方按照相同的波特率采样数据。这种方式省去了时钟线,硬件更简单,但对波特率的一致性要求高(波特率偏差过大会导致数据错误)。

九、主机与从机:通信的"控制权"划分

在多设备UART通信中,通常会划分主机和从机,明确通信的发起权:

  • 主机:拥有通信的绝对控制权,所有通信都由主机发起(比如向从机发送指令);

  • 从机:无法主动发起通信,只能等待主机下发指令,然后根据指令完成对应的操作,并向主机回复应答信息。

比如:单片机与电脑通信时,电脑通常作为主机,单片机作为从机;多个单片机通信时,可指定其中一个作为主机,其他作为从机。

十、51单片机UART核心寄存器配置

要让51单片机的UART正常工作,需要配置两个关键寄存器:SCON(串口控制寄存器)和PCON(电源控制寄存器,主要影响波特率),同时还要计算定时器初值(UART的波特率通常由定时器1产生)。

1. SCON寄存器(串口控制寄存器)

SCON用于配置串口工作模式、允许接收、标记收发状态,核心配置步骤如下:

  • 将bit6(SM1)和bit7(SM0)清0后,再将bit6(SM1)置1:配置串口为"8位UART模式,波特率可变"(最常用的工作模式);

  • 将bit4(REN)置1:允许串口接收数据(若只需发送数据,可置0);

  • bit1(TI):发送中断标志位------8位数据发送完毕后,硬件自动置1,需用软件手动清0(否则无法继续发送下一组数据);

  • bit0(RI):接收中断标志位------8位数据接收完毕后,硬件自动置1,需用软件手动清0(否则无法继续接收下一组数据)。

2. PCON寄存器(电源控制寄存器)

PCON中与UART相关的主要是两个位,用于调整波特率:

  • bit7(SMOD):波特率倍增位------置1时,波特率翻倍;置0时,波特率为默认值;

  • bit6(SMOD0):模式选择辅助位------清0时,串口工作模式由SCON的SM0和SM1共同决定(默认配置)。

3. 波特率与定时器初值计算

51单片机的UART波特率(可变模式下)通常由定时器1(工作在8位自动重装模式)产生,核心公式为:

波特率 = (2^SMOD / 32) * (晶振频率 / (12 * (256 - 初值)))

其中:

  • SMOD为PCON寄存器的bit7,0或1;

  • 晶振频率:51单片机常用11.0592MHz(该频率能让波特率更精准,减少误差);

  • 12:51单片机的机器周期是12个时钟周期;

  • 256:定时器1工作在8位模式下的最大值,初值为定时器的初始计数 value。

示例:若晶振频率11.0592MHz,SMOD=1(波特率翻倍),要得到9600的波特率,代入公式可计算出定时器1的初值为0xFD(具体计算过程可借助在线波特率计算器简化)。

总结

UART作为51单片机最核心的通信接口,核心在于"异步、全双工、串行"的通信特性,而掌握"交叉接线""一致的通信参数""正确的寄存器配置"是实现稳定通信的关键。从概念到实操,重点要理清:通信方式、数据传输规则、校验机制、核心参数,再通过配置SCON和PCON寄存器、计算定时器初值,就能让UART正常工作。

相关推荐
清风6666661 天前
基于单片机与DAC0832的双路波形信号发生系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
azwsm1 天前
电路元器件和GPIO控制器
单片机·嵌入式硬件
kebidaixu1 天前
FreeRTOS 移植到 STM32F407VETX 记录(一)
stm32·单片机·嵌入式硬件
CSDN官方博客1 天前
「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令
嵌入式硬件·物联网·embedding
点灯小铭1 天前
基于单片机的数码管定时插座设计与定时开关功能实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
云栖梦泽1 天前
玩转RK3506SDK
linux·嵌入式硬件
数智工坊1 天前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
进击的小头1 天前
第8篇:IGBT 从零到精通:核心原理、关键参数、选型指南与工业级应用要点
经验分享·嵌入式硬件·学习
点灯小铭1 天前
基于单片机的多模式智能洗衣机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
项目題供诗1 天前
STM32-AD单通道&AD多通道(十九)
stm32·单片机·嵌入式硬件