三十七、STM32的SPI

前言:在嵌入式系统中,外设通信是非常重要的一部分。STM32C8T6 作为一款应用广泛的单片机,支持多种串行通信协议,其中 SPI(Serial Peripheral Interface)串行外设接口 以其速度快、结构简单的特点,被广泛应用于 Flash 存储器、OLED 屏幕、AD/DA 转换器、传感器等外设的通信中。

目录

[一、什么是 SPI 通信?](#一、什么是 SPI 通信?)

[二、SPI 的硬件连接方式](#二、SPI 的硬件连接方式)

[三、SPI 的时序基础](#三、SPI 的时序基础)

[1. 起始与终止条件](#1. 起始与终止条件)

[2. SPI 的 4 种工作模式](#2. SPI 的 4 种工作模式)

[四、SPI 的数据交换机制](#四、SPI 的数据交换机制)

[1. 发送指令](#1. 发送指令)

[2. 指定地址写数据](#2. 指定地址写数据)

[3. 指定地址读数据](#3. 指定地址读数据)

[五、SPI 和其他通信协议对比](#五、SPI 和其他通信协议对比)

六、总结


一、什么是 SPI 通信?

SPI(Serial Peripheral Interface)是由 Motorola 公司提出的一种同步串行通信协议 。它采用主从模式进行数据传输,支持全双工通信,通信速度通常比 I2C 更高,且协议本身更加简单。

SPI 的基本特征包括:

  • 同步通讯(由时钟线控制数据传输节奏)

  • 全双工(可以同时发送和接收数据)

  • 一主多从架构(一个主设备可以控制多个从设备)

  • 不需要设备地址(通过片选线决定通信对象)

SPI 协议通常由四根信号线构成:

信号线 名称 说明

|-----|--------------|-----------|
| SCK | Serial Clock | 时钟线,由主机输出 |

|------|---------------------------|-----------|
| MOSI | Master Output Slave Input | 主机输出,从机输入 |

|------|---------------------------|-----------|
| MISO | Master Input Slave Output | 从机输出,主机输入 |

|-------|--------------|---------------|
| SS/CS | Slave Select | 从机选择信号(低电平有效) |

二、SPI 的硬件连接方式

在真实电路中,SPI 的连接方式遵循以下原则:

  • 所有从设备的 SCK、MOSI、MISO 是并联的

  • 主机通过不同的 SS 引脚 来选择不同的从设备

  • 主设备通过拉低某一条 SS 线来选中相应的从机

  • 从机只有在 SS 为低时才参与通信

也就是说,当多个 SPI 设备共用一条 SPI 总线时,片选信号是区分不同从机的关键点

在 STM32 的配置中,一般设置:

  • 输出引脚:推挽输出

  • 输入引脚:浮空输入或上拉输入

这些硬件连接方式决定了 SPI 能够在同一总线上连接多个设备而互不干扰。

三、SPI 的时序基础

1. 起始与终止条件

SPI 通信依赖 SS 信号控制开始与结束:

  • 起始条件: SS 由高电平 → 低电平

  • 终止条件: SS 由低电平 → 高电平

只有当 SS 处于低电平时,主从设备之间才能进行数据交换。

2. SPI 的 4 种工作模式

SPI 一共有 4 种工作模式,由 CPOL(时钟极性)和 CPHA(时钟相位)两位决定:

|----|------|------|------|--------|
| 模式 | CPOL | CPHA | 空闲状态 | 数据采样方式 |

|-----|---|---|---------|---------|
| 模式0 | 0 | 0 | SCK 低电平 | 第一个边沿采样 |

|-----|---|---|---------|---------|
| 模式1 | 0 | 1 | SCK 低电平 | 第二个边沿采样 |

|-----|---|---|---------|---------|
| 模式2 | 1 | 0 | SCK 高电平 | 第一个边沿采样 |

|-----|---|---|---------|---------|
| 模式3 | 1 | 1 | SCK 高电平 | 第二个边沿采样 |

它们的区别在于:

  • CPOL 决定空闲时钟电平

  • CPHA 决定在第几个边沿采样数据

不同的设备要选择不同的 SPI 模式,如果主从模式不匹配,将会导致通信失败。

四、SPI 的数据交换机制

SPI 的一个非常重要的特性是:全双工传输

这意味着:

  • 主机在发送数据的同时

  • 从机也在向主机发送数据

  • 每发送 1 个字节,就会接收 1 个字节

因此,在 SPI 中并不存在"只写或只读"的情况,读操作本质上也是在发送数据,只是发送的是无意义数据(例如 0xFF 或 0x00)。

1. 发送指令

主设备选中从设备后,通过 MOSI 发送指令,例如 0x06 这样的写使能指令,从机在 MISO 上返回状态数据。

2. 指定地址写数据

SPI 设备(比如 SPI Flash)在写数据时的流程一般为:

  1. 拉低 SS,选中从机

  2. 发送写指令(如 0x02)

  3. 发送 24 位地址(高位在前)

  4. 连续写入数据

  5. 拉高 SS,结束通信

这是一种非常典型的 SPI 写时序结构。

3. 指定地址读数据

读数据的过程与写数据非常类似:

  1. 拉低 SS,选中从机

  2. 发送读指令(如 0x03)

  3. 发送目标地址

  4. 接收从机返回的数据

  5. 拉高 SS,结束通信

这种方式常见于:Flash、EEPROM、传感器寄存器读取等应用。

五、SPI 和其他通信协议对比

|----|------|------|------|----|-------|
| 协议 | 引脚数量 | 是否同步 | 通信方式 | 速度 | 使用复杂度 |

|-----|----|----|-----|----|----|
| SPI | 4根 | 同步 | 全双工 | 很快 | 简单 |

|-----|----|----|-----|----|-----|
| I2C | 2根 | 同步 | 半双工 | 中等 | 较复杂 |

|------|----|----|-----|----|-----|
| UART | 2根 | 异步 | 全双工 | 较慢 | 最简单 |

虽然 SPI 占用 IO 较多,但它的速度和效率非常高,因此在对实时性要求比较高的场合非常常用,比如:

  • OLED 屏幕

  • 高速 ADC

  • 外部 Flash

  • 触控芯片

  • 显示驱动芯片

六、总结

SPI 是 STM32 中极其重要且常用的一种通信方式,掌握 SPI 的基本原理,是嵌入式开发中的必修课。

相关推荐
一支闲人1 小时前
NRF24L01无线通信模块的快速上手
stm32·单片机·嵌入式硬件·nrf24l01无线通信模块
qq_401700411 小时前
运算放大器电路二、实例分析
单片机·嵌入式硬件
杰出的胡兵1 小时前
MCU中PFD(Power Fail Detect)和PVD(Programmable Voltage Detector)的区别?
单片机·嵌入式硬件
jifengzhiling2 小时前
STM32 ADC规则与注入通道全解析
stm32·mcu·工业自动化·电流环·外设驱动
沐欣工作室_lvyiyi2 小时前
基于单片机的校园路灯智能控制系统(论文+源码)
单片机·嵌入式硬件·毕业设计·校园路灯
纳米软件2 小时前
电源芯片的欠压锁定如何测试,需要哪些设备?-纳米软件
自动化测试·单片机·嵌入式硬件
小李做物联网2 小时前
52.1基于单片机stm32物联网嵌入式项目程序开发智体重秤体脂系统
stm32·单片机·嵌入式硬件·物联网·课程设计
阿容12345613 小时前
stm32两轮平衡小车 -04
stm32·嵌入式硬件
silno16 小时前
图解 STM32 USB CDC虚拟串口 的实现
stm32·单片机·stm32f103c8t6·cdc虚拟串口