嵌入式常见通信协议学习——UART

UART(通用异步收发器)

UART((Universal Asynchronous Receiver Transmitter)是一种通用的串行、异步 通信总线,它有两条数据线(TX、RX),可以实现全双工的发送和接收。

复习下常见概念:

  1. 串行通信 :只用 1 根数据线,数据按依次排队,逐位顺序发送、逐位接收。

  2. 并行通信 :多根数据线并行,多位 数据(如 8 位、16 位)同一时刻同时传输。

  3. 异步通信无公共时钟线,收发双方使用各自独立时钟,依靠协议约定(起始位、停止位、校验位)实现数据对齐。

  4. 同步通信 :通信双方共用同一根时钟线(CLK) ,所有数据收发严格跟随统一时钟节拍。

  5. 单工通信单向永久固定通信,一端只能发送,一端只能接收,无法反向。

  6. 半双工通信 :支持双向传输 ,但同一时刻只能单独发或单独收,收发不能同时进行,需要切换方向。

  7. 全双工通信收发通道完全独立,发送和接收可以同时进行 ,互不占用、互不阻塞。

  8. 波特率:每秒传输码元(通信线路上一次信号变化的波形/电平组合,是信号的最小单位。)的数量。

  9. 比特率 :每秒传输二进制比特 (0/1) 的数量,代表真实数据速度。

    N:一个码原能够表示的状态数,例如:对于UART、RS232串口,1个码原只能表示高低电平两种状态,则N=2,比特率=波特率。

UART帧格式

  1. 串口可以发送5-8位,可以是5、6、7、8位(最多8位),先发低位再发高位
  2. 校验位:分为奇校验、偶校验和无校验三种模式。数数据位中有多少个1,如果是偶校验,数据位中有偶数个1,则校验位为0,反之为1;如果是奇校验,数据位中有奇数个1,则校验位为0,反之为1。简单来讲,偶校验凑偶数个 1,奇校验凑奇数个 1。

举个例子来理解一下UART的数据发送,从设备A端发送0x55(01010101)到设备B端,校验位选择偶校验,则波形如下:

有没有想过为什么UART串口一次最多只能发送8位数据?

首先,前面我们说到,UART串口是异步通信的,异步通信没有统一时钟,收发双方的时钟频率存在微小偏差。每传输一位,误差就会累积一点。如果帧太长(比如超过 8 位),到帧末尾时,接收端的采样点可能已经偏移到下一个比特的电平区间,导致采样错误、数据乱码。其次,计算机最小能寻址单位是1字节(8位),发送8位数据方便CPU处理,不需要额外的拆分或拼接。此外,8 位数据位能覆盖 ASCII 字符集(0~127),满足绝大多数文本通信需求,同时也能传输二进制数据。

那为什么UART串口一次最少要发送5位数据?

早期电传打字机使用 5 位编码(Baudot 码)来表示字母、数字和控制字符,刚好能覆盖当时的通信需求。UART 协议为了兼容这些老式设备,保留了5 位数据位的最小配置。此外,如果数据位少于 5 位,加上起始位、停止位后,整帧长度过短,接收端很难可靠地识别起始位和停止位,容易被噪声干扰误判为有效帧,导致通信不稳定。

UART硬件连接

注意TXD与RXD连接,否则无法进行通信。

数据转换

如何将二进制转换成可读的文本信息呢?

将二进制数据还原成字节流(1字节=8位二进制),按照约定的字符编码规则把字节映射成字符。常见编码表有:

以ASSCII编码规则为例:如果发送端依次发送了0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64,将这几个字节转换成十进制:72,101,108,108,111,32,87,114,108,100,这些十进制在ASCII码表中对应的是:72(H),101(e),108(l),108(l),111(o),32(空格),87(W),111(o),114®,108(l),100(d),即:Hello World。

相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘12 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
牛根生同志12 天前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
goldenrolan12 天前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
ScilogyHunter12 天前
Zephyr串口驱动开发及构建完全指南
驱动开发·uart·zephyr
CC城子13 天前
STM32H7_FDCAN 驱动笔记
stm32·can·canfd
意法半导体STM3213 天前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发
雾削木13 天前
B语言经典教程现代化重构
java·前端·stm32·单片机·嵌入式硬件
Digitally13 天前
如何快速将文件从电脑传输到平板电脑
stm32·嵌入式硬件·电脑
项目題供诗13 天前
STM32-USART串口协议(二十二)
stm32·单片机·嵌入式硬件
欢乐熊嵌入式编程13 天前
选型避坑:ESP32 vs STM32+模组 vs NB-IoT,不同场景怎么选
stm32·单片机·嵌入式硬件·物联网·esp32·嵌入式iot