UART 通信协议

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. 串口通信时序

  1. 空闲状态为高电平
  2. 发送 1 bit 低电平代表起始位
  3. 发送 8 bit 数据位(先发送数据低位)
  4. 发送 1 个 bit 校验位(低电平/高电平,奇校验或偶校验)
  5. 发送 1 个 bit 高电平代表停止位

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 报文格式

起始位 地址码 功能码 数据 1 数据 2 校验位 结束位
0xAA 0xBB 0x01 0x00 0x42 累加和校验 0xEE
功能码定义(示例)
  • 0x01:控制 LED 灯
  • 0x02:数码管显示
  • 0x03:蜂鸣器控制
  • 0x04:温度采集
从机处理流程
  1. 接收主机发过来的数据
  2. 解析数据,获得功能码
  3. 根据功能码完成对应的控制(数据位)
  4. 向主机回复应答

数据流向位

  • 主机到从机:功能码 0x01(0000 0001),数据流向位为 0
  • 从机到主机:功能码 0x81(1000 0001),数据流向位为 1

数据流向位含义:0 表示数据从主机到从机,1 表示数据从从机到主机。

相关推荐
沐欣工作室_lvyiyi2 小时前
矿井安全监测系统设计(论文+源码)
单片机·无线通信·云平台·物联网毕业设计·矿井安全监测系统·机智云
ZLG_zhiyuan2 小时前
低空测试“升维”:ZUS系列示波器如何破解复杂信号的“测与析”难点?
单片机·嵌入式硬件
..Dauntless..3 小时前
【stm32】GPIO(下篇)——统一编址、源码理解和输入模式
stm32·单片机·嵌入式硬件
youyou-06063 小时前
AUTOSAR‑COM 常见问题 QA (1)
java·linux·服务器·单片机·汽车
白搞电子5 小时前
ESP-Mosaico 桌宠为什么会误睡?AS312 PIR 原理、休眠逻辑与排错方法
单片机·嵌入式硬件·动画
youcans_5 小时前
【嵌入式软件AI编程】08. 第一个STM32工程
stm32·单片机·ai编程·嵌入式软件·claude code
崇山峻岭之间7 小时前
HC32F460PETB的PH2的TIM4_2_CLK
单片机
Brilliantwxx7 小时前
【STM32】 I2C协议和设备主从( 图解 + 面试题 )
stm32·单片机·嵌入式硬件·架构
老当益壮梁奶奶7 小时前
51单片机中断系统详解
c语言·单片机·嵌入式硬件·学习·51单片机