导语“本教程将使用CubeMX初始化SPI,使用SPI对W25Q64 FLASH进行读写操作,通过HAL库的读写应用来数据FLASH的操作细节。”
01
------------ 系统要求-----------------
•硬件
野火指南者开发板
•软件
CubeMx & MDK & 串口调试助手
•原理图
根据原理图,我们看到FLASH连接在SPI1上,我们不适用SPI1自带片选,使用PC0开进行软件片选。
02
------第二节 CubeMx配置-----------------
(1) 我们还是使用前面的USART串口(串口的配置没有变化)项目,在此基础上进行SPI1 的配置:
我们从配置的信息上看,使用了SPI1,主从全双工模式,8位数据传输,高字节在前,模式3,CRC不校验,软件控制。SPI的模式配置看下图,采样时刻是偶数边沿所以CLOCK Phase =2:
(2) 完成片选信号的GPIO配置
完成上述配置后点击代码生成。
03
------------第三节MDK 配置--------------
将CubeMx生成的代码使用MDK打开进行应用代码编写:
在spi.h 中进行FLASH操作的指令宏定义:
//指令表#define W25X_WriteEnable 0x06 #define W25X_WriteDisable 0x04 #define W25X_ReadStatusReg 0x05 #define W25X_WriteStatusReg 0x01 #define W25X_ReadData 0x03 #define W25X_FastReadData 0x0B #define W25X_FastReadDual 0x3B #define W25X_PageProgram 0x02 #define W25X_BlockErase 0xD8 #define W25X_SectorErase 0x20 #define W25X_ChipErase 0xC7 #define W25X_PowerDown 0xB9 #define W25X_ReleasePowerDown 0xAB #define W25X_DeviceID xAB #define W25X_ManufactDeviceID 0x90 #define W25X_JedecDeviceID 0x9F// others defined#define sFLASH_ID 0XEF4017#define Dummy_Byte 0XFF#define SPI_FLASH_PageSize 256#define SPI_FLASH_PerWritePageSize 256#define SPI1_TIME_OUT 0xFFFF
并且申明应用的操作函数:
void SPI_FLASH_SectorErase(uint32_t SectorAddr);uint32_t SPI_Fl