一、实现目标
使用cubeMX建立项目工程,结合正点原子提供的hal库对W25Q64闪存调用的例程,实现W25Q64的读写。
二、实现过程
1、首先建立cubeMX工程,其他项设置不再叙述,只看连接W25Q64的SPI设置,这里使用SPI1:
![](https://file.jishuzhan.net/article/1750546825464516609/d8e68004737d7cb0eab180176468f09a.webp)
![](https://file.jishuzhan.net/article/1750546825464516609/834a9d6a65e098e40c82778c412668b7.webp)
设置完成后,使用SPI的引脚会自动标注,如下图
![](https://file.jishuzhan.net/article/1750546825464516609/9782d4588e02c533ab289075d4cb3a1e.webp)
2、手动设置添加W25Q64的片选引脚PA2为输出引脚:
![](https://file.jishuzhan.net/article/1750546825464516609/9861dd638060de3a4f3f95cbe731cabf.webp)
3、设置完成,生成代码
4、打开项目代码后,可看到已经生成的SPI.C代码:
![](https://file.jishuzhan.net/article/1750546825464516609/e02882ee4c85f601aabc92616587fd7b.webp)
5、添加正点原子hal库的w25q64驱动程序,如下图,注意先添加.C程序后也要添加w25q64.h的头文件路径,具体添加过程不再叙述。
![](https://file.jishuzhan.net/article/1750546825464516609/cfb2bcc7bf95ccf878da24e0338d930e.webp)
6、添加完成后,需要修改一部分w25q64.c和w25q64.h,首先将片选PA2引脚重新宏定义置高低电平:
![](https://file.jishuzhan.net/article/1750546825464516609/8bfd33d2c241968dcccb778dc825ab70.webp)
7、然后在w25q64.c中添加一个1us的延时函数,因为后面驱动函数中要用到1us延时:
![](https://file.jishuzhan.net/article/1750546825464516609/e5f486a29b9b84571a6d77fc874160ef.webp)
8、然后将w25q64.c中原有初始化SPI的程序代码注释掉
![](https://file.jishuzhan.net/article/1750546825464516609/ff36eee743d67f7b1005ba5f0bfcd4bf.webp)
9、最后替换驱动函数中所有的片选引脚的置高和置低语句,如下图:
![](https://file.jishuzhan.net/article/1750546825464516609/d94bf83c4f964d392e83d2c468ed295b.webp)
![](https://file.jishuzhan.net/article/1750546825464516609/63a117b46c90ad9eab26c8ea503cc27d.webp)
![](https://file.jishuzhan.net/article/1750546825464516609/753e6707306fb06479d1e206a65ae8c4.webp)
10、main函数中仍然使用正点原子的例程代码如下
![](https://file.jishuzhan.net/article/1750546825464516609/16d083741bc3e130768570f54e388d9a.webp)
可以实现将TEXT_Buffer数组的数据写入flash中,地址为倒数第100个地址,该地址也可以更改为从0地址开始写,然后从该地址读出数据,显示在屏幕上,从而实现了数据存储在flash中,掉电后flash中的数据不会清空。