flash挂载到系统 spi_STM32学习笔记15—外置FLASH读写实验

本文档介绍了如何在STM32上使用SPI接口与W25Q128 Flash进行读写操作。内容涵盖了Flash的基本概念、STM32的硬件SPI模块介绍、相关寄存器配置,以及具体实验例程,旨在实现通过SPI将数据写入Flash并在LCD上显示。
摘要由CSDN通过智能技术生成

15.1 FLASH

Flash,全名叫做Flash EEPROM Memory,即平时所说的“闪存”,它结合了ROM和RAM的长处,不仅可以反复擦除,还可以快速读取数据,STM32运行的程序其实就是存放在Flash当中,但是由于STM32的Flash一般1M左右,只能存储程序大小的数据,所以往往需要外扩Flash来存储数据,比如LCD界面当中的汉字字库,以及文件系统中读取的文件内容。

但是一般Flash的擦除次数有限制,STM32F1系列最新的文档指出,片内的FLASH擦写次数大约在1W次左右,所以一般Flash用于擦除次数不多,但是数据量很大的场合。

这个Flash读写实验我们用到的芯片是W25Q128,这是一款采用SPI协议进行读写的Flash芯片,存储容量为128Mbit,合计16Mbyte,工作电压2.7V~3.6V。这个实验我们采用STM32内置的SPI模块来进行对芯片的读写操作,STM32F1的SPI功能很强大,SPI时钟最高可以到18MHz,支持DMA,可以配置为SPI协议或者I2S协议。

15.2 硬件SPI模块

通过之前51单片机开发我们可以知道,SPI协议一共需要四根线来完成数据通信,即片选CS,总线时钟SCK,主机输入从机输出MISO和主机输出从机输入MOSI四根数据线。STM32的内部SPI模块结构框图如下图所示。

c7abaf795300acad3f46992748777d7f.png

从上面的结构框图我们可以发现,硬件SPI的优势就在于开发者不需要考虑SPI的详细参数以及时序,只需要配置内部的寄存器,设置速率,电平就可以实现SPI通信。

15.3 相关寄存器

15.3.1 SPI控制寄存器1:SPIx_CR1

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

BIDI

MODE

BIDI

OE

CRC

EN

CRC

NEXT

DFF

RX

ONLY

SSM

SSI

LSB

FIRST

SPE

BR[2:0]

MSTR

CPOL

CPHA

Bit 15:双向数据模式使能

0:选择双线双向模式

1:选择单线双向模式

Bit 14:双向模式下的输出使能

0:输出禁止(只收模式)

1:输出使能(只发模式)

Bit 13:硬件CRC校验使能

0:禁止CRC计算

1:启动CRC计算

Bit 12:下一个发送CRC

0:下一个发送的值来自发送缓冲区

1:下一个发送的值来自发送CRC寄存器

Bit 11:数据帧格式

0:使用8位数据帧格式进行发送/接收

1:使用16位数据帧格式进行发送/接收

Bit 10:只接收

0:全双工(发送和接收)

1:禁止输出(只接收模式)

Bit 9:软件从设备管理

0:禁止软件从设备管理

1:启用软件从设备管理

Bit 8:内部从设备选择

注:该位只在SSM位为1时有意义。它决定了NSS上的电平,在NSS引脚上的I/O操作无效

Bit 7:帧格式

0:先发送MSB

1:先发送LSB

Bit 6:SPI使能

0:禁止SPI设备

1:开启SPI设备

Bit 5~Bit 3:波特率控制

000:fPCLK/2

001:fPCLK/4

010:fPCLK/8

011:fPCLK/16

100:fPCLK/32

101:fPCLK/64

110:fPCLK/128

111:fPCLK/256

Bit 2:主设备选择

0:配置为从设备

1:配置为主设备

Bit 1:时钟极性

0:空闲状态时,SCK保持低电平

1:空闲状态时,SCK保持高电平

Bit 0:时钟相位

0:数据采样从第一个时钟边沿开始

1:数据采样从第二个时钟边沿开始

15.3.2 SPI状态寄存器:SPIx_SR

15

14

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值