STM32驱动SPI Flash(W25Q16)

2019年5月28日 0条评论 50次阅读 N/A分 嵌入式

一、开发平台

  1. STM32F103ZET6@72MHz with 64KB RAM and 512KB Flash ROM
  2. W25Q16 (16Kbit=2MB) SPI Flash ROM
  3. Keil μVision 5.06

二、硬件设计

Flash和单片机连接电路如下图所示

Flash和单片机电路连接

PA4~PA7对应的是STM32的硬件SPI1控制器。

三、驱动设计

1.驱动SPI

今次为了快速开发,没有使用DMA,而是轮询的方法进行SPI读写,主要涉及SPI的初始化和一般读写:

SPI1.c文件内容 [展开]

2.驱动Flash

Flash的读写时序请自行参考网上的教程,很容易搜索到,基本上就是基于命令和响应,发送对应读写或控制查询命令给芯片然后读取返回值。这里直接移植正点原子的程序到我的板子上。

原子开发板使用的是SPI2,而我的板子是SPI1,所以把内部所有SPI2函数改为SPI1(由上一节的程序所驱动)即可。不过要注意根据你是用的Flash容量来修改变量W25QXX_Type变量,因为在初始化时程序会读芯片内的某编号,用于校验芯片型号是否符合。同时注意修改CS片选引脚。如下图

当然如果你使用的其他型号的FLASH理论上也能参考着修改,因为它们的工作方式都差不多,只是命令和编号上有些许不同,参考手册基本可以解决。

四、测试与结论

主函数调用 W25QXX_Init(); 进行初始化,随后调用 W25QXX_Read 和 W25QXX_Write 函数对同一个地址进行读写(注意不要超过最大容量),验证读出来的数据和写入的数据一致,本次移植成功。

Please wait...
 

发表评论