前言:在前面的文章中,我们已经详细介绍了 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)
数据通信过程如下:
-
CPU 或 DMA 将数据写入 TDR
-
数据进入移位寄存器
-
在 SCK 驱动下逐位移出,通过 MOSI 发送
-
同时从 MISO 同步移入外设返回数据
-
最终存入 RDR,供 CPU 读取
这正是 SPI 全双工 的本质:发送与接收同时完成。
3.3 GPIO 配置与信号输出
SPI 实际输出由 GPIO 完成,但在使能 SPI 外设后,这些引脚不再作为普通 IO 工作,而受 SPI 硬件控制,包括:
-
SCK
-
MOSI
-
MISO
-
NSS(可软件管理或硬件管理)
这也是硬件 SPI 比软件 SPI 更高效稳定的重要原因之一。
四、SPI 传输模式分析
4.1 主模式全双工连续传输
适用于高速、稳定、大量数据通信场景,例如:
-
Flash 读取
-
显示屏通信
-
传感器高速数据输出
特点:
-
时钟连续
-
数据帧紧凑
-
吞吐率最高
4.2 非连续传输
常见于以下情况:
-
需要控制单次帧间间隔
-
交替进行处理
-
外设响应时间较长
其本质是:
一次发送 → 停顿 → 下一次发送
适合指令式通信设备,例如某些 SPI 外设需要:
-
先发命令
-
再发地址
-
最后读数据
五、硬件 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,进入真正实战层面的开发讲解。