1. 摘要
本篇笔记主要介绍,如何在STM32H743上进行QSPI的操作和驱动。为项目进一步开发快速验证。
2. 准备工作
1), IAR 8.32.1
2), STM32Cube_FW_H7_V1.6.0
3. QSPI简介
4. QSPI驱动
在项目的开发中,我们经常会使用外挂Flash在做一些应用,而STM32H743带QSPI接口,可以用来外挂QSPI Flash,我们以winbond华邦的W25Q256为例来说明,借助ST的HAL库例程可以快速验证,首先要熟悉一下W25Q256的数据手册常用命令操作,基于STM32H743I-EVAL板子的例程(注意例程是驱动双片,要做相应修改),根据实际自己的板卡做一些改动和移植,一般硬件电路比较简单,大部分都通用,
软件驱动我们参考H7_V1.6.0QSPI例程里面的以DMA来读写。
编译例程无误后,移植修改,管脚,中断优先级,主要是不同引脚封装的 CS管脚可能不同,24位地址和32位地址的操作命令也不同,需要注意一下,首先分析例程的框架,熟悉结构,而后即可根据自己的实际应用动手修改。
修改stm32h7xx_hal_msp.c文件,
如果不使用DMA操作则屏蔽掉上面蓝色背景色代码DMA的初始化。
配置参数修改:
根据自己的实际,修改初始化配置参数,如时钟分频,FIFO大小,Flash大小,我们使用的是256M bit即32Mbyte大小的Flash, 225 = 33554432(0x2000000), 这个地址我们要熟悉。地址大小改为32位。
擦除操作修改:
改为4字节SECTOR擦除操作指令,按64k大小擦除,常用的指令都在main.h里面可以参考宏定义。
擦除操作的时序图
写操作修改:
写操作按页写,每一页256字节。将写指令由0x32改为0x34, 程序就是完成下面的时序图
读操作修改:
读操作的修改需要根据时序图加入8个Dummy空周期操作,
修改static void QSPI_DummyCyclesCfg(QSPI_HandleTypeDef *hqspi)函数,改为
注释掉498行,改为499行。
读程序就是完成下面读操作的时序图:
完成移植后,编译无误后,可下载到板子测试。
5. 测试验证
从0地址开始按页写,程序中是64k擦除,按页写,每次测试周期都是擦除->写->读->比较正误。如果读写完全一致,则地址加256,开始下一页循环操作,直到所有地址操作完。
通过测试最后一幅图可以看到测试完整个32M地址空间,测试时间比较长,单页很快,整个空间会比较耗时,至此QSPI的操作移植验证操作完成。
在HAL库中,H743_EVAL的官方还提供了下图的驱动,但是感觉不好用,有兴趣的可以看看。
6. 参考文档
序号 | 文献 |
---|---|
1 | STM32H743RM |
2 | STM32Cube_FW_H7_V1.6.0 |