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

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

3天内不再提示

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

STM32单片机 来源:STM32单片机 作者:STM32单片机 2021-01-08 17:56 次阅读

通过 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进行工程的配置和生成。

新建工程

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

d80f9e9c-5194-11eb-8b86-12bb97331649.png

d851d1c2-5194-11eb-8b86-12bb97331649.png

管脚配置

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

d87ae382-5194-11eb-8b86-12bb97331649.png

d8ac1b8c-5194-11eb-8b86-12bb97331649.png

时钟配置

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

d916912e-5194-11eb-8b86-12bb97331649.png

生成工程

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

d949fd5c-5194-11eb-8b86-12bb97331649.png

调试QSPI驱动

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

d986c692-5194-11eb-8b86-12bb97331649.png

第一步

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

d99d05d8-5194-11eb-8b86-12bb97331649.png

d9cbe81c-5194-11eb-8b86-12bb97331649.png

da5a4aee-5194-11eb-8b86-12bb97331649.png

da904932-5194-11eb-8b86-12bb97331649.png

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

第二步

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

dabff8c6-5194-11eb-8b86-12bb97331649.png

第三步

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

dad60e04-5194-11eb-8b86-12bb97331649.png

第四步

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

db19c4c8-5194-11eb-8b86-12bb97331649.png

修改配置生成QSPI Loader

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

第一步

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

db42080c-5194-11eb-8b86-12bb97331649.png

db580292-5194-11eb-8b86-12bb97331649.png

第二步

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

db95168c-5194-11eb-8b86-12bb97331649.png

第三步

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

dc083720-5194-11eb-8b86-12bb97331649.png

第四步

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

dc39e3ba-5194-11eb-8b86-12bb97331649.png

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

dc7d8dd6-5194-11eb-8b86-12bb97331649.png

总结

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

责任编辑:xj

原文标题:工程师笔记 | 通过 STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

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

    关注

    10

    文章

    1635

    浏览量

    148058
  • 驱动
    +关注

    关注

    12

    文章

    1840

    浏览量

    85301
  • STM32
    +关注

    关注

    2270

    文章

    10900

    浏览量

    356152
  • 烧写
    +关注

    关注

    0

    文章

    57

    浏览量

    14293

原文标题:工程师笔记 | 通过 STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32CubeMX的菜单介绍

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

    STM32CUBEMX(10)--Flash读写

    概述 本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片,本例程采用的是STM32F030R8T6,64K大
    发表于 09-10 15:36

    如何使用STM32CubeMX修改STM32Cube_FW_MP2?

    在该固件包中我找不到任何通过STM32CubeMX生成的.ioc文件
    发表于 07-24 06:17

    求助,没有内部外部flash的esp32 s3可以程序到里面吗?

    没有内部外部flash的esp32 s3可以程序到里面吗
    发表于 07-01 07:12

    使用STM32CubeMX为Keil(uVision)制作了新项目,在Keil中却显示出许多错误的原因?

    我在 stm32CubeIDE 中实现了 WIFI 网桥,因此我想移动我的项目。 然后,我使用 STM32CubeMX 为 Keil(uVision)制作了新项目。 但在 Keil 中却显示出许多错误,而且构建时间将近 20 分
    发表于 05-31 07:06

    stm32cubemx配置单片机的USB外设为CDC模式,程序时出错怎么解决?

    我用的单片机型号是STM32L496VGT3,按照网上的教程用STM32CUBEMX将单片机的USB外设配置为CDC模式,生成代码之后在程序是总是提示下面的错误,请问有哪位遇到过类
    发表于 04-29 08:09

    STM32CUBEMX配置STM32L496VGT3芯片,的时候报错的原因?

    本人现在在用STM32CUBEMX配置STM32L496VGT3芯片,并按照网上的教程将芯片的USB外设配置为了CDC类,但是在的时候出现了如下错误,请问想要PC机能够识别USB设
    发表于 04-28 07:13

    使用STM32CubeMX生成代码,调试始终都不通过是为什么?

    我使用STM32CubeMX生成代码,调试始终都不通过,请大家给给意见!! 故障现象:电脑识别为Mass Storage但无法安装驱动失败,用抓包软件观察为“Set Configration
    发表于 04-28 06:04

    STM32Cubemx驱动STME32F407的TFTLCD花屏是什么原因导致的?

    STM32Cubemx 驱动STME32F407的TFTLCD始终花屏,求帮助,谢谢
    发表于 04-18 06:02

    STM32cubemx的库和KEIL的库有什么不同?

    STM32cubemx软件有对应各个系列芯片的库. 使用cubemx,生成代码框架,比如生成MDK的代码框架。但MDK也有自己的PACK。那么MDK的PACK和CUBEMX的库有什么区别,两者时什么关系呢?
    发表于 04-11 06:02

    stm32cubemx customHID编译了,用usb连电脑但是Demonstrator刷不到这个驱动是为什么?

    stm32cubemx的pack包里的 官方源代码customHID编译了,用usb连电脑,但是Demonstrator刷不到这个驱动
    发表于 04-02 07:43

    STM32H743ZIT6 keil程序不进去,报错的原因?怎么解决?

    out...,且有时能识别JTAG,有时只能识别SWD. 3.尝试了方法: 1)重新其他程序(从stm32cubemx 只配置jtag 5pin +1个GPIO点灯),同样不能
    发表于 03-27 06:36

    STM32CUBEMX界面重影严重怎么解决?

    STM32CUBEMX 界面重影严重,有相同问题的吗
    发表于 03-14 07:13

    STM32Cubemx配置USB虚拟串口,电脑无法识别怎么解决?

    STM32Cubemx配置USB虚拟串口,电脑无法识别问题?(上拉和驱动都配置好了)
    发表于 03-08 07:00

    stm32 flash数据怎么存储的

    stm32 flash数据怎么存储的  STM32是一款广泛应用于嵌入式系统开发的微控制器,它的Flash存储器是其中一个重要的组成部分。
    的头像 发表于 01-31 15:46 2410次阅读