
82.1 初学者重要提示 操作本章配套例子前务必先将QSPI Flash的下载算法放到MDK安装目录。 QSPI Flash执行程序的BOOT和APP作用: BOOT程序需要下载到内部Flash。主要用于跳转到外部QSPI Flash执行程序。那么问题来了,我们可不可以不使用BOOT,上电就直接执行QSPI Flash的程序?不行,因为QSPI Flash不像内部Flash,无需初始化,上电就可以使用,而QSPI Flash不行。 APP应用程序要下载到QSPI Flash里面。APP应用程序可以在QSPI Flash里面执行主要是因为W25Q256支持XIP(Execution In Place),并且STM32H7的QSPI Flash支持内存映射。 82.2 下载算法存放位置 编译例子:V7-060_QSPI Flash的MDK下载算法制作,生成的算法文件位于此路径下: ![]() 生成算法文件后,需要大家将其存到到MDK安装目录,有两个位置可以存放,任选其一,推荐第2种: 第1种:存放到MDK的STM32H7软包安装目录里面:\Keil\STM32H7xx_DFP\2.6.0\CMSIS\Flash(软包版本不同,数值2.6.0不同)。 第2种:MDK的安装目录 \ARM\Flash里面。 ![]() 82.3 QSPI Flash的Bootloader说明 Bootloader的实现比较简单,需要大家将其下载到内部Flash。程序实现上主要注意以下两点即可。 82.3.1 初始化QSPI Flash并设置内存映射模式 在bsp.c文件中初始QSPI Flash并设置为内存映射模式。
82.3.2 程序跳转的实现 从内部Flash跳转到外部QSPI Flash的实现代码如下
这里把程序设计中的几个关键地方做个说明: 第12行,声明一个函数指针。 第13行,QSPI Flash地址在0x90000000。 第20行,此函数比较省事,可以方便的设置H7所有时钟到复位值,内部时钟使用HSI。 第23到25行,设置滴答定时器到复位值。 第28到32行,清除所有中断挂起标志并关闭中断,这里是直接通过一个for循环设置了NVIC所有配置位,共8组。 ![]() 第38行,将系统bootLoader的中断复位服务程序的入口地址赋给第12行声明的函数,用户执行这个函数时,就会直接跳转过去。 第41行,设置主堆栈指针位置,即QSPI Flash应用程序首地址存储的就是栈地址。 第44行,这个设置在RTOS应用程序中比较重要,因为基于Cortex-M内核的RTOS任务堆栈基本都是使用线程堆栈指针PSP。但系统bootLoader使用的是主堆栈指针MSP,所以务必要设置下,同时让M内核工作于特权级。此寄存器的作用如下: ![]() 第47行,跳转到系统bootLoader。 82.4 QSPI Flash的APP应用程序说明 APP应用程序是由第53章配套例子:V7-033_LCD的汉字小字库和全字库制作 简单修改而来,主要修改如下两个地方: 82.4.1 设置Flash地址 设置Flash地址为QSPI Flash首地址0x90000000: ![]() 82.4.2 设置中断向量表 在main函数最开始就设置中断向量表到QSPI Flash首地址0x90000000,也可以按照本教程第28章的说明,将中断向量表设置到DTCM里面。
82.5 QSPI Flash的APP应用程序调试下载配置 将下面两个地方配置后,就可以像使用内部Flash一样使用QSPI Flash进行调试了。 82.5.1 下载配置 注意这里一定要够大,否则会提示算法文件无法加载: ![]() 我们这里是将其加到DTCM中,即首地址为0x20000000,大家也可以存储到任意其它RAM地址,只要空间还够加载算法文件即可。推荐使用AXI SRAM(地址0x24000000),因为这块RAM空间足够大。 如果要下载程序到QSPI Flash里面,需要做如下配置: ![]() 82.5.2 调试配置 注意这里一定要够大,否则会提示算法文件无法加载: ![]() 我们这里是将其加到DTCM中,即首地址为0x20000000,大家也可以存储到任意其它RAM地址,只要空间还够加载算法文件即可。 如果要做调试下载,需要做如下配置: ![]() 82.5.3 程序调试效果 APP应用程序调试效果如下: ![]() 82.6 实验例程说明 本章配套了两个例子: V7-062_QSPI Flash运行程序(Bootloader)。 V7-063_QSPI Flash运行程序(用户APP)。 Bootloader例子需要大家先下载到内部Flash里面,然后按照本章第5小节的说明配置后,就可以像使用内部Flash一样调试下载QSPI Flash了。 82.7 总结 本章节就为大家讲解这么,为了熟练掌握,建议大家是操作练**。 |
拷打cubemx【003】——找不到的芯片包
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法