通过 STM32CubeMX制作外部Flash的烧写驱动

发布者:Harmonious222最新更新时间:2023-01-12 来源: zhihu关键字: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仓库中获取,同时也欢迎大家将自己调试好的器件驱动提交到该仓库。

地址:

github.com/WellinZHANG/

使用STM32CubeMX生成工程

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

新建工程

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

管脚配置

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

时钟配置

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

生成工程

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

调试QSPI驱动

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

第一步

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

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

第二步

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

第三步

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


第四步

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

修改配置生成QSPI Loader

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

第一步

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

第二步

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

第三步

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

第四步

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

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

总结

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


关键字:STM32CubeMX  外部Flash 引用地址:通过 STM32CubeMX制作外部Flash的烧写驱动

上一篇:关于STM32启动文件的几个小问题
下一篇:STM32串口用中断还是用轮询

推荐阅读最新更新时间:2024-11-09 16:27

STM32CubeMX输出可调频率与占空比的PWM
1,新建工程,我选的是STM32F103ZET6芯片,选择定时器的PWM功能。 2、配置时钟,我这里配的是内部时钟,有需要的可以自己改。 3、配置定时器,默认就可以,因为代码里面需要对配置的初始化代码进行修改的,而修改后才可以实现该功能。 4、生成代码后,修改代码,找到PWM初始化函数,修改为如下,注意要把初始化函数前面的 static 关键字也去掉,而且函数声明也要跟着修改。 void MX_TIM4_Init(uint16_t pre,uint16_t pul) //修改初始化函数,改变频率与PWM{ //占空比=Pulse/Period;频率:f=48M/pre/per TIM_MasterConfigTypeD
[单片机]
<font color='red'>STM32CubeMX</font>输出可调频率与占空比的PWM
玩转STM32CubeMX | PWM输出
1.PWM简介 脉冲宽度调制(PWM,Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。即对脉冲宽度的控制,PWM原理如下图示: 图中我们假定定时器是工作在向上计数PWM模式,且当CNT CCRx时输出0,当CNT = CCRx时输出1,那么就可以得到如上的PWM示意图:当CNT CCRx时,IO口输出低电平;当CNT = CCRx时,IO口输出高电平;当CNT值达到ARR的时候,重新归零,然后重新向上计数,依次循环。改变CCRx的值就可以改变PWM输出的占空比,改变ARR的值就可以改变PWM输出的频率 输出模式有两种:PWM1和PWM2
[单片机]
玩转<font color='red'>STM32CubeMX</font> | PWM输出
STM32CubeMX系列 | FATFS文件系统
1. FATFS文件系统简介 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构(即在存储设备上组织文件的方法)。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统;不带文件系统的SD卡仅能实现简单的读写扇区操作,要真正应用SD卡必须要使用文件系统 FATFS文件存储原理(以FAT32为例),下图为FAT32文件系统布局: 簇是文件存储的最小单元,FAT32分区大小与对应簇空间大小关系如下表示: 分区空间大小 簇空间大小 每个簇包含的扇区数 8GB 4KB 8 ; //磁盘是否初始化 Diskio_drvTypeDef *drv ; //磁盘的驱动 uint8_t
[单片机]
【STM32】HAL库 STM32CubeMX教程六----定时器中断
前言: 今天我们来学习定时器,32的定时器有着非常丰富的功能, 输入捕获/输出比较,PWM,中断等等。是我们学习STM32最频繁使用到的外设之一,所以一定要掌握好,这节我们讲解定时器中断,本系列教程将对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 5 知识概括: 通过本篇博客您将学到: SMT32定时器原理 STM32CubeMX创建定时器例程 HAL库TIM定时器函数库 定时器
[单片机]
【STM32】HAL库 <font color='red'>STM32CubeMX</font>教程六----定时器中断
stm32cubemx配置编码器
首先打开timer2的encoder模式: 配置系统时钟。 配置具体定时器的参数: 选择的encoderMode是 TI1和TI2模式。这种模式下,AB两相的上升沿和下降沿都会计数,所以计数值是实际值的4倍,需要做分频。也就是第一个参数,分频值设为3,实际上是3+1=4分频。 还有个地方需要解释一下,我刚开始的时候就是把这里的设置没搞清楚,看Polarity参数设置的是Rising Edge。这个参数的意思是在检测到上升沿的时候就触发encoder捕获AB相的值,而并不是这里设置的是上升沿就只检测AB相的上升沿,下降沿还是同样会计数的。 Input Filter滤波值是从1-15,看情况设定,是用来滤除一些杂波的。
[单片机]
<font color='red'>stm32cubemx</font>配置编码器
STM32CubeMX时钟配置详解
软件: (1)STM32CubeMX (2)SW4STM32 实验平台:STM32F407VET6开发板 使用STM32CubeMX的一个好处就是图形化配置,在时钟配置方面,主要了解清楚高级外设总线(APB1、APB2)控制哪些外设。 (0)先配置好PA6、PA7(控制LED灯),好观察实验现象 (1)首先配置RCC(复位和时钟控制),选择外部高速始终,如下图 (2)为了测试不同APB的时钟频率效果,在此选择了TIM1和TIM2,按下图配置 (3)为什么选择以上两个定时器作为例子?参考STM32F4XX中文参考手册,找到RCC相关内容,如图 可知TIM1 在APB2,TIM2 在APB1 (4)进入时钟配置,我的STM
[单片机]
<font color='red'>STM32CubeMX</font>时钟配置详解
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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