![](https://csdnimg.cn/release/download_crawler_static/87152678/bg1.jpg)
STM32H7XX_KEIL_MDK_外部 FLASH_FLM 下载算法
1 MDK 下载算法基础知识
Flash 编程算法是一种用于擦除应用程序或将应用程序下载到 Flash 的程序代码,MDK
本身支持的各种器件都自带下载算法,存放在 MDK 各种器件的软件包里面,以 STM32H7 为
例,算法存放在/Keil/ARM/PACK/Keil/STM32H7xx_DFP/x.x.x/CMSIS/Flash,但是不支持的需要
我们自己制作。例如:我们使用外部 FLASH 做为 ISP 模式运行,调试时,就需要我们自己制
作对应于此外部 FLASH 的下载算法。
程序能够通过下载算法下载到芯片的核心思想:通过 MDK 创建一批与地址信息无关的
函数,实现的功能主要有初始化、擦除、编程、读取、校验等,然后 MDK 调试下载阶段,
会将算法文件加载到芯片的内部 RAM 里面(加载地址可以通过 MDK 设置),然后 MDK 通
过与这个算法文件的交互,实现程序下载,调试阶段数据读取等操作。
详细分析、说明可参考《安富莱_STM32-V7 开发板_用户手册,含 BSP 驱动包设计
(V3.1)》的第 84~86 章。
2 FLM 开发
2.1 FLM 工程建立
本章给出建立 MDK FLM 下载算法工程的大致操作流程,不限制必须采用这种方法,自
己建立也可以。
可以使用 KEIL_MDK 提供好的程序模板,位置位于 KEIL 安装路径下:
/Keil/ARM/PACK/ARM/CMSIS/version/Device/_Template_Flash。但是更推荐直接使用已经
做好的 STM32H7XX 的 FLM 工程做为模板,进行修改。
工程模板的主要修改点,请可参考《安富莱_STM32-V7 开发板_用户手册,含 BSP 驱动
包设计(V3.1)》的第 84.3 章节。
2.2 SPI Flash MDK 下载算法制作
2.2.1 FLM 开发制作前重要提示!!
1) 程序中不要开启任何中断,全部采用查询方式;
2) 由于 HAL 库里面有很多等待超时判断,是基于 sysTick,所以,需要重新实现
HAL_InitTick、HAL_GetTick、HAL_Delay 三个函数,用死等的方案来实现。
2.2.2 配置 IOC
配置原则:
1) 最小化配置,只配置下载算法所必须的组件:时钟、QSPI、OCTOSPI;
2) 为方便调试,可以多配置几个 GPIO,用于调试使用 FLM 时的问题、进度分析;
3) 推荐使用内部晶振