51单片机(3)

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

UART 的全称是Universal Asynchronous Receiver Transmitter,即通用异步收发器,是一种硬件电路接口,也是一套独立的异步串行通信协议。

从通信特性来看,UART 有三个核心标签:

  • 异步通信:通信双方不需要时钟线同步,仅依靠约定的通信参数来保证数据传输的准确性。
  • 全双工通信:数据的发送和接收可以同时进行,互不干扰。
  • 串行通信:数据通过一根信号线逐位传输,区别于并行通信的多线同时传输。

简单来说,UART 就像嵌入式设备的 "串口信使",按照约定好的规则,完成设备与外界的数据收发。

二、UART 接线方式:记住 "交叉连接" 这个关键

UART 接口的硬件接线非常简洁,核心只有 4 根线,实际通信中常用 3 根(无需供电时可不用 VCC):

  1. VCC:接电源正极,为外部设备供电。
  2. GND:接地,保证通信双方共地,避免信号干扰。
  3. RXD:数据接收线,负责接收外部设备发送的数据。
  4. TXD:数据发送线,负责向外部设备发送数据。

⚠️ 关键注意事项 使用串口与外部设备通信时,必须遵循交叉连接原则:设备 A 的 TXD ↔ 设备 B 的 RXD设备 A 的 RXD ↔ 设备 B 的 TXD

如果接反了 TXD 和 RXD,两个设备就无法正常通信,这是串口调试中最常见的 "坑" 之一。

三、通信方式大比拼:单工、半双工与全双工

在讲解 UART 的全双工特性前,我们先理清三种通信方式的区别,这也是嵌入式通信的基础知识点。

通信方式 核心特点 数据线数量 数据传输方向
单工 发送方和接收方固定 1 根 单向,只能 A→B 或 B→A
半双工 双方可收发,但不能同时 1 根 双向,但同一时刻只能单向(A 发 B 收时,B 不能发 A 收)
全双工 双方可同时收发 2 根 双向,任意时刻可同时收发

UART 采用的就是全双工通信,通过 RXD 和 TXD 两根独立的数据线,实现数据的同时收发。比如单片机向串口助手发送数据的同时,也能接收串口助手下发的指令,这就是全双工的优势。

四、UART 数据发送顺序:低位先行,别搞反了

UART 传输数据时,遵循LSB 优先 原则,也就是低位先行 。我们以一个具体的字节数据为例:假设要发送的字节是0xA6,转换成二进制是 1 0 1 0 0 1 1 0,各位的位序号如下(MSB 是最高位,LSB 是最低位):

位序号 bit7(MSB) bit6 bit5 bit4 bit3 bit2 bit1 bit0(LSB)
发送数据 1 0 1 0 0 1 1 0
发送顺序 8 7 6 5 4 3 2 1

可以看到,发送顺序的第 1 位是 bit0(最低位),最后一位才是 bit7(最高位)。这个顺序是 UART 协议规定的,所有支持 UART 的设备都必须遵循,否则会出现数据解析错误。

五、串行 vs 并行:两种传输方式的优缺点对比

UART 属于串行通信,而串行通信和并行通信是嵌入式系统中两种主要的数据传输方式,二者的差异非常明显:

1. 串行通信

  • 传输方式:通过一根数据线,将多个 bit 按照先后次序逐位发送。
  • 优点:硬件成本低(只需少量数据线)、传输距离远、抗干扰性好。
  • 缺点:传输速率相对较慢。
  • 典型应用:UART、SPI、I2C 等。

2. 并行通信

  • 传输方式:通过多根数据线,将多个 bit 同时发送。
  • 优点:传输速率快,数据位可以并行传输。
  • 缺点:硬件成本高(需要多根数据线)、传输距离近(距离增加会导致信号偏移、电磁干扰加剧,出现数据误差)。
  • 典型应用:单片机的并行 IO 口扩展、内存条的数据传输等。

对于嵌入式设备的远距离、低成本通信需求,串行通信显然是更优的选择,这也是 UART 被广泛应用的原因。

六、UART 串口通信时序图:看懂数据传输的全过程

