1. STM32 SPI通信基础与CubeMX配置实战指南
在嵌入式开发中,SPI(Serial Peripheral Interface)总线因其高速、全双工的特性,成为连接传感器、存储芯片和外设模块的首选方案之一。作为STM32开发者,掌握CubeMX工具配置SPI接口是必备技能。本文将结合我多年在工业控制领域的实战经验,带你从底层原理到上层配置,全面解析SPI通信的实现过程。
1.1 SPI通信核心原理剖析
SPI采用主从架构,通过四线制实现全双工同步数据传输:
- SCK(Serial Clock):时钟信号,由主机产生
- MOSI(Master Out Slave In):主机输出从机输入
- MISO(Master In Slave Out):主机输入从机输出
- NSS(Slave Select):片选信号(低电平有效)
SPI的工作模式由时钟极性(CPOL)和时钟相位(CPHA)共同决定:
- CPOL=0:时钟空闲状态为低电平
- CPOL=1:时钟空闲状态为高电平
- CPHA=0:数据在时钟第一个边沿采样
- CPHA=1:数据在时钟第二个边沿采样
四种模式组合对应不同设备需求,例如:
- Mode 0(CPOL=0, CPHA=0):适用于多数SPI Flash
- Mode 3(CPOL=1, CPHA=1):某些RFID模块常用
关键提示:设备通信失败的首要原因往往是模式配置错误,务必查阅器件手册确认工作模式
1.2 CubeMX配置详解
以STM32F407为例,配置SPI1为主机模式:
-
引脚分配:
- PA5 -> SPI1_SCK
- PA6 -> SPI1_MISO
- PA7 -> SPI1_MOSI
- 自定义GPIO作为NSS(如PB0)
-
参数设置:
c复制
hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1
