本次实验需要用到W25QXX flash模块。

一、实验目的

达到的效果是使用一枚按钮切换板载LED的亮灭状态,并且将LED的亮灭状态保存在flash模块里面,这样即使断电,LED的状态也不会丢失。

二、接线说明

SPI有四条线,功能如下

MOSI 主发从收
MISO 主收从发
SCK 串行时钟
NSS 从机选择

W25QXX flash引脚对应:

从机 对应关系 主机
DI 主机输出,从机输入 MOSI
DO 主机输入,从机输出 MISO
CLK 串行时钟 SCK
CS 从机选择 NSS
VCC 电源正极
GND 接地

三、STM32CubeMX配置及线路连接

我们打开上次工程的.ioc文件

点击左侧Connectivity选项卡,我们再选择SPI1接口。再点击Mode,选择SPI的工作模式。


接下来是对SPI工作模式的说明(只说明和主机有关的四种):

1、Full-Duplex Master:

全双工,标准的双向同时通信。

2、Half-Duplex Master

半双工。主机的MOSI连接从机的MOSI,主机既可以通过这条线向从机发送数据,又可以通过这条线从从机接收数据,但是不可以同时进行。

3、Transmit Only Master

只发送。主机只发送数据。

4、Receive Only Master

只接受。主机只接收数据


接下来我们选择全双工,即Full-Duplex Master。


Hardware NSS Signal代表硬件NSS信号。

硬件NSS一般用于多主机通信,基本用不到


Hardware NSS Signal选择Disble。

线路连接:

系统为我们自动配置好了DI、CLK、 DO引脚的连接,我们任意选择一个引脚,如PA4,作为NSS引脚,连接flash的CS引脚,并且设置为通用输出推挽模式。

接下来我们设置PA4引脚:

接线图如下:

连接好后我们继续回到CubeMX,点击Connectivity的SPI1,进行参数设置。


参数说明:

Basic Parameters

Frame Format

数据帧格式

唯一一种:摩托罗拉格式

Data Size

数据位长度

8:8个比特位为一组,每组传输一个字节。、

16:16个比特位为一组,每组传输16比特(查找手册)

First Bit

数据位的传输顺序

MSB:先传最高有效位

LSB:先传最低有效位(查找手册)

Clock Parameters

Prescaler(for Baud Rate)

分频系数

2、4、8、16、32、64、128、256(查时钟树判断)

Baud Rate

波特率

查看时钟树可得SPI1从PCLK2获取时钟,

波特率 = PCLKx ➗ 分频系数 (查时钟树判断)

ClockPolarity (CPoL)

时钟极性

LOW:低极性

HIGH:高极性(查找手册)

ClockPhase (CPHA)

时钟相位

1Edge :第一边沿采集

2Edge:第二边沿采集(查找手册)

AdvancedParameters

CRC Calculation

CRC校验

用不到不需要设置

NSS Signal Type

NSS类型

用不到不需要设置


翻看模块书册可得:最终选择Motorola|、8bit、MSB First,8分频(可以得到比较低的波特率,使得电路更稳定)、High、2Edge(手册上写该模块支持模式0和模式3,我们选择模式3即:高极性、第二边沿采集)、后面的高级参数不需要设置。

然后生成代码,打开工程。

以上关于初始化的工作已完成,后续的实验代码编写,请看下节《STM32——HAL库开发笔记16(SPI外部flash实验2)》

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