STM32 SPI基础内容

发布者:BlossomBeauty最新更新时间:2024-07-19 来源: elecfans关键字:STM32  SPI  通信接口 手机看文章 扫描二维码
随时随地手机看文章

SPI,全称为 Serial Peripheral Interface(串行外设接口),是一种用于短距离通信的同步串行通信接口,主要应用在嵌入式系统


SPI的应用场合很广,显示模组、时钟芯片、存储芯片、温度传感器等众多器件都有使用SPI接口通信。

这些器件通常作为从设备,单片机作为主设备来控制它们,今天就结合STM32来分析一下SPI常见通信有异常的问题。

STM32 SPI基础内容

绝大部分STM32芯片都有多个SPI外设,它可与外部SPI器件进行半双工/全双工同步串行通信。 1. SPI特性

三条线全双工、双线单工同步传输

支持 8 位或 16 位传输帧格式选择

支持主模式或从模式操作

可编程的时钟极性和相位

支持 MSB 或 LSB 数据顺序

支持DMA收发数据

更多特性请查阅《STM32参考手册》。

2. 引脚描述

MISO:主输入/从输出数据;

MOSI:主输出/从输入数据;

SCK:时钟(主输出,从输入时钟);

NSS:从器件选择,可理解片选信号;

0a39626e-3e27-11ee-ac96-dac502259ad0.png?imageView2/2/w/1000

3. SPI时序

SPI的时序中有两个参数需要注意,那就是时钟相位和时钟极性。在STM32中,SPI时序由CPOL 和 CPHA 这两位来决定。

通过软件配置这两个参数,可分为四种时序关系,如下图:

0a515f90-3e27-11ee-ac96-dac502259ad0.png?imageView2/2/w/1000

4. 数据帧格式

串行同行数据传输分为 MSB 和 LSB,也就是最高有效位在前,还是最低有效位在前。(注:最左边的比特位即为最高有效位)。

比如传输一个字节:0x95(1001 0101)。

0a6794d6-3e27-11ee-ac96-dac502259ad0.png?imageView2/2/w/1000

如果按照MSB(高位在前),则发送顺序:1001 0101。

如果按照LSB(低位在前),则发送顺序反过来:1010 1001。

STM32 SPI参数配置

通常STM32的SPI作为主机连接外部从机,要与从机建立正常通信,就必须与从机的参数匹配才行。

这里以【STM32作为SPI主机读写SPI Flash】为例,主要配置参数:双向全双工、主机模式、8位数据、MSB等。

1. 标准外设库配置

SPI_InitTypeDef  SPI_InitStructure;



SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //双向全双工

SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                      //主机模式

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  //8位数据

SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                        //时钟极性:空闲为高

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                       //时钟相位:第2个时钟沿捕获

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                          //软件控制NSS信号

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; //波特率预分频值为4

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                 //数据传输从 MSB 位开始

SPI_InitStructure.SPI_CRCPolynomial=7;



SPI_Init(SPI1,&SPI_InitStructure);


▲左右滑动,查看完整代码


2. STM32CubeMX配置0a7cbdde-3e27-11ee-ac96-dac502259ad0.png?imageView2/2/w/1000

首先选择全双工主机模式,然后再逐步配置下面参数。这里的波特率时钟灰色不可配置,由你系统时钟和分频时钟决定。

这些配置参数比较容易理解(英文清晰明了),若不懂可针对性查阅参考手册。

STM32 SPI常见问题

虽说SPI相对比较简单,但在实际应用过程中还是会存在一些奇怪的问题,下面通过案例来分析SPI常见的一些问题。

问题一:NSS片选问题

有工程师使用硬件NSS控制从机,以为NSS信号是自动控制,导致操作从设备失败。

分析原因:STM32 SPI的NSS信号为片选信号,可“使能”为硬件控制(参看上面参数配置)。

但在应用中同样需要软件操作才能控制NSS信号(高低),比如:


SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);


▲左右滑动,查看完整代码

解决办法:按照通信时序,控制NSS信号高低(通常低有效)。

问题二:SPI引脚复用功能问题

STM32的SPI是一种复用功能,之前使用标准外设库的工程师容易遗漏复用功能的配置导致SPI不能使用。

分析原因:SPI有些引脚对应的是特殊功能的引脚,比如:PB3(MISO)对应的是 JTDO,如果不配置则默认这个引脚的功能就是 JTDO的功能。

以前经常存在这种问题,但现在通过工具STM32CubeMX配置时自动配置了复用功能。

解决办法:参考官方提供在初始化代码中配置复用功能(同时,推荐使用HAL库)。


GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);


问题三:时钟速率过高问题

有工程师购买一个通信为SPI的模块,最高通信速率8MB/s,他使用10.5MB/s通信速率也能用,但偶尔会出现通信异常。

分析原因:一个芯片标称的最高速率其实是相对保守的值,在条件比较好的情况下超过了最高值也能用,但不能保证稳定性。

STM32 SPI的时钟频率由系统时钟和分频决定,有的工程师没有深入理解这些参数,发现能用就不管了。

如上章节中的21MB/s,如果修改系统时钟,其实这个值会发生相应变化

解决办法:最简单的办法就是修改分频值。同时,如果环境恶劣,建议使用屏蔽线。(在保证整个产品系统实时性的同时,尽量降低通信速率)

问题四:时钟相位问题

有不少工程师在调试SPI时会遇到数据“移位”的问题,数据能收发为什么会出现这种问题呢?

分析原因:SPI通信时钟由主机提供,本身上电时(主从)各自的信号就不稳定,如果从机时钟相位也不匹配,就会因为时钟引起数据移位,或者异常的情况。

解决办法:软件上匹配SPI主从设备的时钟相位,使用通信协议,CRC、 checksum校验等。


