1. SPI接口基础认知:从物理层到协议栈
SPI(Serial Peripheral Interface)作为嵌入式领域最常用的同步串行通信协议之一,其四线制设计在STM32生态中占据重要地位。物理连接上,SPI总线由SCK(时钟线)、MOSI(主出从入)、MISO(主入从出)和SS(片选)组成,这种全双工通信架构相比I2C具有更高的传输速率,典型工作频率可达数十MHz。
协议层的关键特性包括:
- 时钟极性(CPOL)决定空闲状态电平
- 时钟相位(CPHA)控制数据采样边沿
- 主从模式下最大支持10MHz(标准模式)或50MHz(高速模式)
- 数据帧长度可配置为8位或16位
以STM32F4系列为例,其SPI外设具有独立的发送/接收缓冲区,支持DMA传输,在72MHz系统时钟下可实现37.5Mbps的理论传输速率。实际项目中,SPI常用于连接Flash存储器(如W25Q128)、显示屏(如ILI9341)以及各类传感器(如BME280环境传感器)。
注意:SPI没有标准的流控机制,高速传输时需确保从设备能及时处理数据,否则可能丢失数据包。建议首次调试时先降低时钟频率至1MHz以下。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. STM32硬件SPI配置实战
2.1 CubeMX基础配置步骤
以STM32F407VG和W25Q128 Flash芯片为例,在CubeMX中:
- 启用SPI1外设,选择Full-Duplex Master模式
- 配置Prescaler为256分频(初始低频调试)
- 设置Data Size为8 bits,CPOL=High,CPHA=2Edge
- 开启SPI中断(非必须,DMA方式更高效)
- 分配PB3/PB4/PB5为SPI引脚,PA4作为手动控制的片选信号
关键参数计算公式:
code复制实际SPI时钟 = APB2总线时钟 / (2 × prescaler)
例如APB2=84MHz,prescaler=256 → 实际时钟≈164kHz
2.2 初始化代码解析
生成的HAL库初始化代码包含以下关键结构:
c复制hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECT
