STM32 SPI介绍及CubeMX配置

本文深入解析SPI协议,包括物理层的连接方式和协议层的通信模式。详细介绍了STM32中的SPI架构,包括通信引脚、时钟控制逻辑和数据控制逻辑。同时,通过CubeMX配置SPI的步骤,展示了如何设置时钟源、数据格式、时钟极性和相位。此外,还涵盖了STM32 SPI的全双工模式和硬件NSS的禁用。

目录

一.SPI简介

二.SPI协议

物理层:

协议层:

1.SPI的基本通讯过程

2.通信模式

三.STM32中的SPI

SPI框图:

1.通信引脚 

2.时钟控制逻辑

3.数据控制逻辑

4.整体控制逻辑

四.CubeMX配置SPI 

1.配置时钟源 

2.SPI配置

3.时钟源设置

4.项目文件设置


一.SPI简介

SPI(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工通信,被广泛应用在设备与MCU之间要求通信频率高的场合

二.SPI协议

物理层:

主机MCU与从机通过四条线连接,其中SCK、MOSI、MISO三条线共用,SS为从设备选择信号线,使SPI可以支持多设备。

NSS:片选信号线,每个从设备都有一条独立片选信号线,独占主机的一个引脚,有多少个从设备就有多少片选信号线。当主机要选定从设备时,将该设备的SS线电平拉低,即片选有效,接下来主机开始与被选中的从机通信,当主机将SS线电平拉高结束通信。
SCK:时钟信号线,用于通讯数据同步。由通讯主机产生,并决定通讯频率。
MOSI:master output,slave input主设备输出从设备输入引脚,主机通过这条线向从机发送数据。
MISO:master input,slave output主设备输入从设备输出引脚,从机通过这条线向主机发送数据。

MOSI与MISO两条信号线使SPI可以实现全双工通信,如果只需要单向通信则可以少使用一条信号线。

协议层:

 SPI协议层定义了通讯的起始信号和停止信号、数据有效性、时钟同步等环节。

1.SPI的基本通讯过程

①:片选信号线选择从设备,通讯开始。

②④:SCK触发信号,MOSI与MISO变化等待采样。

③⑤:SCK采样信号,主机与从机分别对MISO、MOSI信号进行采集。

多次的触发、采样组成SPI数据传输过程。

⑥:片选信号线停止信号,通信停止。

2.通信模式

SPI有四种通讯模式,他们的主要依靠总线空闲时SCK的时钟状态和数据采样时刻来区别。

时钟极性CPOL:CPOL是指NSS总线空闲时SCK的电平信号,如果SCK为高电平,CPOL=1;SCK为低电平,CPOL=0。如上方时序图中CPOL=0.

时钟相位CPHA:CPHA是指数据的采样时刻,SCK的信号可以看作方波,CPHA=0时会在SCK的奇数边沿采样;CPHA=1时会在SCK的偶数边沿采样。如上方时序图中CPHA=1.

三.STM32中的SPI

SPI框图:

1.通信引脚 

STM32的多个SPI被引出到不同引脚上,使用时必须配置指定引脚。

2.时钟控制逻辑

SCK时钟信号线由波特率发生器根据“控制寄存器 CR1”中的 BR[0:2]位控制,对fpclk分频后的频率就是SCK的时钟频率,其中的 fpclk频率是指 SPI 所在的 APB 总线频率,APB1 为 fpclk1,APB2 为 fpckl2。

3.数据控制逻辑

SPI的MOSI及MISO都连接到数据移位寄存器上 ,向外发送数据时,数据寄存器会以发送缓冲区为数据源,把数据一位一位地发送出去;接收数据时,数据移位寄存器将数据线采样到的数据一位一位地存储到接收缓冲区中。通过写SPI数据寄存器(SPI_DR)可以将数据存到填充到发送 F 缓冲区中,通过读SPI数据寄存器(SPI_DR)可以获取接收缓冲区中的内容。其中数据帧长度可以通过控制寄存器( SPI_CR1)的DFF位配置成 8 位及 16 位模式;配置 LSBFIRST 位可选择 MSB 先行还是 LSB 先行。

4.整体控制逻辑

整体控制逻辑负责协调整个 SPI 外设,控制逻辑的工作模式根据我们配置的 控制存器(CR1/CR2) 的参数而改变。在外设工作时,控制逻辑会根据外设的工作状态修改 状态寄存器(SR),我们只要读取状态寄存器相关的寄存器位,就可以了解 SPI 的工作状态了

四.CubeMX配置SPI 

1.配置时钟源 

设置高速外部时钟HSE 选择外部时钟源

2.SPI配置

这里选择全双工模式,不启用硬件NSS 

 选择数据格式(8位/16位、高位优先/低位优先) 、时钟极性、时钟相位

 配置引脚复用

3.时钟源设置

 fpclk设置为72mHz

4.项目文件设置

然后点击GENERATE CODE 创建工程即可。

### STM32 SPI 配置使用 STM32CubeMX 教程 #### 使用 STM32CubeMX 初始化项目 为了配置 STM32SPI 接口,首先需要通过 STM32CubeMX 工具初始化一个新的工程。启动工具并选择目标微控制器型号后,在 Pinout & Configuration 页面中找到 SPI 外设。 #### 配置 SPI 参数 点击 SPI 设备进入参数设置界面,可以调整如下选项: - **Mode**: 设置为主模式 (Master) 或从模式 (Slave)[^1]。 - **Direction**: 单向还是双向传输方向的选择。 - **Data Size**: 数据帧大小可选 8-bit 或者 16-bit。 - **First Bit**: 定义数据位顺序 MSB-first 或 LSB-first。 - **Clock Polarity**: SCK 空闲状态电平高低设定。 - **Clock Phase**: 第一或第二边沿采样数据决定。 - **NSS Management**: 片选信号管理方式,硬件自动控制或是软件手动操作[^2]。 #### 生成代码框架 完成上述配置之后保存配置文件,并让 STM32CubeMX 自动生成初始化 C 文件以及必要的头文件。这些自动生成的源码包含了所选外设的基础配置函数调用,如 `HAL_SPI_Init()` 函数用于初始化 SPI 接口。 ```c // Example of initializing SPI with HAL library generated by CubeMX void MX_SPI1_Init(void) { hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; // Set as master mode hspi1.Init.Direction = SPI_DIRECTION_2LINES;// Full duplex communication hspi1.Init.DataSize = SPI_DATASIZE_8BIT; // Data size is set to 8 bits per frame hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; // Idle clock level low hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; // Sample on first edge transition hspi1.Init.NSS = SPI_NSS_SOFT; // Software NSS management enabled if (HAL_SPI_Init(&hspi1) != HAL_OK){ Error_Handler(); } } ``` #### 编写应用程序逻辑 基于生成的基础结构之上编写具体的应用程序逻辑来实现所需功能,比如发送接收数据包等。利用 HAL 库提供的 API 进行读写操作非常直观简便。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值