四十、STM32的外设SPI

前言:在前面的文章中,我们已经详细介绍了 SPI 总线的基本工作原理,并通过软件模拟方式实现了 SPI 与 W25Q64 的通信。软件 SPI 的优势在于灵活、移植简单,但其缺点同样明显:占用 CPU、实时性受限、速度较低。

因此,在实际工程项目中,更多情况下我们会选择 STM32 内部集成的 硬件 SPI 外设 来完成数据通信。本篇文章将围绕 STM32F103C8T6 的 SPI 外设展开,重点讲解其结构、工作机制、配置要点以及在实际开发中的应用思路,帮助大家从"能用 SPI"到"真正理解 SPI"。

目录

[一、STM32F103C8T6 SPI 外设概述](#一、STM32F103C8T6 SPI 外设概述)

[二、SPI 基本连接结构回顾](#二、SPI 基本连接结构回顾)

[三、STM32 SPI 内部结构解析](#三、STM32 SPI 内部结构解析)

[四、SPI 传输模式分析](#四、SPI 传输模式分析)

[五、硬件 SPI 与软件 SPI 的对比](#五、硬件 SPI 与软件 SPI 的对比)

[六、SPI 在 STM32 项目中的典型应用](#六、SPI 在 STM32 项目中的典型应用)

七、结语


一、STM32F103C8T6 SPI 外设概述

STM32F103C8T6 内部集成了完整的 SPI 硬件控制器,相比软件 SPI,它可以自动完成:

  • 时钟信号 SCK 生成

  • 数据移位发送

  • 数据移位接收

  • 帧结构管理

  • 支持 DMA 自动搬运数据

这意味着大量与通信相关的底层细节不再需要 CPU 手工干预,从而极大减轻 MCU 负担,提高通信效率与稳定性。

1.1 支持特性

根据官方手册及 PPT 内容,STM32 的 SPI 具有以下能力:

  • 支持 8 位或 16 位数据帧

  • 高位先行 / 低位先行可配置

  • 主机模式 / 从机模式可切换

  • 支持多主机模式

  • SPI 时钟分频灵活,频率:

    fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)

  • 支持全双工、半双工、单工通信

  • 支持 DMA,加速大量数据传输

  • 兼容 I2S 协议

  • 在 STM32F103C8T6 中,提供:

    • SPI1(挂载 APB2 总线)

    • SPI2(挂载 APB1 总线)

二、SPI 基本连接结构回顾

结合前一篇软件 SPI 的知识,我们再次回顾 SPI 的 4 条基本信号线:

信号 含义
SCK 时钟信号
MOSI 主机输出,从机输入
MISO 主机输入,从机输出
CS / NSS 片选信号

SPI 的特点是:同步串行通信,主机控制一切,从机被动响应。

三、STM32 SPI 内部结构解析

整体可以分为三大功能模块:

3.1 波特率发生器(时钟模块)

  • 负责将 PCLK 经过分频后输出为 SCK

  • 由寄存器配置

  • 支持多档分频

  • 决定 SPI 的通信速率

  • 也是 SPI 性能与稳定性的重要平衡点

高频意味着速度更快,但线越长、外设越复杂,抗干扰能力越差,因此工程中需要结合外设特性选取合理频率。

3.2 数据控制器与移位寄存器

其内部包含三个重要寄存器:

  • 发送数据寄存器(TDR)

  • 接收数据寄存器(RDR)

  • 核心移位寄存器(Shift Register)

数据通信过程如下:

  1. CPU 或 DMA 将数据写入 TDR

  2. 数据进入移位寄存器

  3. 在 SCK 驱动下逐位移出,通过 MOSI 发送

  4. 同时从 MISO 同步移入外设返回数据

  5. 最终存入 RDR,供 CPU 读取

这正是 SPI 全双工 的本质:发送与接收同时完成。

3.3 GPIO 配置与信号输出

SPI 实际输出由 GPIO 完成,但在使能 SPI 外设后,这些引脚不再作为普通 IO 工作,而受 SPI 硬件控制,包括:

  • SCK

  • MOSI

  • MISO

  • NSS(可软件管理或硬件管理)

这也是硬件 SPI 比软件 SPI 更高效稳定的重要原因之一。

四、SPI 传输模式分析

4.1 主模式全双工连续传输

适用于高速、稳定、大量数据通信场景,例如:

  • Flash 读取

  • 显示屏通信

  • 传感器高速数据输出

特点:

  • 时钟连续

  • 数据帧紧凑

  • 吞吐率最高

4.2 非连续传输

常见于以下情况:

  • 需要控制单次帧间间隔

  • 交替进行处理

  • 外设响应时间较长

其本质是:

一次发送 → 停顿 → 下一次发送

适合指令式通信设备,例如某些 SPI 外设需要:

  1. 先发命令

  2. 再发地址

  3. 最后读数据

五、硬件 SPI 与软件 SPI 的对比

5.1 软件 SPI(bit-bang)

优点:

  • 任意 IO 可实现

  • 灵活

  • 学习 SPI 的理想工具

缺点:

  • 完全依赖 CPU 软件控制

  • 效率低

  • 时序受中断影响

  • 速度有限

5.2 硬件 SPI

优点:

  • 由硬件自动完成时序

  • 稳定可靠

  • 速度更高

  • 支持 DMA

  • 支持全双工

  • 几乎不占 CPU

缺点:

  • IO 固定

  • 配置相对复杂

  • 部分特殊时序难以实现

六、SPI 在 STM32 项目中的典型应用

结合常见嵌入式开发项目,STM32 SPI 常被用于:

  • 外部 Flash(如 W25Q 系列)

  • OLED 显示屏

  • TFT 屏幕

  • AD 转换芯片

  • DAC

  • 无线模块(NRF24L01 等)

  • 传感器数据读取

特别是 W25Q64,这正是我们文章系列的核心对象:

软件 SPI 能"跑起来",而硬件 SPI 则能"高效稳定跑起来"。

七、结语

SPI 是 STM32 外设体系中最常用、最重要的通信接口之一。理解 SPI 的本质,再结合硬件 SPI 的内部框架与能力,我们在面对任何 SPI 外设时,才能做到:

不仅能用,而且用得稳定、高效、优雅。

后续的文章我们将继续围绕 STM32C8T6 + W25Q64,结合硬件 SPI,进入真正实战层面的开发讲解。

相关推荐
Coder_Boy_2 小时前
【人工智能应用技术】-基础实战-小程序应用(基于springAI+百度语音技术)智能语音控制-单片机交互代码
java·人工智能·后端·嵌入式硬件
清风6666662 小时前
基于单片机的硫化氢、氨气、甲烷、一氧化碳气体多种有害气体检测与声光报警系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
ACP广源盛139246256732 小时前
GSV6505F@ACP#6505F产品规格详解及产品应用分享
单片机·嵌入式硬件·计算机外设·音视频
点灯小铭3 小时前
基于单片机的汽车防撞安全系统
单片机·安全·汽车·毕业设计·课程设计·期末大作业
小李做物联网3 小时前
【单片机毕业设计】148.1基于单片机stm32多节点环境检测毕业设计
stm32·单片机·嵌入式硬件·物联网
悠哉悠哉愿意3 小时前
【嵌入式学习笔记】任务调度器
开发语言·笔记·单片机·嵌入式硬件·学习
qq_401700413 小时前
主流单片机扩展接口功能深度对比解析
单片机·嵌入式硬件
小叶子来了啊4 小时前
6Arduino While循环
单片机·嵌入式硬件
Coder_Boy_4 小时前
【人工智能应用技术】-基础实战-小程序应用(基于springAI+百度语音技术)智能语音控制-单片机交互
人工智能·单片机·小程序