0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

MCU开发加油站 来源:STM32单片机 作者:STM32单片机 2021-01-18 16:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

目前,越来越多的应用需要扩展外部的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进行工程的配置和生成。

新建工程

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

802fffea-5758-11eb-8b86-12bb97331649.png

8061ef78-5758-11eb-8b86-12bb97331649.png

管脚配置

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

808ce4bc-5758-11eb-8b86-12bb97331649.png

80bcae2c-5758-11eb-8b86-12bb97331649.png

时钟配置

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

80ed1b84-5758-11eb-8b86-12bb97331649.png

生成工程

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

811d17bc-5758-11eb-8b86-12bb97331649.png

调试QSPI驱动

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

81399ec8-5758-11eb-8b86-12bb97331649.png

第一步

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

81720402-5758-11eb-8b86-12bb97331649.png

82071114-5758-11eb-8b86-12bb97331649.png

82278e26-5758-11eb-8b86-12bb97331649.png

824b6cc4-5758-11eb-8b86-12bb97331649.png

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

第二步

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

826499d8-5758-11eb-8b86-12bb97331649.png

第三步

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

829da6d8-5758-11eb-8b86-12bb97331649.png

第四步

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

82ffd920-5758-11eb-8b86-12bb97331649.png

修改配置生成QSPI Loader

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

第一步

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

83348ee0-5758-11eb-8b86-12bb97331649.png

8353ebf0-5758-11eb-8b86-12bb97331649.png

第二步

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

8372bb52-5758-11eb-8b86-12bb97331649.png

第三步

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

83be50e4-5758-11eb-8b86-12bb97331649.png

第四步

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

84d0b828-5758-11eb-8b86-12bb97331649.png

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

850878f8-5758-11eb-8b86-12bb97331649.png

总结

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

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18604

    浏览量

    386618
  • FlaSh
    +关注

    关注

    10

    文章

    1715

    浏览量

    154669
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371061

原文标题:通过 STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问RT-Thread与stm32cubemx联合开发的原理是什么?

    在使用RT-Thread与stm32cubemx联合开发的原理是什么,cubemx在其中主要起到了哪些功能呢?
    发表于 10-11 15:49

    意法半导体:STM32CubeMX将不再集成到STM32CubeIDE中

    从2025年11月发布的版本开始,我们将仅以 独立 版本的形式提供 STM32CubeIDE 和 STM32CubeMXSTM32CubeMX将不再集成到STM32CubeIDE
    的头像 发表于 09-01 17:18 2616次阅读

    FLASH/编程白皮书

    白皮书:如何Flash——不同场景不同需求下的选择认识Flash NAND vs. NOR如何
    发表于 07-28 16:05 0次下载

    对于在STM32CubeMx使用FMC中的NAND FLASH里面配置这些时间有什么说明吗?

    对于在STM32CubeMx使用FMC中的NAND FLASH里面配置这些时间有什么说明吗?
    发表于 07-21 07:07

    请问使用CubeMX选择芯片生成项目时如何选择外部晶振?

    我从网上购入了STM32F103C8T6的核心板,板上有外部晶振。但我使用STM32CubeMX生成项目时,却无法选择外部晶振(如下图)。请问要在哪里设置才能选择
    发表于 04-22 09:17

    STM32开发入门进阶必备!《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》新书发布!

    近日,由华清远见教育科技集团精心编撰的教育部高等学校电子信息类专业教学指导委员会规划教材、普通高等教育电子信息类专业系列教材——《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》重磅
    的头像 发表于 04-03 14:54 1364次阅读
    <b class='flag-5'>STM32</b>开发入门进阶必备!《<b class='flag-5'>STM32</b>嵌入式系统开发—基于<b class='flag-5'>STM32CubeMX</b>和HAL库》新书发布!

    请问STM32cubeMX中文版怎么设置?

    STM32cubeMX中文版怎么设置?
    发表于 03-13 06:12

    myST账号无法注册导致stm32cubemx无法下载hal库的固件包,为什么?

    myST账号无法注册导致stm32cubemx无法下载hal库的固件包,myST账号注册卡在最后的邮箱验证环节,一直卡着无法注册通过 很急很急!以前stm32cubemx都不需要登录myST账号就能下载固件包了,为什么现在搞个
    发表于 03-11 06:17

    STM32CubeMX生成的FreeRTOS源码格式如何优化?

    如图,STM32CubeMX生成的FreeRTOS源码格式有待优化,空格都是以箭头的方式呈现,观感很差。FreeRTOS官方下载的源码则不存在这个问题,说明是STM32CubeMX生成源码的过程出现的格式问题,希望ST官方能对此做下优化!
    发表于 03-10 08:04

    使用STM32CubeMX生成CMake工程中的FLASH.ld被更改怎么解决?

    使用STM32CubeMX生成CMake工程之后,对STM32xxxx_FLASH.ld进行了修改。然后再次使用STM32CubeMX对工程进行修改的时候,STM32xxxx_FLASH
    发表于 03-10 06:52

    STM32CubeMX用于STM32配置和初始化C代码生成

    电子发烧友网站提供《STM32CubeMX用于STM32配置和初始化C代码生成.pdf》资料免费下载
    发表于 02-26 17:32 678次下载

    工程师开发利器:STM32CubeMX 与 eDesignSuite 的协同开发

    HAL 库实现高效控制。示例:通过 CubeMX 配置 PWM 输出和 ADC 采样,配合 eDesignSuite 的电机驱动算法,快速实现电机调速功能。系统级验证与优化利用 STM32C
    的头像 发表于 02-26 14:07 1111次阅读
    工程师开发利器:<b class='flag-5'>STM32CubeMX</b> 与 eDesignSuite 的协同开发

    请问DLPC4422 flash首次需要离线完成吗?

    做了一块dlpc4422单板,flash第一次需要使用片机进行吗,文件是.img文件
    发表于 02-26 07:07

    使用stm32cubeMX无法生成mdk工程文件?

    几年前使用过cubemx,可以生成keil的工程文件。最近有个工程使用cubemx创建,结果只能生成stm32cubemx类型的文件,无法生成mdk的工程文件。 请教如何解决。 (我之前使用过多次
    发表于 01-04 20:03

    STM32CubeMX的菜单介绍

    相信初学者打开STM32CubeMX一定是一脸懵逼,里面都是全英文的,不知道从何入手。这里先给大家简单讲解一下。在新建工程这一栏里,我们最常用的是第一个,它会弹出一个芯片列表供你选择,然后就会创建一
    的头像 发表于 12-25 21:03 691次阅读
    <b class='flag-5'>STM32CubeMX</b>的菜单介绍