在本章中,我们将利用 STM32F4 自带的 SPI来实现对外部 FLASH(W25Q16)的读写,并将结果通过串口调试助手显示。本章分为如下几个部分:24.1 SPI 简介24.2 硬件设计24.3 软件设计24.4 下载验证24.1 SPI 简介SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola。首先在其 MC68...
上电,读取W25Q16设备ID,并通过串口打印出来; 写数据: SFLASH_WriteNByte((uint8_t*)"ABCDEF", 0, 6); 通过该函数在W25Q16的0地址处 连续写入6字节“ABCDEF”数据。(测试的时候:第一次下载之后让程序运行一次,即写入W25Q16数据。再将该函数屏蔽、下载。断电重新让程序运行看读出来的数据是否是前面写入的数...
本函数实质是不断检测Flash状态寄存器的Busy位,直到Flash的内部写时序完成,从而确保下一通信操作正常,这里WIP_Flag宏定义为0x01。 主机通过发送读状态寄存器命令Read Status Register(05h),返回它的8位状态寄存器值。 本函数检测的就是状态寄存器的Bit0位,即BUSY位。Flash在执行内部写时序的时候,除了读状态寄存器的命...
RT-Thread中有F1的SPI驱动和W25QXX的驱动,一次写好任意项目都通用。
写数据: SFLASH_WriteNByte((uint8_t*)"ABCDEF",0, 6); 通过该函数在W25Q16的0地址处 连续写入6字节“ABCDEF”数据。(测试的时候:第一次下载之后让程序运行一次,即写入W25Q16数据。再将该函数屏蔽、下载。断电重新让程序运行看读出来的数据是否是前面写入的数据) ...
int main(void){ /* 配置串口为:115200 8-N-1 */ USART_Config(); printf("\r\n 这是一个8Mbyte串行flash(W25Q64)实验\r\n"); /* 8M串行flash W25Q128初始化 */ SPI_FLASH_Init(); /* 获取 Flash Device ID */ DeviceID = SPI_FLASH_ReadDeviceID(); Delay( 200 );...
这个Flash读写实验我们用到的芯片是W25Q128,这是一款采用SPI协议进行读写的Flash芯片,存储容量为128Mbit,合计16Mbyte,工作电压2.7V~3.6V。这个实验我们采用STM32内置的SPI模块来进行对芯片的读写操作,STM32F1的SPI功能很强大,SPI时钟最高可以到18MHz,支持DMA,可以配置为SPI协议或者I2S协议。
else Print8x16String(x1,y1,RED,BLACK,"Error!");} 美中不足的是写FLASH还是没能用上DMA原因不详...
由原理图可知w25Q128 CS片选引脚为PB14、MISO是PB4、MOSI是PB5.二、程序编写1、spi初始化以及读写函数1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55...
SPI总线:STM32本身支持SPI硬件时序,本文示例代码里同时采用模拟时序和硬件时序两种方式读写W25Q64。 模拟时序更加方便移植到其他单片机,更加方便学习理解SPI时序,通用性更高,不分MCU; 硬件时序效率更高,每个MCU配置方法不同,依赖MCU硬件本身支持。 存储器件:采用华邦W25Q64 flash存储芯片。