UART 的异步通信没有时钟线,那么收发双方如何判断数据的起始和结束?这就需要靠时序规则 来约束。一个完整的 UART 数据帧通常包含以下几个部分(以常见的8N1格式为例):

  1. 起始位:1 位低电平,标志着数据传输的开始。
  2. 数据位:5~9 位,最常用的是 8 位,承载实际的传输数据。
  3. 校验位:0~1 位,用于数据校验,可选奇校验、偶校验或无校验。
  4. 停止位:1 位、1.5 位或 2 位高电平,标志着一个数据帧的结束。

时序图的核心逻辑是:

  • 空闲状态下,串口数据线保持高电平。
  • 当发送数据时,首先拉低数据线产生 1 位起始位,通知接收方准备接收。
  • 随后发送数据位(低位先行),接着发送校验位(如果有)。
  • 最后拉高数据线产生停止位,结束本次传输。
  • 接收方通过检测起始位的下降沿,同步数据的接收节奏,按照约定的参数解析数据。

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

奇偶校验是 UART 的一种简单差错检测方式,目的是验证数据传输过程中是否发生错误。需要注意的是,奇偶校验无法判断偶数个 bit 出错的情况,只能检测奇数个 bit 的错误,属于一种 "轻量级" 的校验方式。

1. 奇校验(Odd)

校验位的取值规则:数据位中 1 的个数 + 校验位的 1,总个数为奇数 。举例:数据位是10100110(其中 1 的个数是 4),为了让总个数是奇数,校验位需要设为1(4+1=5,奇数)。

2. 偶校验(Even)

校验位的取值规则:数据位中 1 的个数 + 校验位的 0,总个数为偶数 。举例:同样的数据位10100110(1 的个数是 4),校验位设为0(4+0=4,偶数)即可满足要求。

3. 无校验(None)

不使用校验位,数据帧中只有起始位、数据位和停止位,是最常用的配置方式。

八、UART 通信参数:波特率、数据位、校验位、停止位

UART 通信的核心是双方参数必须完全一致 ,否则会出现乱码或无法通信。通信参数通常用 "波特率 数据位 校验位 停止位" 的格式表示,常见的配置有9600 8 N 12400 8 E 1115200 8 O 1

我们来拆解每个参数的含义:

  1. 波特率 :串口每秒传输的 bit 数量,是衡量传输速率的指标。常见的波特率有2400、4800、9600、115200等。波特率越高,传输速率越快,但传输距离会相应缩短,抗干扰性也会下降。比如 9600 波特率适合远距离通信,115200 波特率适合近距离高速传输。
  2. 数据位 :每个数据帧中承载实际数据的位数,常用的是8 位,也可以是 5、6、7 位。
  3. 校验位 :可选N(无校验)、E(偶校验)、O(奇校验)
  4. 停止位 :标志数据帧结束的位数,常用的是1 位,也可以是 1.5 位或 2 位。

九、同步通信 vs 异步通信:时钟线是关键区别

UART 是异步通信的代表,而同步通信和异步通信的核心差异,在于是否需要时钟线同步

  • 同步通信:通信双方通过一根时钟线(CLK)同步通信频率,发送方通过时钟信号控制数据的发送节奏,接收方根据时钟信号采样数据。优点是传输速率高、时序精准;缺点是需要额外的时钟线,硬件成本高。典型应用:SPI、I2C。
  • 异步通信:没有时钟线,收发双方通过约定的波特率来保证数据同步。优点是硬件接线简单;缺点是传输速率相对较低,且对波特率的一致性要求高。典型应用:UART。

十、UART 串口寄存器配置:以 51 单片机为例

在嵌入式编程中,配置 UART 需要操作对应的寄存器,这里以经典的 51 单片机为例,讲解核心寄存器的配置方法。

流程图

1. SCON 寄存器:串口控制寄存器

SCON 寄存器用于设置串口的工作模式、允许接收以及标识收发状态,核心配置步骤:

1、将SCON寄存器中的bit6和bit7清0

2、再将SCON寄存器中的bit6置1,代表串口工作在8位UART,波特率可变模式

