欢迎光临
我们一直在努力

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 bit 低电平代表起始位
  • 发送 8 bit 数据位(先发送数据低位)
  • 发送 1 个 bit 校验位(低电平/高电平,奇校验或偶校验)
  • 发送 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:温度采集
    从机处理流程
  • 接收主机发过来的数据
  • 解析数据,获得功能码
  • 根据功能码完成对应的控制(数据位)
  • 向主机回复应答
  • 数据流向位

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

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

    赞(0)
    未经允许不得转载:171主机测评 » UART 通信协议
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址