APP的制作

github:https://github.com/HDJ1839822/STM32-_bootloader.git

由于STM32H750XB的Flash只有128K 稍微大一点的应用就装不下了,使用QSPI作为外部存储,这需要将QSPI配置为内存映射模式使用(我的QSPI为8MB)

但是没办法直接使用QSPI来启动代码,这需要我们使用 Bootloader来引导,基于此目的,制作一个bootloader,

先编写一个APP

这里主要是学习bootloader,app就随便点个灯吧,结合cubemx快速生成

使用定时器7作为时基

image-20231013210306362

使用外部晶振

image-20231013210435427

开启Icache 和Dcache

image-20231013210511834

时钟开到最大480Mhz

image-20231013210620479

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

image-20231013210711134

LED的初始化

image-20231013210256892

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

image-20231013210848550

接下来生成代码

  • MDK-ARM V5.27
  • PACK FW_H7 V1.11.0

这里打印一句话 并让LED持续闪烁

image-20231013212142727

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

image-20231013212357799

接下来修改链接文件(分散加载文件)让它的SP指针定位到外部的QSPI flash

其实我们可以通过两个地方修改,最直接的就是这里:如下

原来的配置

image-20231013212759426

现在我们将最开始的起始地址更改为

   QSPI的基地址   0X90000000
   QSPI的大小     0X800000          8MB      

RAM保持一致不用变动 更改后如下

image-20231013213604207

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

image-20231013214411696

image-20231013214851119

由于第一个步骤直接更改了,所以这里不用动了

现在还要做一件事情,将中断向量表的地址设置为QSPI的基地址,以及开启中断(因为会在bootloader中关闭中断,所以这里要开启)

image-20231013214031383

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

image-20231013215805809

验证这一步差不多就没毛病了

先总结一下APP

APP与正常程序一样编写,需要注意以下几点

  • 需要更改分散加载文件,将ROM区域定位到外部QSPI flash的地址
  • 在main函数 更改中断向量表的地址
  • 开启中断

编写好了APP我们需要将它下载到QSPI里面,如何做到呢?

编写下载算法

了解到可以使用下载算法将代码直接下载到QSPI flash, 有以下三种工具

  • 使用mdk keil下载
  • 使用CubeProgrammer下载
  • 使用ST-LINK Utility下载

个人觉得使用MDK下载比较方便,在使用keil的过程中,我们也会常使用到下载算法,如下,我们要制作的就是这个,只不过我们制作的是下载到外部QSPI flash上

image-20231013204621008

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

如果觉得我的文章对你有用,请随意赞赏