3、将SCON寄存器中的REN位置1,代表允许串口接收数据

TI位(发送中断标志位), 用来查询8位数据是否发送完毕,发送完毕后会自动置1;必须用软件清0


RI 位(接收中断标志位),用来查询8位数据是否接收完毕,接收完毕后会自动置1;必须用软件清0

2. PCON 寄存器:电源控制寄存器

PCON 寄存器中的 SMOD 位,是波特率加倍控制位:

  • 当 SMOD 位置 1 时,串口波特率翻倍
  • 当 SMOD0 位清 0 时,串口的工作模式由 SCON 寄存器的 SM0 和 SM1 两位共同指定。

3. 波特率的产生:依赖定时器的初值计算

51 单片机的 UART 波特率,通常由定时器 1 的 8 位自动重装模式产生。波特率的计算公式与定时器初值直接相关,公式如下:SMOD:PCON 寄存器中的波特率加倍位,取值为 0 或 1**;fosc** ​是晶振频率;bps:目标波特率。

4、TCON与IE寄存器

十一、主机与从机:谁是通信的 "主导者"

在多设备串口通信系统中,设备分为主机从机两种角色:

  • 主机:拥有对通信的绝对控制权,通信由主机主动发起。主机可以向从机下发指令、查询数据,主导整个通信流程。
  • 从机:不能主动发起通信,只能根据主机的指令完成相应的控制操作,并向主机回复应答数据。

比如在一个 "单片机 + 传感器" 的串口系统中,单片机是主机,传感器是从机:单片机主动发送查询指令,传感器接收到指令后,才会向单片机返回采集到的数据。

十二、Modbus 协议的数据格式:UART 上的 "应用层协议"

UART 只是物理层和数据链路层的通信协议,而 Modbus 是基于 UART 的应用层协议 ,广泛应用于工业控制领域。Modbus 协议有两种常用模式:Modbus RTUModbus ASCII,其中 Modbus RTU 更常用。

Modbus RTU 的数据帧格式如下:地址码(1字节) + 功能码(1字节) + 数据域(N字节) + CRC校验码(2字节)

  • 地址码:标识从机地址,主机通过地址码指定通信的从机,只有地址匹配的从机才会响应。
  • 功能码:表示要执行的操作,比如 03H 是读取保持寄存器,06H 是写入单个寄存器。
  • 数据域:包含具体的操作参数,比如寄存器地址、寄存器数量、写入的数据等。
  • CRC 校验码:2 字节的循环冗余校验,比奇偶校验的纠错能力更强,保证数据传输的可靠性。

Modbus 协议的优势在于标准化、通用性强,不同厂家的设备只要支持 Modbus RTU,就能通过 UART 接口互联互通。

相关推荐
范纹杉想快点毕业2 小时前
C语言100个经典编程练习题(完整标题+清晰排版)
运维·c语言·单片机·嵌入式硬件·算法
小尧嵌入式2 小时前
【基础学习七十】ffmpeg命令
c++·stm32·嵌入式硬件·ffmpeg
北京盟通科技官方账号2 小时前
Windows 平台 EtherCAT 实时控制:从抖动抑制到虚拟化架构解析
stm32·单片机·嵌入式硬件
EVERSPIN2 小时前
高性能32位MCU微控制器数字电源参考方案
单片机·嵌入式硬件·mcu微控制器·32位微控制器·32位mcu、
代码游侠3 小时前
学习笔记——DS18B20 温度传感器
笔记·单片机·嵌入式硬件·学习·51单片机
foundbug9993 小时前
基于STM32F103单片机实现汽车OBD诊断仪的开发方案
stm32·单片机·汽车
一枝小雨3 小时前
【OTA专题】 20 上电立即跳转:加快MCU启动速度
stm32·单片机·嵌入式·ota·bootloader·加速启动
VekiSon3 小时前
51单片机——DS18B20 温度传感器
单片机·嵌入式硬件·51单片机
chao1898443 小时前
基于51单片机的红外遥控器实现方案
单片机·嵌入式硬件·51单片机