关键字:STM32  SPI  通信接口 引用地址:STM32 SPI基础内容

上一篇:浅谈STM32之SD卡
下一篇:STM32 DCMI 的带宽与性能介绍

推荐阅读最新更新时间:2026-03-20 11:16

STM32通信接口(三)硬件SPI
一、概述 SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,是Motorola最先在其的MC68HCXX芯片上使用,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。 SPI接口主要应用在实时时钟、E2PROM、FLASH、AD转换器还有数字信号处理器和数字信号解码器之间,它的用途相当广泛。而且其传输速度较快一般可以达到10M以上。 二、基本原理 由图可知SPI一般由四条线组成:MISO(主机输入从机输出
[单片机]
<font color='red'>STM32</font><font color='red'>通信接口</font>(三)硬件<font color='red'>SPI</font>
单片机 SPI 通信接口
UART、I2C 和 SPI 是单片机系统中最常用的三种通信协议。前边我们已经学了 UART 和 I2C 通信协议,这节课我们来学习剩下的 SPI 通信协议。 SPI 是英语 Serial Peripheral Interface 的缩写,顾名思义就是串行外围设备接口。SPI 是一种高速的、全双工、同步通信总线,标准的 SPI 也仅仅使用4个引脚,常用于单片机和 EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。SPI 通信原理比 I2C 要简单,它主要是主从方式通信,这种模式通常只有一个主机和一个或者多个从机,标准的 SPI 是4根线,分别是 SSEL(片选,也写作 SCS)、SCLK(时钟,也写作 SCK)、MO
[单片机]
单片机 <font color='red'>SPI</font> <font color='red'>通信接口</font>
PIC读书笔记5:串行通信接口SPI、I2C、UART
1:同步串行接口I2C与SPI接线方式: 1.1: SPI的一些注意事项 2:同步串行接口I2C与SPI连接多个设备及其区别: 3:异步串行接口UART 当与windows终端通信时,硬件握手尤其必要,因为windows是一个多任务操作系统,应用程序有事会遇到导致数据丢失的长延时。 4:异步通信与同步串行通信外设比较
[单片机]
PIC读书笔记5:串行<font color='red'>通信接口</font><font color='red'>SPI</font>、I2C、UART
STM32通信接口(二)IIC--软件模拟
一、概述 IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。 IIC是 由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。 二、基本原理 (IIC总线的时序图) IIC总线在传输数据的过程中共有三种类型的信号,分别为:开始信号、结束信
[单片机]
<font color='red'>STM32</font><font color='red'>通信接口</font>(二)IIC--软件模拟
STM32 HAL库 模拟SPI驱动 DAC8564
之前写过DAC8560的模拟SPI驱动,相比较而言DAC8564能够在网上找到的内容更加的丰富,本文主要是介绍讲解STM32 HAL库使用模拟SPI驱动DAC8564。 DAC8560 https://www.bilibili.com/opus/519334650730238240 SPI相关的简介: https://www.bilibili.com/opus/515342298243272188 然后是用STM32CubeMx初始化模拟SPI的引脚: STM32CubeMx的GPIO输出的配置可以参考: https://www.bilibili.com/opus/484177792198506654 这里
[单片机]
STM32 SPI数据接收难题解析:原因与解决方案
前言 在 STM32 开发中,SPI(串行外设接口) 是一种常见的通信协议,它广泛应用于传感器、显示屏、存储器等外设的连接。虽然 SPI 看似简单,但许多开发者在使用时常常遇到无法接收数据的问题,或者数据传输不稳定。问题往往出在细节配置上,忽视某些设置会导致 SPI 通信失败。 本文将总结几个常见的 SPI 配置误区,帮助你解决“收不到数据”的问题。 1. 未正确配置 SPI 时钟 SPI 通信的工作依赖于主设备和从设备之间的时钟同步。STM32 的 SPI 外设需要外部时钟源支持,而 CubeMX 默认并不总是配置正确的 SPI 时钟,尤其是当你更改了系统时钟或使用不同的时钟源时。 问题表现: SPI 从设备接收不到数据
[单片机]
STM32 SPI 实验全面解析
系统讲解 STM32 的 SPI 实验,用STM32F103ZET6 和 HAL 库,内容将围绕: SPI 原理简介 HAL SPI 的关键函数及寄存器解释 实验流程 & 代码讲解 典型应用场景 错误排查方法 ???? 一、SPI 原理:我如何用自己的话教会你? 什么是 SPI? SPI(Serial Peripheral Interface,串行外设接口)是一种全双工、主从结构、同步传输的串行通信协议。 简单说,SPI 就像一根高速的传送带,主机发数据、从机同步收,同时从机也能发数据回来。 SPI 通信线: 引脚 名称 方向(以主机为参考) 说明 SCK 串行时钟线 主机输出 → 从机输入 提供数据同步时
[单片机]
stm32 SPI架构
STM32 芯片集成了专门用于 SPI 协议通讯的外设。 通讯引脚:SPI 硬件架构从 MOSI、MISO、SCK 及 NSS 线展开;STM32 芯片有多个 SPI 外设,它们的 SPI 通讯信号引出到不同的 GPIO 引脚上,使用时必须配置到这些指定的引脚。 SPI1是APB2上的设备,最高通信速率36Mbtis/s,SPI2、SPI3 是 APB1上的设备,最高通信速率18Mbits/s。 SPI3 用到了下载接口的引脚,这几个引脚默认功能是下载,如果想使用 SPI3 接口,则程序必须禁用这几个IO 口的下载功能。 了解stm32 SPI架构,主要了解的是寄存器之间运作的联系。 控制寄存器(CR1/CR2): 整体控制逻
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved