关于串口的解释1

IT疑难杂症诊疗室 10w+人浏览 3.3k人参与

程序写好后配合串口助手发送

一、通信接口的本质:为什么要 “通信”?

核心目的:把数据从一个设备传到另一个设备,以此扩展硬件系统的能力。比如:单片机要读传感器的数值、电脑要传文件给 U 盘、汽车 ECU 之间交换数据,都需要通信。

而通信不是 “乱传数据”,必须遵守通信协议—— 它就是设备间约定好的 “规则手册”,规定了:

  • 数据怎么打包
  • 用什么线传输
  • 怎么同步收发节奏
  • 怎么判断数据对错

只有双方都遵守同一套规则,数据才能被正确识别。

二、传输模式:单工、半双工、全双工,到底差在哪?

这是通信最基础的分类,决定了设备间 “对话方式”:

表格

模式

定义

生活类比

通信例子

单工

数据只能从 A 传到 B,永远不能反向

广播电台,只能听不能说

老式遥控器发信号给电视

半双工

数据可以双向传,但同一时间只能单方向传

对讲机,你说的时候我不能说

I2C、CAN、USB

全双工

数据可以同时双向传,收发互不干扰

打电话,你说我也能同时说

USART、SPI

三、五大通信接口:从原理到场景,逐个拆解

1. USART(通用同步 / 异步收发器,也就是常说的串口)

  • 引脚:TX(发)、RX(收)
  • 双工模式全双工原理:TX 和 RX 是两根独立的线,一根专门发、一根专门收,所以可以同时双向传数据。
  • 时钟同步方式异步通信原理:通信双方没有共享时钟线,靠提前约定的 “波特率”(比如 9600、115200)来同步。双方都按这个固定频率采样信号,所以不需要额外的时钟线。
  • 电平:单端信号,用单一电压表示高低电平(比如 TTL 电平:高 = 3.3V/5V,低 = 0V)
  • 典型场景:点对点通信,比如单片机和电脑串口助手、单片机和蓝牙模块、传感器的串口通信。

补充:串口接线规则拆解

  • 双向通信必须TX 与 RX 交叉连接:设备 A 的 TX 接设备 B 的 RX,设备 A 的 RX 接设备 B 的 TX,不然数据发过去没人收。
  • 单向通信只接一根线就行,比如只传数据,不需要回传。
  • 电平不兼容时(比如单片机 TTL 3.3V 和电脑 RS232 电平),必须加电平转换芯片(比如 CH340、MAX232),不然信号会被损坏。

2. I2C(集成电路间总线)

  • 引脚:SCL(时钟线)、SDA(数据线)
  • 双工模式半双工原理:SDA 是一根双向的线,设备要么发要么收,同一时间只能做一件事,所以不能同时双向传。
  • 时钟同步方式同步通信原理:主机通过 SCL 线发送固定频率的时钟信号,从机跟着时钟节奏采样 SDA 上的数据,完全依赖时钟同步。
  • 电平:单端信号,且必须配合外部上拉电阻,采用开漏输出模式。
  • 典型场景:多设备总线通信,比如一个单片机挂多个传感器(温度、加速度、EEPROM),都可以共用 SCL 和 SDA 两根线。

3. SPI(串行外设接口)

  • 引脚:SCLK(时钟线)、MOSI(主机发、从机收)、MISO(主机收、从机发)、CS(片选线)
  • 双工模式全双工原理:MOSI 和 MISO 是两根独立的数据线,主机可以同时发和收数据,所以是全双工。
  • 时钟同步方式同步通信原理:主机通过 SCLK 发送时钟信号,数据跟着时钟节拍传输,收发双方完全同步。
  • 电平:单端信号,一般为 TTL 电平。
  • 典型场景:高速外设通信,比如单片机和 Flash 存储芯片、ADC、显示屏,速度快、协议简单。

4. CAN(控制器局域网)

  • 引脚:CAN_H、CAN_L(差分信号对)
  • 双工模式半双工原理:同一时间总线只能被一个设备占用,所以只能单向传输。
  • 时钟同步方式异步通信原理:靠约定波特率同步,同时自带仲裁机制,多个设备抢总线时能自动判断优先级。
  • 电平:差分信号,靠 CAN_H 和 CAN_L 之间的电压差表示逻辑状态(比如高电平差大,低电平差小)。优势:抗干扰能力极强,适合电磁环境复杂的场景。
  • 典型场景:汽车电子、工业控制,比如汽车里的发动机 ECU、ABS、车身控制模块,都通过 CAN 总线通信。

5. USB(通用串行总线)

  • 引脚:DP(数据正)、DM(数据负,差分信号对)
  • 双工模式半双工原理:同一时间只能单向传输数据,靠主机控制传输方向。
  • 时钟同步方式异步通信原理:靠差分信号编码同步,同时协议里自带同步字段。
  • 电平:差分信号,抗干扰能力强,传输距离比普通串口远。
  • 典型场景:主机和外设的连接,比如电脑和 U 盘、鼠标、打印机,还有手机充电和数据传输。

四、核心区别总结(一张表看清)

表格

接口

引脚数

双工模式

同步方式

电平类型

典型场景

USART

2

全双工

异步

单端

点对点、中低速

I2C

2

半双工

同步

单端(需上拉)

多设备、低速

SPI

4

全双工

同步

单端

高速外设

CAN

2

半双工

异步

差分

汽车 / 工业、抗干扰

USB

2

半双工

异步

差分

电脑外设、中高速

硬件协议规定:一个设备使用tx发送高低电平,另一个设备是用rx接收高级电平,在线路中使用TTL电平因为stm32是3.3V,如果线路对地是3.3V,就代表发送逻辑1,如果对地是0V,就代表发送0。

串口参数及时序解析

串口通信是一种异步串行通信协议,其数据传输需遵循严格的帧格式与时序约定,核心参数与帧结构如下:

一、核心参数定义

1. 波特率(Baud Rate)

波特率是串口通信的速率指标,定义为单位时间内传输的码元(Symbol)数量,单位为波特(Baud)。码元是承载数据的基本信号单元,其携带的比特数由调制方式决定。在标准二进制串口通信中,1 个码元对应 1 个二进制位(bit),因此波特率与比特率数值相等(单位为 bit/s),常见波特率包括 9600、115200 等。波特率是收发双方时序同步的基础,双方必须约定相同波特率,才能实现正确采样与数据解析。

2. 数据帧组成单元

(1)起始位(Start Bit)
  • 定义:标志单个数据帧传输的开始,是数据帧的第一个单元。
  • 特性:固定为低电平(逻辑 0)。
  • 功能:通过产生下降沿,通知接收端启动数据采样流程,是异步通信中实现帧同步的关键。
(2)数据位(Data Bits)
  • 定义:数据帧的有效载荷部分,承载待传输的二进制数据,标准配置为 8 位,扩展模式支持 9 位。
  • 表示:逻辑 1 对应高电平,逻辑 0 对应低电平。
  • 传输顺序:遵循低位先行(LSB First)规则,即数据字节的最低位(D0)最先发送,最高位(D7)最后发送。例如传输数据0x0F(二进制00001111)时,发送序列为11110000
(3)校验位(Parity Bit)
  • 定义:可选的纠错校验单元,用于检测传输过程中发生的比特错误。
  • 生成方式:由数据位通过奇偶校验规则计算得出,可配置为奇校验、偶校验或无校验。
  • 功能:为接收端提供数据完整性验证依据,提升通信可靠性。
(4)停止位(Stop Bit)
  • 定义:标志单个数据帧传输的结束,是数据帧的最后一个单元。
  • 特性:固定为高电平(逻辑 1),支持 1 位或 2 位配置。
  • 功能:为接收端预留数据处理与帧间隔时间,同时将总线恢复至高电平空闲状态,为下一个数据帧的传输做准备。

二、串口数据帧格式解析

标准串口数据帧为异步串行结构,总线空闲状态下始终保持高电平。当无数据传输时,通信引脚维持高电平;传输数据时,需将数据按协议封装为帧格式,再通过引脚串行输出。

1. 基础帧格式(无校验位,10 位帧)

帧长度为 10 位,由以下单元按顺序组成:起始位(1位低电平) + 数据位(8位,低位先行) + 停止位(1位高电平)该格式为最常用配置,适用于大多数嵌入式串口通信场景,对应图中左侧 “1 帧共 10 位” 的结构。

2. 扩展帧格式(含校验位,11 位帧)

帧长度为 11 位,在基础格式中增加 1 位校验位,结构为:起始位(1位低电平) + 数据位(8位,低位先行) + 校验位(1位) + 停止位(1位高电平)对应图中右侧 “1 帧共 11 位” 的结构,通过校验位提升数据传输的可靠性,适用于工业控制等对稳定性要求较高的场景。

三、串口通信时序与传输机制

  1. 总线空闲状态:无数据传输时,串口发送端(TX)与接收端(RX)引脚始终保持高电平,维持稳定的空闲状态。
  2. 传输启动流程:发送端发送数据前,先拉低 TX 引脚电平,产生起始位下降沿,通知接收端准备接收数据;随后按约定波特率,依次输出数据位、校验位(可选)与停止位。
  3. 接收采样机制:接收端(RX)检测到起始位下降沿后,按约定波特率对引脚电平进行定时采样,依次解析数据位、校验位(可选),并通过停止位判断帧传输结束。
  4. 数据传输完成:停止位发送后,TX 引脚恢复高电平,总线回到空闲状态,等待下一个数据帧的传输。

四、数据表示模式说明

串口数据传输后,接收端的数据解析与显示存在两种常见模式:

  • HEX 模式:直接以十六进制形式显示数据位对应的数值,反映数据本身的二进制编码。
  • 文本模式:将数据位对应的字节值映射为 ASCII 编码字符并显示,需通过字符映射表解析数据含义。

五、关键补充说明

  1. 异步通信的核心依赖于波特率的一致性与帧格式的约定,收发双方需配置相同的波特率、数据位长度、校验位类型与停止位长度,否则将导致数据解析错误。
  2. 低位先行(LSB First)的传输顺序是串口通信的固定规则,需与数据处理逻辑匹配,避免字节高低位颠倒。
  3. 校验位为可选配置,无校验模式下数据帧长度缩短,传输效率提升,但数据错误检测能力降低,需根据应用场景选择配置。

USART简介

USART(Universal Synchronous/Asynchronous Receiver/Transmitter) 通用同步/异步收发器 USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里 自带波特率发生器,最高达4.5Mbits/s 可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2) 可选校验位(无校验/奇校验/偶校验) 支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN STM32F103C8T6 USART资源:USART1、 USART2、 USART3

USART基本结构

六、USART 硬件架构与收发机制解析

该框图展示了通用同步 / 异步收发器(USART)的硬件内部结构,其核心为全双工收发双通路设计,以波特率发生器为时序基准,通过寄存器、控制器与 GPIO 复用逻辑实现异步串行通信的自动化处理,各模块功能与工作机制如下:

一、波特率发生器:时序同步核心

波特率发生器是 USART 模块的时序控制核心,其输入时钟为 APB 总线时钟(PCLK2/PCLK1,对应不同 USART 外设的总线挂载时钟),通过可编程分频逻辑生成与通信双方约定一致的波特率时钟。该时钟分别输出至发送控制器与接收控制器,为数据移位提供统一的节拍基准,确保收发双方的时序同步,是异步通信可靠传输的基础。

二、发送通路:数据帧的生成与输出

发送通路由发送控制器、发送数据寄存器(TDR)、发送移位寄存器与复用 GPIO 组成,实现并行数据到串行帧波形的转换:

  1. 数据写入与缓存:软件将待发送的并行数据写入发送数据寄存器(TDR),该寄存器为 CPU 可直接访问的接口。
  2. 数据加载与移位输出:发送控制器在波特率时钟的驱动下,将 TDR 中的并行数据加载至发送移位寄存器;移位寄存器遵循低位先行(LSB-first)的传输规则,按位右移输出数据,同时自动生成符合 USART 协议的帧格式(起始位、数据位、校验位、停止位)。
  3. 波形输出:移位输出的串行波形经复用 GPIO 引脚输出至 TX 引脚,形成标准串口通信信号。
  4. 状态反馈机制:当 TDR 中的数据被加载至移位寄存器后,TDR 为空,硬件自动置位发送数据寄存器空标志(TXE)。该标志可通过状态寄存器轮询读取,也可触发发送完成中断,通知 CPU 写入下一个待发送数据,实现连续传输。

三、接收通路:串行数据的采样与解析

接收通路与发送通路相互独立,由接收控制器、接收移位寄存器、接收数据寄存器(RDR)与复用 GPIO 组成,实现串行帧波形到并行数据的解析:

  1. 波形输入与采样:外部设备发送的串行帧波形通过 RX 引脚输入,经复用 GPIO 进入接收移位寄存器;接收控制器在波特率时钟的同步控制下,对输入波形进行逐位采样。
  2. 数据移位与拼接:移位寄存器遵循低位先行的规则,将采样得到的串行数据逐位移入,完成一帧数据的接收后,硬件将移位寄存器中的数据拼接为并行格式,加载至接收数据寄存器(RDR)。
  3. 状态反馈机制:数据加载完成后,硬件自动置位接收数据寄存器非空标志(RXNE)。该标志可通过状态寄存器轮询读取,也可触发接收完成中断,通知 CPU 及时读取 RDR 中的数据,避免数据溢出丢失。

四、数据寄存器复用机制

软件层面上,发送数据寄存器(TDR)与接收数据寄存器(RDR)采用地址复用设计,统一映射为数据寄存器(DR)。其中,对 DR 的写操作访问 TDR,触发数据发送流程;对 DR 的读操作访问 RDR,获取接收数据。该复用设计简化了软件编程接口,实现了同一地址下的收发数据分离。

五、外设使能控制

框图右下角的 “开关控制” 对应 USART 外设的使能逻辑,通过配置控制寄存器中的 USART 使能位实现。在完成波特率配置、帧格式设置、GPIO 复用初始化等基础配置后,软件置位该使能位,即可启动 USART 模块的收发功能,开始串行通信。

整体工作流程总结

USART 的收发过程以波特率发生器提供的时序为基准:发送时,CPU 写入 TDR 的数据经移位寄存器转换为串行帧波形输出至 TX 引脚;接收时,RX 引脚的波形经移位采样拼接为并行数据存入 RDR,状态标志位与中断机制保障了数据传输的连续性与可靠性,实现了异步串行通信的自动化处理。

时钟分频 = 采样频率 = 16倍的波特率

波特率发生器发送器和接收器的波特率由波特率寄存器 BRR 里的 DIV 确定

计算公式:波特率=

(USART)DR 寄存器的关键特性

双向功能:

发送时:向 DR 寄存器写入数据,触发数据从 TX 引脚发送。

接收时:从 DR 寄存器读取接收到的数据(来自 RX 引脚)。

硬件自动处理:

发送流程:数据写入 DR 后,硬件自动将其移入发送移位寄存器,按位从 TX 引脚输出。

接收流程:RX 引脚接收到的数据先存入接收移位寄存器,按位组装完成后自动复制到 DR 寄存器。

与标志位的关联:

TXE 标志(发送缓冲区空):当 DR 寄存器中的数据被移入发送移位寄存器后,TXE 置位,表示可以写入新数据。

RXNE 标志(接收缓冲区非空):当接收移位寄存器的数据复制到 DR 后,RXNE 置位,表示有新数据可读。

数据模式

HEX模式/十六进制模式/二进制模式:以原始数据的形式显示

文本模式/字符模式:以原始数据编码后的形式显示

当串口数据用于发送时,要在下面的发送区数据末尾加一个换行,也就是空一行

七、串口数据包协议与接收机制分析

串口通信中,为实现帧同步与数据边界识别,通常采用带包头、包尾的结构化数据包格式,主要分为 HEX 模式与文本模式两类,以下分别阐述其结构、特性与接收逻辑,并补充嵌入式开发常用的烧录工具说明。

一、串口数据包格式设计

1. HEX 数据包格式

HEX 数据包以原始十六进制字节为传输单元,通过预定义的包头、包尾实现帧界定,支持固定包长与可变包长两种结构:

  • 固定包长 HEX 数据包:帧长度固定,由包头(如0xFF)、固定长度数据载荷(如 4 字节)、包尾(如0xFE)组成,帧结构为0xFF + [4字节数据] + 0xFE,连续传输时各帧边界清晰,无额外间隔。
  • 可变包长 HEX 数据包:帧长度可动态变化,仍以固定包头、包尾作为帧边界,仅数据载荷长度可调整,帧结构为0xFF + [N字节数据] + 0xFE,通过包头、包尾的唯一性区分不同数据帧。
HEX 数据包特性
  • 优点:传输形式直接,数据解析逻辑简单,无需额外编码转换,适用于传感器、外设等原始数据的直接传输场景。
  • 缺点:灵活性受限,若数据载荷中出现与包头、包尾相同的字节(如0xFF0xFE),易导致帧边界误判,产生解析错误。

2. 文本数据包格式

文本数据包以 ASCII 编码字符为传输单元,采用字符型包头、包尾界定帧边界,典型实现以@为包头,\r\n(回车换行)为包尾,同样支持固定包长与可变包长结构:

  • 固定包长文本数据包:帧长度固定,由包头@、固定长度 ASCII 字符载荷、包尾\r\n组成,帧结构为@ + [固定长度字符数据] + \r\n
  • 可变包长文本数据包:帧长度可动态调整,以@为帧起始标记,\r\n为帧结束标记,数据载荷为可变长度 ASCII 字符,帧结构为@ + [可变长度字符数据] + \r\n
文本数据包特性
  • 优点:数据直观易读,可直接通过串口工具解析为人机交互指令;且文本模式下数据载荷为 ASCII 字符,天然避免了载荷数据与包头、包尾(控制字符)的重复冲突,降低帧边界误判风险。
  • 缺点:解析效率较低,需对 ASCII 字符进行编码转换,数据传输开销高于 HEX 模式,不适用于大批量原始数据传输场景。

二、数据包接收状态机设计

为实现可靠的帧同步与数据解析,需采用有限状态机(FSM)实现数据包接收逻辑,以下分别阐述 HEX 与文本数据包的接收流程。

1. HEX 数据包接收状态机

以固定包长 HEX 数据包(包头0xFF、包尾0xFE、载荷长度 4 字节)为例,接收状态机分为三个状态:

  • 状态 S0:等待包头:初始状态下持续接收字节,若收到非0xFF字节则保持当前状态;若收到0xFF则判定为帧起始,切换至数据接收状态 S1。
  • 状态 S1:接收数据载荷:进入该状态后持续接收数据字节,若收到非目标数据字节则保持状态;若累计接收满 4 个数据字节,则切换至包尾等待状态 S2。
  • 状态 S2:等待包尾:进入该状态后持续接收字节,若收到非0xFE字节则保持状态;若收到0xFE则判定为帧结束,完成一帧数据接收,状态机重置为 S0,等待下一帧数据。

该状态机通过包头、包尾的识别与数据长度计数,实现了固定包长 HEX 数据包的可靠解析,避免了乱序数据对帧边界的干扰。

2. 文本数据包接收状态机

以文本数据包(包头@、包尾\r\n)为例,接收状态机分为三个状态:

  • 状态 S0:等待包头:初始状态下持续接收字节,若收到非@字符则保持当前状态;若收到@则判定为帧起始,切换至数据接收状态 S1。
  • 状态 S1:接收数据载荷并等待包尾:进入该状态后持续接收字符数据,若收到非\r字符则继续接收数据;若收到\r则切换至包尾等待状态 S2。
  • 状态 S2:等待包尾结束:进入该状态后持续接收字符,若收到非\n字符则保持状态;若收到\n则判定为帧结束,完成一帧数据接收,状态机重置为 S0,等待下一帧数据。

该状态机通过字符型包头、包尾的识别,实现了文本数据包的帧同步,适配人机交互场景下的指令解析需求。

(本文素材by-B站江西科技,是学习笔记)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值