APP的制作
github:https://github.com/HDJ1839822/STM32-_bootloader.git
由于STM32H750XB的Flash只有128K 稍微大一点的应用就装不下了,使用QSPI作为外部存储,这需要将QSPI配置为内存映射模式使用(我的QSPI为8MB)
但是没办法直接使用QSPI来启动代码,这需要我们使用 Bootloader来引导,基于此目的,制作一个bootloader,
先编写一个APP
这里主要是学习bootloader,app就随便点个灯吧,结合cubemx快速生成
使用定时器7作为时基

使用外部晶振

开启Icache 和Dcache

时钟开到最大480Mhz

这里需要注意需要为V版本,不然最大只有400M

LED的初始化

UART初始化(未开中断和DMA)

接下来生成代码
- MDK-ARM V5.27
- PACK FW_H7 V1.11.0
这里打印一句话 并让LED持续闪烁

先烧写验证下 这里我的串口成功打印了这句话并且LED持续闪烁

接下来修改链接文件(分散加载文件)让它的SP指针定位到外部的QSPI flash
其实我们可以通过两个地方修改,最直接的就是这里:如下
原来的配置

现在我们将最开始的起始地址更改为
QSPI的基地址 0X90000000
QSPI的大小 0X800000 8MB RAM保持一致不用变动 更改后如下

另一种方式就是直接更改分散加载文件


由于第一个步骤直接更改了,所以这里不用动了
现在还要做一件事情,将中断向量表的地址设置为QSPI的基地址,以及开启中断(因为会在bootloader中关闭中断,所以这里要开启)

现在APP就编写完成了,我们需要编译一次,再次查看一下map文件是否如我们所愿

验证这一步差不多就没毛病了
先总结一下APP
APP与正常程序一样编写,需要注意以下几点
- 需要更改分散加载文件,将ROM区域定位到外部QSPI flash的地址
- 在main函数 更改中断向量表的地址
- 开启中断
编写好了APP我们需要将它下载到QSPI里面,如何做到呢?
编写下载算法
了解到可以使用下载算法将代码直接下载到QSPI flash, 有以下三种工具
- 使用mdk keil下载
- 使用CubeProgrammer下载
- 使用ST-LINK Utility下载
个人觉得使用MDK下载比较方便,在使用keil的过程中,我们也会常使用到下载算法,如下,我们要制作的就是这个,只不过我们制作的是下载到外部QSPI flash上

接下来就开始制作下载算法,在制作算法之前我们需要把QSPI调通,见下一章节。