【单片机通信技术】串口通信的几种方式与比较,详细解释SPI通信

一、介绍

串口通信是一种通过串行接口逐位传输数据的通信方式,广泛应用于嵌入式系统、工业控制、传感器网络等领域。

二、以下是几种常见的串口通信方式及其对比:

1.UART(Universal Asynchronous Receiver/Transmitter)

  • 特点

    • 异步通信:无时钟信号,依赖预定义的波特率(Baud Rate)同步数据。

    • 全双工:支持同时发送和接收(需独立的TX和RX线)。

    • 点对点:通常用于两个设备之间的通信。

    • 帧格式:数据帧包含起始位、数据位(5-9位)、校验位(可选)和停止位。

  • 优点

    • 简单易用,硬件成本低。

    • 支持长距离通信(配合RS-232/RS-485等电平转换芯片)。

  • 缺点

    • 依赖精确的波特率匹配,抗干扰能力较弱。

    • 仅支持点对点,无法直接连接多设备。

  • 典型应用:单片机与PC通信、GPS模块、蓝牙模块等。

2. I2C(Inter-Integrated Circuit)

  • 特点

    • 同步通信:需时钟信号(SCL)和数据线(SDA)。

    • 半双工:同一时间只能发送或接收。

    • 多主多从:支持多个主设备和从设备共享总线。

    • 地址寻址:每个设备有唯一地址,主设备通过地址选择从设备。

    • 低速传输:标准模式(100kbps)、快速模式(400kbps)、高速模式(3.4Mbps)。

  • 优点

    • 引脚少(仅需两根线),适合多设备场景。

    • 支持总线仲裁和冲突检测。

  • 缺点

    • 速度较慢,协议复杂度较高。

    • 长距离通信需额外电路(如电平转换器)。

  • 典型应用:温度传感器、RTC(实时时钟)、低速率外设。

3. RS-232

  • 特点

    • 物理层标准:定义电平、连接器(如DB9)和电气特性。

    • 异步通信:基于UART协议,需波特率匹配。

    • 单端信号:使用正负电压表示逻辑(-3V~-15V为1,+3V~+15V为0)。

  • 优点

    • 抗干扰能力较强(相比TTL电平)。

    • 支持较长距离(典型15米以内)。

  • 缺点

    • 速度较低(通常<115.2kbps)。

    • 仅支持点对点通信。

  • 典型应用:老式计算机外设(鼠标、调制解调器)、工控设备。

4. RS-485

  • 特点

    • 差分信号:使用两条线(A和B)传输差分电压,抗干扰能力强。

    • 多设备通信:支持总线拓扑,最多32个设备(通过中继器扩展)。

    • 半双工:需方向控制(如RE/DE引脚)。

    • 高速长距离:传输距离可达1200米(低速时),速率最高10Mbps(短距离)。

  • 优点

    • 抗干扰强,适合工业环境。

    • 支持多节点网络。

  • 缺点

    • 需协议层管理(如Modbus),硬件复杂度较高。
  • 典型应用:工业自动化、楼宇控制、多节点传感器网络。

5. USB(Universal Serial Bus)

  • 特点

    • 复杂协议:支持热插拔、即插即用、电源供电。

    • 高速传输:USB 2.0(480Mbps)、USB 3.0(5Gbps)。

    • 主从架构:主机(如PC)控制所有数据传输。

  • 优点

    • 高带宽,支持多种设备类型。

    • 广泛兼容,即插即用。

  • 缺点

    • 协议复杂,需专用控制器。

    • 传输距离短(一般<5米)。

  • 典型应用:外设连接(键盘、存储设备)、高速数据采集。

6. SPI(Serial Peripheral Interface)

1. 基本特性:
  • 同步通信:依赖时钟信号(SCLK)控制数据传输时序,主设备生成时钟。

  • 全双工:数据可同时发送(MOSI)和接收(MISO)。

  • 主从架构:一个主设备控制多个从设备,通过片选信号(SS/CS)选择从机。

  • 高速传输:理论速率可达几十Mbps(如STM32的SPI支持50Mbps以上)。

  • 灵活性:数据位宽可配置(通常8位或16位),时钟极性和相位可调。

2. 信号线
  • SCLK(Serial Clock):主设备输出的时钟信号,控制数据传输节奏。

  • MOSI(Master Out Slave In):主设备发送数据到从设备的线路。

  • MISO(Master In Slave Out):从设备发送数据到主设备的线路。

  • SS/CS(Slave Select/Chip Select):主设备通过拉低对应从机的片选信号激活通信。

3. 通信过程
  • 主设备初始化:配置时钟极性(CPOL)和相位(CPHA),确定数据采样边沿。

  • 选择从设备:拉低目标从机的SS/CS引脚。

  • 数据传输

    • 主设备通过MOSI发送数据,同时通过MISO接收从机数据。

    • 每个时钟周期传输一个数据位(上升沿或下降沿采样,由CPOL和CPHA决定)。

  • 结束通信:拉高SS/CS引脚,释放从机。

4. 时钟模式(CPOL和CPHA)
  • CPOL(Clock Polarity)

    • CPOL=0:时钟空闲时为低电平。

    • CPOL=1:时钟空闲时为高电平。

  • CPHA(Clock Phase)

    • CPHA=0:数据在时钟的第一个边沿(上升或下降)采样。

    • CPHA=1:数据在时钟的第二个边沿采样。

5. 多从机连接方式

独立片选(SS/CS):每个从机有独立的片选信号,主设备通过多个SS引脚控制。

  • 优点:简单直接,各从机独立工作。

  • 缺点:占用主设备较多引脚。

菊花链(Daisy Chain):多个从机共用同一片选信号,数据依次传递。

  • 优点:节省主设备引脚。

  • 缺点:所有从机需支持菊花链模式,协议复杂度高。

6. 优缺点总结
  • 优点

    • 高速传输,适合实时性要求高的场景。

    • 全双工通信,数据传输效率高。

    • 硬件简单,无复杂协议(如地址寻址)。

  • 缺点

    • 引脚占用多(每个从机需单独SS线)。

    • 无硬件错误检测机制(依赖软件校验)。

    • 通信距离短(通常<1米)。

7. 典型应用
  • 存储器:Flash、EEPROM(如W25Q128)。

  • 传感器:加速度计、陀螺仪(如MPU6050)。

  • 显示屏:OLED、TFT屏幕(通过SPI传输图像数据)。

  • ADC/DAC:高速模数/数模转换芯片。

三、SPI多从机通信的连线方法

若主机需连接多个从机,常见连线方式有两种:

1. ​独立片选(CS)法

  • 硬件连接:每个从机独占一条CS线,主机通过拉低对应CS线选中从机。
  • 优点:逻辑简单,各从机独立操作,无冲突。
  • 缺点:占用主机较多GPIO引脚,从机数量受限于可用CS线数量。

连线示意图

主机         从机1         从机2
SCLK  ──┬─────SCLK─────SCLK
MOSI  ──┼─────MOSI─────MOSI
MISO  ──┼─────MISO─────MISO
CS1   ──┴─────CS
CS2   ────────┴───────CS

2.菊花链(Daisy Chain)法

  • 硬件连接:所有从机的MOSI/MISO串联,数据依次传递。
  • 工作方式:主机发送数据包,各从机依次截取自身所需数据段。
  • 优点:仅需一条CS线,节省主机引脚。
  • 缺点:所有从机需支持菊花链协议,且数据需按顺序处理。

适用场景:LED驱动芯片(如移位寄存器)等需要级联的设备。

四、SPI多从机通信的注意事项

  • 时序同步:所有从机的时钟模式(CPOL/CPHA)需与主机一致。
  • 抗干扰设计:长距离通信时,可加入终端电阻或使用差分信号(如RS-485兼容SPI)。
  • 软件调度:主机需通过轮询或优先级策略管理多从机通信,避免总线冲突。

五、STM32F103单片机中默认SPI引脚是哪个

1.SPI1(高速SPI,APB2总线)​

  • 默认引脚 (无需重映射):
    • SCK(时钟)​ :PA5(引脚PA5,复用功能SPI1_SCK
    • MOSI(主机输出)​ :PA7(引脚PA7,复用功能SPI1_MOSI
    • MISO(主机输入)​ :PA6(引脚PA6,复用功能SPI1_MISO
    • NSS(片选,可选硬件控制)​ :PA4(引脚PA4,复用功能SPI1_NSS

2.SPI2(低速SPI,APB1总线)​

  • 默认引脚 (无需重映射):
    • SCK(时钟)​ :PB13(引脚PB13,复用功能SPI2_SCK
    • MOSI(主机输出)​ :PB15(引脚PB15,复用功能SPI2_MOSI
    • MISO(主机输入)​ :PB14(引脚PB14,复用功能SPI2_MISO
    • NSS(片选,可选硬件控制)​ :PB12(引脚PB12,复用功能SPI2_NSS
相关推荐
云上艺旅22 分钟前
K8S学习之基础十五:k8s中Deployment扩容缩容
学习·docker·云原生·kubernetes·k8s
亭墨1 小时前
linux0.11内核源码修仙传第五章——内存初始化(主存与缓存)
linux·c语言·驱动开发·学习·缓存·系统架构
亿坊电商1 小时前
什么样的物联网框架适合开展共享自助KTV唱歌项目?
物联网
凡人的AI工具箱1 小时前
PyTorch深度学习框架60天进阶学习计划第14天:循环神经网络进阶
人工智能·pytorch·python·深度学习·学习·ai编程
动亦定1 小时前
物联网设备接入系统后如何查看硬件实时数据?
java·物联网
傍晚冰川2 小时前
【江协科技STM32】ADC数模转换器-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习
c-u-r-ry302 小时前
009---基于Verilog HDL的单比特信号边沿检测
嵌入式硬件·fpga开发
知识分享小能手2 小时前
Html5学习教程,从入门到精通, HTML5 新的 Input 类型:语法知识点与案例代码(16)
开发语言·前端·学习·html·html5·web·java开发
小呀小萝卜儿2 小时前
2025-03-08 学习记录--C/C++-PTA 习题10-2 递归求阶乘和
c语言·学习
土豆198910212 小时前
简记_ MCU管脚的防静电处理
嵌入式硬件