0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UART、SPI、I2C 实战对比:哪个更适合你的项目?

信盈达 2025-11-24 19:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式开发中,设备之间的通信是绕不开的话题。常见的三种总线接口——UART、SPI、I2C—— 各有优缺点。不同项目需求决定了选择哪一种协议最合适。本文结合实战经验,逐项对比三者,并附带实战代码,帮助你快速做出判断。

一、UART(通用异步收发器

工作方式:点对点通信,使用 TX/RX 两根数据线(加上 GND)。

优点

  • 实现简单,硬件资源少
  • 常用于调试、日志打印、模块通信(如 GPS、蓝牙模块)
  • 波特率可调,支持从几百 bps 到几 Mbps

缺点

  • 只能点对点,无法挂多个设备
  • 没有统一的时钟,容易受波特率误差影响

常见应用场景

  • 串口调试
  • 与 GSM、WiFi、GPS 模块通信
  • 简单传感器数据读取

UART 实战代码示例(STM32 HAL)

  1. // 初始化 UART,波特率 115200
  2. HAL_UART_Init(&huart1);
  3. // 发送字符串
  4. charmsg[]="Hello UART!\r\n";
  5. HAL_UART_Transmit(&huart1,(uint8_t*)msg,strlen(msg),HAL_MAX_DELAY);
  6. // 接收数据(阻塞模式)
  7. uint8_trx;
  8. HAL_UART_Receive(&huart1,&rx,1,1000);

二、SPI(串行外设接口

工作方式:主从模式,通常需要 4 根线(MOSI、MISO、SCLK、CS),多从机时可增加片选线。

优点

  • 全双工,速度快,常见速率可达 10 Mbps 以上
  • 协议简单,延迟低
  • 可连接多个从设备(通过片选信号

缺点

  • 需要的 IO 口较多
  • 多从机设计时,布线复杂
  • 没有标准化的帧结构,需要自定义协议

常见应用场景

  • 连接 Flash、SD
  • LCD 显示屏驱动
  • 高速传感器数据采集

SPI 实战代码示例(读取 Flash ID)

  1. uint8_ttx=0x9F;// Flash 读 ID 指令
  2. uint8_trx[3];// 接收 ID 数据
  3. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);// CS 低电平
  4. HAL_SPI_Transmit(&hspi1,&tx,1,HAL_MAX_DELAY);
  5. HAL_SPI_Receive(&hspi1,rx,3,HAL_MAX_DELAY);
  6. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);// CS 高电平

三、I2C(内部集成电路总线)

工作方式:主从架构,仅用两根线(SCL、SDA)即可挂载多个设备。

优点

  • 协议标准化,设备寻址简单(7 位或 10 位地址)
  • 占用引脚少,便于 PCB 设计
  • 硬件生态丰富,几乎所有传感器都支持

缺点

  • 通信速率有限(标准模式 100 kbps,高速模式 3.4 Mbps)
  • 总线电容和上拉电阻影响信号质量
  • 仲裁和时钟同步机制使得实现稍复杂

常见应用场景

I2C 实战代码示例(读取寄存器)

  1. uint8_treg=0x0F;// WHO_AM_I 寄存器
  2. uint8_tval;
  3. // 写寄存器地址
  4. HAL_I2C_Master_Transmit(&hi2c1,DEVICE_ADDR<<1,®,1,HAL_MAX_DELAY);
  5. // 读寄存器数据
  6. HAL_I2C_Master_Receive(&hi2c1,DEVICE_ADDR<<1,&val,1,HAL_MAX_DELAY);

四、三者对比表

特性UARTSPII2C
引脚数2≥42
通信模式点对点主从,多从机主从,多从机
速率kbps~Mbps高速,常达数十 Mbps100 kbps~3.4 Mbps
复杂度简单中等,需要协议约定较复杂,标准协议
常见应用调试、模块通信Flash、显示屏、ADC传感器、配置类设备

五、如何选择?

  • 调试/模块通信:选 UART
  • 高速数据传输(屏幕、存储器、ADC):选 SPI
  • 多传感器、低速配置:选 I2C

经验法则:

  • MCU 引脚紧张 →I2C
  • 对速率要求高 →SPI
  • 仅单模块通信 →UART

总结

UART、SPI、I2C 没有绝对的好坏,只有是否适合你的项目:

  • UART:简单直接,适合点对点通信
  • SPI:高速稳定,但占用引脚较多
  • I2C:节省资源,适合挂载多个外设

掌握三者的差异与使用场景,就能在设计系统时更加灵活,避免返工,提高效率。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1866

    浏览量

    99791
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1547

    浏览量

    130474
  • uart
    +关注

    关注

    22

    文章

    1304

    浏览量

    106098
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SPI,UART,I2C区别与特点

    本内容详细介绍了SPI,UART,I2C区别与特点,SPI:高速同步串行口。3~4线接口,收发独立、可同步进行,UART:通用异步串行口。按
    发表于 02-02 16:15 6882次阅读

    MAX3107 SPI/I2C UART,提供128字FIF

    MAX3107 SPI/I2C UART,提供128字FIFO和内部振荡器 概述 The MAX3107 is an advanced universal asynchronous receiver-transmitter
    发表于 01-15 15:16 2178次阅读
    MAX3107 <b class='flag-5'>SPI</b>/<b class='flag-5'>I2C</b> <b class='flag-5'>UART</b>,提供128字FIF

    SPII2CUART串行总线协议

    串口通讯通信协议UART,以及常用外设通信协议 SPII2C的介绍与他们之间的区别
    发表于 11-30 11:28 96次下载

    SPI总线及I2C总线工作原理

    SPI总线及I2C总线工作原理,本内容详细介绍了SPI总线和I2C总线的工作原理和比较
    发表于 12-08 16:55 0次下载

    SPI、SCI、I2CUART之间的异同

    详细介绍了SPI、SCI、I2CUART几种通信方式的异同便于读者整体了解通信的意义.
    发表于 12-15 14:32 0次下载

    SPII2CUART三种串行总线协议的区别

    SPII2CUART三种串行总线协议的区别
    发表于 07-17 17:23 0次下载

    spii2c总线协议的对比分析

    通信协议非常适合近距离低速芯片间通信。Philips(for I2C)和Motorola(for SPI) 出于不同背景和市场需求制定了这两种标准通信协议。
    发表于 12-06 11:57 3350次阅读

    多功能USB转i2c/spi/uart适配器用户手册

    多功能USB转i2c/spi/uart适配器用户手册
    发表于 01-22 14:28 11次下载

    UARTSPII2C接口的详解解释资料说明

    做单片机开发时UARTSPII2C都是我们最经常使用到的硬件接口,我收集了相关的具体材料对这三种接口进行了详细的解释。
    发表于 05-15 18:09 7次下载
    <b class='flag-5'>UART</b>和<b class='flag-5'>SPI</b>及<b class='flag-5'>I2C</b>接口的详解解释资料说明

    一文搞懂UARTI2CSPI协议

    UARTI2CSPI都是常见的低速板级通信协议,目前主流的SoC都内置了这些通讯协议的控制器,同样,各种传感器、Touch控制器、指纹模块、蓝牙模块、WIFI模块也都兼容这三种通信方式的一种或几种。
    的头像 发表于 03-26 09:29 3147次阅读

    I2CSPI的区别是什么 速率对比

    I2CSPI 对比   功能 I2C SPI 线数 2(SDA,SCL) 4(MOSI,M
    的头像 发表于 07-27 10:55 5449次阅读

    I2CSPIUART:如何布局这些通用总线

    如果您要为项目构建开发板或使用通用MCU,则会发现许多用于通信其他活动组件的协议。USB和以太网之类的标准已内置在大多数控制器中,用于与计算机外围设备一起使用。尽管如此,仍使用I2CSPI
    的头像 发表于 11-08 17:33 2578次阅读
    <b class='flag-5'>I2C</b>与<b class='flag-5'>SPI</b>与<b class='flag-5'>UART</b>:如何布局这些通用总线

    UARTSPII2C比较 串口通信介绍

    UARTSPII2C比较 I2C线更少,比UARTSPI更为强大,但是技术上也更加麻烦些,
    的头像 发表于 11-09 18:06 2488次阅读
    <b class='flag-5'>UART</b>、<b class='flag-5'>SPI</b>、<b class='flag-5'>I2C</b>比较 串口通信介绍

    蓝牙串口通讯总线——I2C/SPI/UART

    嵌入式工程师在做串口通信调试工作的时候,会经常用到I2CSPIUART这3条总线,I2CSPIU
    的头像 发表于 01-22 09:41 3062次阅读
    蓝牙串口通讯总线——<b class='flag-5'>I2C</b>/<b class='flag-5'>SPI</b>/<b class='flag-5'>UART</b>

    总结usart、uarti2cspi区别及相关知识

    USART、UARTI2CSPI是四种不同的串行通信协议,它们各自具有独特的特点和应用领域
    的头像 发表于 04-10 09:47 3111次阅读
    总结usart、<b class='flag-5'>uart</b>、<b class='flag-5'>i2c</b>、<b class='flag-5'>spi</b>区别及相关知识