STM32三大通信协议详解——UART、I2C、SPI
2026/7/5 3:54:49 网站建设 项目流程

STM32三大通信协议详解——UART、I2C、SPI

前言

在嵌入式开发中,通信协议是连接单片机与外部设备的桥梁。UART、I2C、SPI是最常用的三大串行通信协议,它们各有特点,适用于不同的场景。本文将带你深入理解这三种通信协议的工作原理、通信时序和关键参数,帮你彻底搞懂它们的区别与使用场景。


一、UART串口通信

1.1 什么是UART

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种异步串行通信协议。它只需要两根数据线(TX发送、RX接收)就能实现全双工通信,是嵌入式开发中最常用的调试和通信方式。

  • 异步通信:没有时钟线,收发双方通过约定的波特率来同步数据
  • 全双工:可以同时发送和接收数据
  • 两根线:TX(发送)、RX(接收),交叉连接

1.2 数据帧格式

UART的数据帧通常由以下几部分组成:

组成部分长度说明
起始位1位低电平,表示一帧数据的开始
数据位5~8位实际要传输的数据,通常是8位(1字节)
校验位0~1位可选,用于奇偶校验,检测传输错误
停止位1~2位高电平,表示一帧数据的结束

💡空闲状态:串口不传输数据时,总线长期保持高电平(1)。当要发送数据时,先拉低电平(起始位),通知接收方准备接收。

1.3 低位先发(LSB First)

UART传输数据时有一个重要特点:低位先发(LSB First,Least Significant Bit first)。

举个例子:要发送十进制数100,对应的二进制是1100100,高位补0凑8位就是01100100

但在UART的波形上,数据是从低位到高位依次发送的:

  • 第1位(最左边):0(最低位)
  • 第2位:0
  • 第3位:1
  • 第4位:0
  • 第5位:0
  • 第6位:1
  • 第7位:1
  • 第8位(最右边):0(最高位)

也就是波形上从左到右看到的是:0 0 1 0 0 1 1 0,正好和我们平时写的二进制顺序相反。

⚠️注意:很多初学者容易搞反数据位的顺序。记住:UART是低位先发,波形最左边的是数据最低位,最右边的是最高位。

1.4 波特率

波特率(Baud Rate)表示每秒传输的二进制位数,单位是bps(bits per second)。

常用波特率:9600、19200、38400、57600、115200等。

收发双方必须设置相同的波特率,否则无法正确解析数据。


二、I2C总线

2.1 什么是I2C

I2C(Inter-Integrated Circuit,集成电路总线)是由飞利浦公司开发的一种同步串行通信协议。它只需要两根线就能实现多设备通信,非常适合板内芯片间的短距离通信。

  • 同步通信:有时钟线(SCL)同步数据
  • 半双工:同一时间只能发送或接收
  • 两根线:SCL(时钟线)、SDA(数据线)
  • 多设备:一条总线上可以挂多个从设备,通过地址区分
  • 上拉电阻:SCL和SDA都需要上拉电阻,空闲时为高电平

2.2 物理层

信号线说明
SCL串行时钟线(Serial Clock),由主机控制,用于同步数据传输
SDA串行数据线(Serial Data),用于传输实际的数据

💡空闲状态:由于上拉电阻的存在,总线空闲时SCL和SDA都处于高电平状态。

2.3 通信过程详解

I2C的一次完整通信分为四个阶段:起始位 → 寻址 → 数据传输 → 停止位

第一阶段:起始位(Start)

在数据传输之前,总线上处于空闲状态(SCL和SDA都是高电平)。

起始位的产生方式:当SCL为高电平时,SDA产生一个下降沿(从高变低)。

起始位是主机发起的,标志着一次通信的开始。

第二阶段:寻址(Addressing)

起始位之后,主机发送从机的地址,用来选择要和哪个从机通信。

  • I2C标准模式使用7位地址(还有10位地址模式)
  • 地址后面跟着1位读写位(0表示写,1表示读)
  • 从机收到自己的地址后,会回复一个ACK应答

寻址阶段NAK的原因:

  • 地址填错,要寻址的从机不存在
  • 要寻址的从机正忙,来不及回复ACK
  • 从机故障
第三阶段:数据传输(Data Transfer)

寻址成功后,就开始传输数据了:

  • 每个数据字节也是8位
  • 高位先发(MSB First),和UART相反
  • 每传输完一个字节,接收方回复一个ACK应答位
  • 可以连续传输多个字节

数据有效性规则:SCL为高电平时,SDA上的数据必须保持稳定;SCL为低电平时,SDA才能变化。

第四阶段:停止位(Stop)

数据传输完成后,主机发送停止位,结束本次通信。

停止位的产生方式:当SCL为高电平时,SDA产生一个上升沿(从低变高)。

停止位之后,总线回到空闲状态。

2.4 ACK与NAK

ACK(Acknowledge)应答位是I2C的重要机制,用于确认数据是否成功接收。

  • ACK(应答):接收方在第9个时钟周期将SDA拉低,表示成功接收
  • NAK(不应答):接收方在第9个时钟周期保持SDA为高,表示接收失败或拒绝接收

2.5 I2C的多种模式

模式速率说明
标准模式100 kbit/s最基础、最常用的模式
快速模式400 kbit/s速度提升4倍
高速模式3.4 Mbit/s高速传输

三、SPI总线

3.1 什么是SPI

SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉公司开发的一种同步串行通信协议。它以高速、全双工著称,是三种协议中速度最快的,适合高速数据传输场景。

  • 同步通信:有时钟线(SCK)同步数据
  • 全双工:可以同时发送和接收数据
  • 四根线:MOSI、MISO、SCK、NSS
  • 高速:速度可达几十MHz甚至更高

3.2 四根信号线

信号线全称说明
MOSIMaster Output Slave Input主机输出,从机输入。主机发送数据,从机接收
MISOMaster Input Slave Output主机输入,从机输出。主机接收数据,从机发送
SCKSerial Clock串行时钟线,由主机控制,同步数据传输
NSSNegative Slave Select从机选择线,低电平有效。主机拉低对应NSS来选中从机

💡多从机连接:SPI的每个从机都需要一根独立的NSS线。主机要和哪个从机通信,就把对应的NSS拉低。从机数量多的时候,会占用较多的IO口。

3.3 波特率

SPI的时钟频率由主机决定,通常是系统时钟的分频。

波特率选取原则:

  • 在允许的范围内,选择最大值(越快越好)
  • 考虑从设备所能承受的极限频率
  • 考虑电路板布线所能承受的极限(高速信号完整性)

3.4 比特位传输顺序

SPI支持两种传输顺序:

  • MSB First:高位先发(Most Significant Bit first),最常用
  • LSB First:低位先发(Least Significant Bit first)

收发双方必须设置相同的传输顺序。

3.5 数据位长度

SPI的数据位长度可以配置:

  • 8位:最常用,每次传输1个字节
  • 16位:每次传输2个字节,适合16位数据的场景

3.6 时钟极性(CPOL)与时钟相位(CPHA)

SPI有四个工作模式,由时钟极性(CPOL)和时钟相位(CPHA)组合决定。这是SPI最容易搞混的地方。

时钟极性 CPOL(Clock Polarity)

决定了时钟线在空闲时的电平状态:

  • CPOL = 0:空闲时SCK为低电平
  • CPOL = 1:空闲时SCK为高电平
时钟相位 CPHA(Clock Phase)

决定了数据在第几个时钟沿被采样:

  • CPHA = 0:在第一个时钟沿采样(奇数边沿)
  • CPHA = 1:在第二个时钟沿采样(偶数边沿)
四种SPI模式
模式CPOLCPHA说明
模式000空闲低电平,上升沿采样(最常用)
模式101空闲低电平,下降沿采样
模式210空闲高电平,下降沿采样
模式311空闲高电平,上升沿采样

⚠️重要:主机和从机必须配置为相同的SPI模式(CPOL和CPHA都一致),否则无法正确通信。


四、三大通信协议对比

对比项UARTI2CSPI
信号线数量2根(TX、RX)2根(SCL、SDA)4根(MOSI、MISO、SCK、NSS)
同步/异步异步同步同步
通信方式全双工半双工全双工
速度慢(一般≤1Mbps)中等(标准100kbps,高速3.4Mbps)快(可达几十Mbps)
多设备支持点对点(1对1)多从机(通过地址)多从机(通过NSS)
传输顺序低位先发(LSB)高位先发(MSB)可配置(MSB/LSB)
典型应用串口调试、蓝牙、WiFi模块传感器、EEPROM、RTC时钟Flash、显示屏、高速ADC

五、总结

  • UART:最简单、最通用的异步通信,适合调试和低速设备通信,缺点是速度慢、只能点对点
  • I2C:两根线实现多设备通信,布线简单,适合板内芯片间通信,缺点是速度较慢、半双工
  • SPI:速度最快、全双工,适合高速数据传输,缺点是信号线多、多从机时占用IO多

实际项目中,根据设备的接口、速度要求、布线资源等因素选择合适的通信协议。理解了它们的底层原理和时序,就能快速上手任何一种通信接口的开发。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询