stm32的SPI总结

简介: stm32的SPI总结

引脚介绍

SPI 包含 4 条总线,SPI 总线包含 4 条总线,分别为

——SS 、SCK、MOSI、MISO。它们的作用介绍如下 :

1)SS ( Slave Select):片选信号线,当有多个 SPI 设备与 MCU 相连时,每个设备 的这个片选信号线是与 MCU 单独的引脚相连的,而其他的 SCK、MOSI、MISO线则为多个设备并联到相同的 SPI 总线上,见图 15- 1。当 SS 信号线为低电平时,片选有效,开始SPI 通信。

2)SCK (Serial Clock):时钟信号线,由主通信设备产生,不同的设备支持的时钟 频率不一样,如 STM32 的 SPI 时钟频率最大为 f PCLK /2。

3)MOSI (MasterOutput, Slave Input):主设备输出 / 从设备输入引脚。主机的数据 从这条信号线输出,从机由这条信号线读入数据,即这条线上数据的方向为主机到从机。

4)miso主设备输入/ 从设备输出引脚。主机从这条信号线读入数据,从机的数据则由这条信号线输出,即在这条线上数据的方向为从机到主机。


GPIO配置

编程要点

初始化了 SPI1 复用到的 GPIO 引脚,启动了 GPIO 及 SPI1 外设 的时钟,并初始化了 SPI 的模式

1)SPI_Mode :STM32 的 SPI 设 备 可 以 工 作 于 主 机 模 式(SPI_Mode_Master) 或 从 机 模 式(SPI_Mode_Slave),这两个模式的最大区别为 SPI 的 SCK 信号线的时序, SCK 的时序是由通信中的主机产生的。若被配置为从机模式,STM32 的 SPI 模块将接受外 来的 SCK 信号。本实验中 STM32 作为 SPI 通信中的主机,我们向这个成员赋值为主机模 式(SPI_Mode_Master)。


2)SPI_DataSize :这个成员可以选择 SPI 每次通信的数据大小(称为数据帧)为8 位 还是 16 位。从 Flash 的数据手册我们可以查到,本 Flash 通信的数据帧大小为 8 位, STM32 的 SPI 模块设置要与之相同。


3)SPI_CPOL 和 SPI_CPHA :这 两 个 成 员 即 配 置 SPI 的 时 钟 极 性(CPOL) 和 时 钟 相 位(CPHA),这两个配置影响到 SPI 的通信模式,该设置要符合将要互相通信的 设备的要求。CPOL 分别可以取 SPI_CPOL_High(SPI 通信空闲时 SCK 为高电平)和 SPI_CPOL_Low(SPI 通信空闲时 SCK 为低电平)。CPHA则可以取 SPI_CPHA_1Edge (在 SCK 的奇数边沿采集数据) 和 SPI_CPHA_2Edge (在 SCK 的偶数边沿采集数 据) 。


查阅本 Flash 的使用手册,见图 15- 6。可以了解到这个 Flash 支持以 SPI 的模式 0 和模式 3 通信。即在 SPI 空闲时,SCK 为低电平,奇数边沿采样(模式 0);也可以在 SPI 空闲 时,SCK 为高电平,偶数边沿采样(模式 3)。即无论 CPOL 的状态是什么,Flash的数据 采样时刻为 SCK 的上升沿。我们在本实验配置使用它的模式 3,即把 CPOL 赋值为 SPI_CPOL_High ;

2)4 ) SPI_NSS : 本 成 员 配 置 NSS 引 脚 的 使 用 模 式 , 可 以 选 择 为 硬 件 模 式

(SPI_NSS_Hard )与软件模式(SPI_NSS_Soft),在硬件模式中的 SPI 片选信号由硬件自 动产生,而软件模式则需要我们亲自把相应的 GPIO 端口拉高或置低产生非片选和片选信 号。如果外界条件允许,硬件模式还会自动将 STM32 的 SPI 设置为主机。本实验使用软件 模式,向这个成员赋值为 SPI_NSS_Soft 。


5)SPI_BaudRatePrescaler :本成员设置波特率分频值,分频后的时钟即为 SPI 的 SCK 信号线的时钟频率。这个成员参数可设置为 f PCLK 的 2、4、6、8、16、32、64、128、 256 分频。本实验向这个成员赋值为 SPI_BaudRatePrescaler_4,即 f PCLK 的 4 分频。


6)SPI_FirstBit :所有串行的通信协议都会有 MSB 先行(高位数据在前)还是 LSB 先行(低位数据在前)的问题,而 STM32 的 SPI 模块可以通过这个结构体成员,对这个特 性 编 程 控 制 。 据 Flash 的 通 信 时 序 , 我 们 向 这 个 成 员 赋 值 为 MSB 先 行 (SPI_FirstBit_MSB)。


7)SPI_CRCPolynomial :这是 SPI 的 CRC 校验中的多项式,若我们使用 CRC 校验 时,就使用这个成员的参数(多项式)来计算 CRC 的值。由于本实验的 Flash 不支持 CRC 校验,所以我们向这个结构体成员赋值为7 实际上是没有意义的。 配置完这些结构体成员后,我们要调用SPI_Init() 函数把这些参数写入寄存器中,实现 SPI 的初始化,然后调用



相关文章
|
1月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
|
2月前
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
134 1
|
3月前
|
存储 缓存 芯片
|
3月前
|
存储 芯片
|
11月前
|
存储 芯片 内存技术
STM32F0单片机快速入门十 用 SPI HAL 库读写W25Q128
STM32F0单片机快速入门十 用 SPI HAL 库读写W25Q128
|
芯片 开发者
16 玩转STM32之SPI通信
16 玩转STM32之SPI通信
STM32 OLED显示屏--SPI通信知识汇总
在此功能中,采用的是四线SPI,我们在开发过程中,应该去寻扎数据手册里面的通信时序图,才能使得单片机利用四线SPI和OLED进行通信的功能操作。
STM32 OLED显示屏--SPI通信知识汇总
|
存储 芯片 数据格式
STM32第十章-SPI通讯应用
  上一章我们讲到了IIC通讯,这一章来说一说SPI通信,同样的很多模块也用到了SPI通信,比如0.96寸的OLED模块。玩过单片机的小伙伴都知道OLED有4针的也有7针的,4针的就是IIC通信,7针的就是SPI通信。
203 0
STM32第十章-SPI通讯应用
|
芯片
STM32通过io模拟SPI与ADC124S021通信
STM32通过io模拟SPI与ADC124S021通信