51单片机(三)串口通信(UART)、Modbus协议

1. 什么是UART?

UART,全称是 Universal Asynchronous Receiver/Transmitter,即通用异步收发器。它是一种广泛应用于嵌入式系统中的串行、异步、全双工通信协议。

简单来说,UART 允许两个设备之间通过一根发送线(TXD)和一根接收线(RXD)进行数据交换。它不需要时钟信号,通信双方通过约定相同的波特率来同步数据传输的节奏。

UART 的核心作用是将要传输的数据在并行串行形式之间进行转换。在设备内部,数据通常是并行处理的(如8位或16位),而UART会将这些并行数据逐位(bit-by-bit)地通过一根线发送出去,接收端再将串行数据还原为并行数据。

2. UART传输数据顺序

UART在传输一个字节的数据时,遵循 LSB(Least Significant Bit,最低有效位)先行 的原则。

例如,要发送数据 0xF6(二进制为 1111 0110),其传输顺序如下:

  1. 起始位:先发送一个低电平(逻辑0),表示数据传输开始。
  2. 数据位 :从最低位(LSB)开始发送,即先发送 0,然后是 1101111(MSB)。
  3. 校验位(可选):根据校验方式发送奇偶校验位。
  4. 停止位:发送一个或多个高电平(逻辑1),表示数据传输结束。

所以,在信号线上看到的比特流顺序是:起始位(0) -> LSB(0) -> 1 -> 1 -> 0 -> 1 -> 1 -> 1 -> 1(MSB) -> 校验位 -> 停止位(1)

3. 单工、半双工、全双工特点

根据数据传输的方向和方式,通信方式可以分为以下三种:

3.1 单工通信

  • 特点:数据传输是单向的。发送方和接收方是固定的,一方只能发送,另一方只能接收。
  • 信号线:只需要一根数据线。
  • 例子:广播、电视信号。

3.2 半双工通信

  • 特点:通信双方都可以发送和接收数据,但不能同时进行。在同一时刻,数据只能沿一个方向传输。
  • 信号线:只需要一根数据线。
  • 例子:对讲机、I2C总线。

3.3 全双工通信

  • 特点:通信双方可以同时发送和接收数据,互不干扰。
  • 信号线:需要两根独立的数据线(如TXD和RXD)。
  • 例子:UART串口通信、电话。

4. 什么是串行、并行及特点

数据传输的形式主要分为串行传输和并行传输。

4.1 串行传输

  • 定义:使用一根信号线,按照先后次序,逐位(bit-by-bit)地发送数据。
  • 特点
    • 传输速率慢:相对于并行,单位时间内传输的数据量较少。
    • 硬件成本低:只需要一根或两根线,引脚少,布线简单。
    • 传输距离远:抗干扰能力强,适合长距离通信(如RS485可达1200米)。
    • 实现简单:协议相对简单。

4.2 并行传输

  • 定义:使用多根信号线,在同一时刻同时传输多个比特的数据(如8位、16位)。
  • 特点
    • 传输速率快:单位时间内能传输大量数据。
    • 硬件成本高:需要多根数据线,占用更多引脚,布线复杂。
    • 传输距离近:线间干扰大,抗干扰能力差,不适合长距离传输(通常在30米以内)。
    • 实现复杂:需要精确同步多根线上的信号。

5. 串口通信时序

串口通信的时序是理解其工作原理的关键。一个完整的数据帧(通常为10位或11位)的传输时序如下:

串口通信时序:

  1. 先发送一个bit的低电平,代表起始位
  2. 再发送8个bit的数据位(先发送数据低位,再发送高位)
  3. 发送一个bit的校验位(奇偶校验 高电平 奇校验 低电平 偶校验)
  4. 发送一个bit的电平,代表停止位,表示串口通信结束
  1. 空闲位:当没有数据传输时,数据线保持高电平(逻辑1)。
  2. 起始位:发送方将数据线拉低(逻辑0),持续一个比特的时间。这告诉接收方,数据即将开始。
  3. 数据位 :紧接着起始位,发送8位(或5-9位)的数据。顺序是LSB先行
  4. 校验位(可选):在数据位之后,可以发送一个校验位用于简单的错误检测。
  5. 停止位:最后,发送方将数据线拉高(逻辑1),持续1、1.5或2个比特的时间。这表示一帧数据传输结束。

6. 奇校验和偶校验?有什么缺点?

奇偶校验是一种简单的错误检测方法,通过在数据帧中添加一个校验位来实现。

6.1 奇校验

  • 规则 :确保数据位中"1"的个数加上校验位"1"的个数,总和为奇数
  • 例子 :要发送数据 0110 0000(其中有2个1,偶数个)。为了满足奇校验,校验位应为 1,使得总共有3个1(奇数)。如果接收方计算出的1的个数是偶数,则说明传输过程中可能发生了错误。

6.2 偶校验

  • 规则 :确保数据位中"1"的个数加上校验位"1"的个数,总和为偶数
  • 例子 :要发送数据 0110 0000(其中有2个1,偶数个)。为了满足偶校验,校验位应为 0,使得总共有2个1(偶数)。

6.3 缺点

奇偶校验的主要缺点是无法检测出偶数个比特位同时出错的情况

  • 例如,在奇校验中,如果数据 0110 0000(2个1)加上校验位 1,总共有3个1(奇数)。如果在传输过程中,有两个比特位发生翻转,变成了 0100 0001(仍然是2个1),加上校验位 1,总共有3个1(奇数),校验仍然通过,但数据已经错误。
  • 因此,奇偶校验只能检测出奇数个比特的错误,可靠性有限,适用于对错误容忍度较高的场景。

7. 串口通信参数

要使两个设备通过UART成功通信,它们必须配置相同的通信参数。这些参数通常以"波特率-数据位-校验位-停止位"的格式表示,例如 9600 8 N 1

  • 波特率:表示每秒传输的比特数(bps)。常见的波特率有 2400、4800、9600、115200 等。通信双方的波特率必须一致。
  • 数据位:表示一帧数据中实际数据的位数。常见的是8位,也可以是5、6、7位。
  • 校验位N(None,无校验)、O(Odd,奇校验)、E(Even,偶校验)。
  • 停止位:表示一帧数据结束的标志位,可以是1、1.5或2位。

8. 同步和异步

这是通信中两个重要的概念,用于区分通信双方如何协调数据传输的节奏。

8.1 同步通信

  • 特点 :发送方和接收方通过一根专门的时钟线(SCL) 来同步数据传输。时钟信号决定了何时读取数据线上的电平状态。
  • 优点:传输速率高,协议效率高。
  • 缺点:需要额外的时钟线,硬件连接稍复杂。
  • 例子:I2C、SPI。

8.2 异步通信

  • 特点 :通信双方没有专门的时钟线。它们通过约定相同的波特率来同步数据传输的速率。每个数据帧都包含起始位和停止位,用于标识数据的开始和结束。
  • 优点:只需要数据线,硬件连接简单,成本低。
  • 缺点:每个数据帧需要额外的起始位和停止位,传输效率略低。
  • 例子:UART。

9. TTL、RS232、RS485

这三种是串口通信中常见的电气标准,它们定义了信号的电平标准,决定了通信的距离和抗干扰能力。

9.1 TTL电平

  • 电平标准:高电平(逻辑1)为 3.3V 或 5V,低电平(逻辑0)为 0V。
  • 特点:电平与单片机等数字芯片直接兼容,无需转换。但传输距离短(通常几米以内),抗干扰能力弱。
  • 常见芯片:CH340(用于USB转TTL)。

9.2 RS232电平

  • 电平标准:逻辑1 为 -3V 到 -15V,逻辑0 为 +3V 到 +15V。这是一种负逻辑。
  • 特点:传输距离比TTL远(可达15米左右),抗干扰能力更强。但电平与TTL不兼容,需要电平转换芯片(如MAX232)。
  • 应用:早期的电脑串口(DB9接口)。

9.3 RS485电平

  • 电平标准:采用差分信号传输。逻辑1 为两根线之间的电压差为 +2V 到 +6V,逻辑0 为 -2V 到 -6V。
  • 特点:抗干扰能力极强,传输距离非常远(可达1200米以上),支持多点通信(可挂载多个设备)。
  • 应用:工业控制、远距离数据采集。

10. Modbus协议格式

Modbus是一种广泛应用于工业电子设备中的通信协议,它建立在物理层(如RS232、RS485)之上,定义了设备之间请求和应答的数据格式。这里以Modbus RTU模式为例,介绍其报文格式。

一个典型的Modbus RTU报文帧结构如下:

起始码 地址码 功能码 数据位 校验码 结束码
0xAA 0x01 0x01 0x00 0x42 0xEE 0xBB
  • 起始码:标志一帧报文的开始。
  • 地址码:目标从机设备的地址(1-247)。
  • 功能码 :告诉从机要执行什么操作。例如:
    • 0x01:控制LED灯
    • 0x02:控制数码管
    • 0x03:控制蜂鸣器
    • 0x04:读取传感器温度
  • 数据位:功能码所需的参数,如控制指令、数据地址等。
  • 校验码:用于错误检测,Modbus RTU通常使用CRC校验。
  • 结束码:标志一帧报文的结束。

主从应答模式:在Modbus网络中,主机(如PC或PLC)发起所有通信。从机(如单片机)收到主机指令后,解析指令并执行相应操作,然后回复一个应答帧给主机。应答帧的功能码最高位通常置1,以区分是主机请求还是从机应答。

例如,主机发送指令 0xAA 0x01 0x01 0x00 0x42 0xEE 0xBB 控制地址为 0x01 的从机点亮LED。从机成功执行后,会回复一个应答帧,如 0xAA 0x01 0x81 0x00 0x42 0x6E 0xBB,其中功能码 0x81 的最高位为1,表示这是从机的应答。

相关推荐
深圳市元恩微科技开发有限公司9 小时前
兆讯恒达(北京兆讯)MH2457 系列 国产屏驱 MCU
单片机
沸速存储9 小时前
AI 机器人靠哪些内存与存储驱动整机运行?
服务器·科技·嵌入式硬件·电脑
深圳市恒锐丰科技杨生9 小时前
EG6288 220V 三相独立半桥栅极驱动芯片|屹晶 EGmicro
嵌入式硬件·硬件工程
Brilliantwxx10 小时前
【STM32】 I2C_EEPROM_test 工程(实战篇)
开发语言·stm32·单片机·嵌入式硬件·ecmascript
en.en..10 小时前
UDP套接字编程完整标准流程(服务端+客户端)
单片机·嵌入式硬件
斑马13910 小时前
单片机学习笔记(一)——STC89C52的GPIO、LED、数码管、定时器和中断
单片机·stc89c52
安河桥。11 小时前
SOME/IP 技术说明文档
嵌入式硬件·车载系统·信息与通信
Kuakewei88811 小时前
Type-C快充取电芯片产品介绍:PD与QC双协议取电
嵌入式硬件
开发笔记-阿牛11 小时前
做工业报警器语音提示,CK6159A 为什么更合适?
人工智能·stm32·单片机·嵌入式硬件·音频
susplus12 小时前
【传感器DS18B20】51单片机上实现温度采集
c语言·51单片机·ds18b20·温度采集