STM32——HAL库开发笔记15(SPI外部flash实验1)(参考来源:b站铁头山羊)
本次实验达到的效果是使用一枚按钮切换板载LED的亮灭状态,并且将LED的亮灭状态保存在flash模块里面,这样即使断电,LED的状态也不会丢失。
本次实验需要用到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)》
更多推荐



所有评论(0)