如何通过STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)

发布者:JoyfulJourney最新更新时间:2024-09-14 来源: elecfans关键字:STM32CubeMX  外部Flash 手机看文章 扫描二维码
随时随地手机看文章

前言

目前,越来越多的应用需要扩展外部的Flash来满足存储需求。那么,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作。由于STM32 ST-LINK Utility以及STM32CubeProgrammer中,对Flash支持的型号有限,只能覆盖一部分MCU和Flash的型号,无法完全满足客户的需求。而且,它提供的external loader的制作模板存在覆盖的芯片型号较少,且无法前期QSPI Flash调试的问题。本文旨在提供一种通过stm32CubeMX制作external Flash loader的方法。客户可以根据自己的型号,进行定制化的生成。本文中,以某客户实际使用的MCU(STM32H750) 和Flash(S25LP128F) 为例进行讲解。


准备工作

安装STM32CubeIDE

安装MCU对应型号的HAL库

External loader开发

External Loader的开发分成三个部分,第一部分是使用STM32CubeMX进行工程的配置及生成。第二部分是外部Flash的驱动调试,主要包含初始化,擦除,写入以及读出等操作。第三部分调用驱动函数进行external loader的生成,包括外部Flash信息的定义,包括Flash容量的大小,page的大小,以及Sector相关的信息;第三步中external loader所需要的代码及对应器件的驱动,可以在下面的GitHub仓库中获取,同时也欢迎大家将自己调试好的器件驱动提交到该仓库。

地址:

https://github.com/WellinZHANG/External_Loader

使用STM32CubeMX生成工程

此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。

新建工程

选择对应的器件,填入工程名称,并选择存放位置:

d80f9e9c-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

d851d1c2-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

管脚配置

按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。

d87ae382-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

d8ac1b8c-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

时钟配置

根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。

d916912e-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

生成工程

切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files per peripheral”选项。

d949fd5c-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

调试QSPI驱动

从开篇提到的GitHub仓库中获取相关的驱动代码。

d986c692-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

第一步

将External-Loaders QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。

d99d05d8-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

d9cbe81c-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

da5a4aee-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

da904932-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。

第二步

将External-LoadersQSPI DriversIS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。

dabff8c6-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

第三步

打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。

dad60e04-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

第四步

如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。

db19c4c8-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

修改配置生成QSPI Loader

完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。

第一步

添加对应的代码,存放在External-LoadersLoader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。

db42080c-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

db580292-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

第二步

修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。

db95168c-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

第三步

修改Linker的配置,通过“project”-> “Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。

dc083720-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

第四步

修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “post build steps”处添加如下指令:

dc39e3ba-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。

dc7d8dd6-5194-11eb-8b86-12bb97331649.png?imageView2/2/w/1000

总结

通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。


关键字:STM32CubeMX  外部Flash 引用地址:如何通过STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)

上一篇:HASH算法加密芯片的工作原理及其在STM32 MCU上的应用
下一篇:STM32CubeMX介绍,功耗计算,中间件,CAD视图

推荐阅读最新更新时间:2026-03-25 11:06

通过 STM32CubeMX制作外部Flash烧写驱动
前言 目前,越来越多的应用需要扩展外部的Flash来满足存储需求。那么,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作。由于STM32 ST-LINK Utility以及STM32CubeProgrammer中,对Flash支持的型号有限,只能覆盖一部分MCU和Flash的型号,无法完全满足客户的需求。而且,它提供的external loader的制作模板存在覆盖的芯片型号较少,且无法前期QSPI Flash调试的问题。本文旨在提供一种通过stm32CubeMX制作external Flash loader的方法。客户可以根据自己的型号,进行定制化的生成。本文中,以某客户实际使用的MCU(STM32H750) 和Fl
[单片机]
STM32F103标准库开发---SPI实验---W25Qxx系列外部Flash芯片
一、W25Qxx系列芯片----简介 W25Qxx 系列 Flash 存储器可以为用户提供存储解决方案。擦写周期多达10W次,可将数据保存达20年之久,支持2.7~3.6V的电压,支持标准的SPI,还支持双输出/四输出的SPI,最大SPI时钟可达80Mhz。 W25Qxx 系列 Flash 存储器是为系统提供一个最小空间、最少引脚,最低功耗的串行Flash存储器,比普通的串行Flash存储器更灵活,性能更优越。 功耗低,正常工作状态下电流消耗0.5mA,掉电状态下电流消耗1uA。 1. 存储结构 W25Qxx 系列 Flash 存储器的存储结构 相同点: 1块 = 16扇区 = 64k字节,1扇区 = 16页 = 4k
[单片机]
STM32F103标准库开发---SPI实验---W25Qxx系列<font color='red'>外部</font><font color='red'>Flash</font>芯片
STM32访问外部存储器-NOR-Flash
今天调试了一天STM32程序走了很多弯路,还好最后完全走通,调试过程中的一些经验总结如下: 1、不要完全相信编译器,很多时候可能你只是少了一个分号或者括号,编译器可能给你报一大堆不相关的错误,这时候如果想着一个个去改的话显然找不到正确答案。因此为了保险起见原先编译成功的程序在改动的时候,每改动一次就对相应的文件编译一次,这样可以避免一下子改动很多最后一编译出现很多错误不好定位。第一步编译只是编译当前文件,只有在build的时候才会对所有改动的文件重新编译,因此等到build的时候发现错误很多时候并不能很好定位。 2、加入功能时要注意改动几个地方;首先是/stm32f10x_conf.h中相应的头文件有没有去掉注释,这一点很
[单片机]
STM32采用Jlink烧写外部Nor Flash
使用STM32-5I开发板测试: https://item.taobao.com/item.htm?spm=a230r.1.14.275.76bf523QxvMsK&id=557618550100&ns=1&abbucket=6#detail 开发板PCB完整工程连接: http://www.cirmall.com/circuit/7 ... F%EF%BC%81#/details 1. 开始 - 所有程序 - SEGGER,打开安装Jlink的驱动SEGGER下的J-Flash 2. File - Open Project… - 打开STM32F103ZE_ST_MB672_CFI_1x16.j
[单片机]
STM32 串口烧写 FLASH 外部字库 UCGUI显示 自我学习总结
最近学习TFT显示问题,在多种汉字显示方面有点难,主要是字库太大,几个字库就不得了。开始是使用SD卡向外部FLASH---W25X16写,完全能够完成。后来觉得这样比较麻烦,有时候还没有SD接口,于是打算用串口写一下试一试,网上有很多人说会丢失数据,在后面的试验中暂时没有发现。 我是在我前段时间学习的UCGUI的基础基础上修改的。 主要功能是----启动开发板,首先写入地址指令----必须十六进制----比如---2A 23 00 05 00 03 23 2A-----其中2A,23为验证码,前后都有,第3,4位是地址码,前面就表示将要写入的起始地址是0x05*4096,第5,6位是为了写入数据将要从起始地址连续擦除的扇区
[单片机]
STM32 串口<font color='red'>烧写</font> <font color='red'>FLASH</font> <font color='red'>外部</font>字库 UCGUI显示 自我学习总结
Flash外部配置器件在SOPC中的应用
   1 Flash在SOPC中的作用   Flash在SOPC中的作用主要表现在两方面:一方面,可用Flash来保存FPGA的配置文件,从而可以省去EPCS芯片或解决EPCS芯片容量不够的问题。当系统上电后,从Flash中读取配置文件,对FPGA进行配置。另一方面,可用Flash来保存用户程序。对于较为复杂的SOPC系统,用户程序一般较大,用EPCS来存储是不现实的。系统完成配置后,将Flash中的用户程序转移到外接RAM或片内配置生成的RAM中,然后系统开始运行。    2 Flash编程的实现   本文以某项目的具体电路为例,阐述在SOPC系统中如何利用Flash来保存用户程序。FPGA为Altera公司的Cycl
[嵌入式]
<font color='red'>Flash</font><font color='red'>外部</font>配置器件在SOPC中的应用
STM32CubeMx GPIO口输出
stm32用hal库建立工程通用且方便,用的人也越来越多了,正点原子之前也有hal库的书还有例程,但是正点原子hal库的例程是以调用hal库的形式制作的,没有直接从cube的建立工程开始做起,并且在使用的过程中有根据项目更改过库函数。网上STM32Cube的教程也大多是v4、v5版本,和v6相比很多界面和功能有所变化,所以写了这个。文中部分内容参考正点原子开发指南和网上的文章教程。 工作环境: STM32CubeMXv6 Keil5 如果仅仅使用GPIO口执行输入输出的操作,那么RCC时钟,晶振,时钟树和中断都是可以不用配置使用默认的,建立工程后左键点击需要打开的IO口后选择GPIO_OUTPUT或GPIO_INPUT。
[单片机]
STM32核心知识入门指南:标准库、HAL库与STM32CubeMX零基础详解
初识STM32,那肯定要先了解它是什么,长话短说进入正文! STM32是什么,是一款来自意法半导体公司生产的32位微控制器系列产片,这里小楽就不多介绍了。 那刚接触嵌入式或其他同学就该疑惑了,为什么叫STM32?32位是什么?微控制器(MCU)又是什么?那小楽将一一解答。 各位,各位集中注意力! 一.STM32的介绍 一.微控制器(MCU)是什么 咱来先解决微控制器! 微控制器呢!是一种集成了多种功能模块的 嵌入式专用计算机芯片,广泛应用于各类电子设备的控制场景中。它将很多部件(这里的部件暂时先不急着介绍,容量有点大)集成在单个芯片上,具备完整的最小系统能力,可独立实现特定控制任务。 二.为什么叫STM32与32位是什么
[单片机]
STM32核心知识入门指南:标准库、HAL库与<font color='red'>STM32CubeMX</font>零基础详解
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved