如何通过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

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进行烧录。


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

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

推荐阅读最新更新时间:2024-11-12 07:45

STM32CubeMx开发之路—3发送USART数据和printf重定向
运行环境 Windows10 STM32CubeMX___Version 5.0.0 Keil5(MDK5)___Version 5.15 简介 本例程主要讲解如何通过串口发送数据和重定向printf STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—1配置第一个项目 STM32CubeMx USART1配置 1——点击USART1进行设置 2——模式选择Asynchronous异步传输 3——可以看到右边自动出现了Tx和Rx 4——可以自行设置波特率,停止位,校验位等参数 代码修改 1——选择main.c文件 2——在USER CODE中添加如下代码,重定向printf
[单片机]
<font color='red'>STM32CubeMx</font>开发之路—3发送USART数据和printf重定向
STM32CubeMX学习--(4)CAN使用
CUBE配置 CAN参数配置 配置引脚PD0 PD1为CAN功能。 在Connectivity- CAN1中勾选Master Mode。 在ParameterSettings中配置: NVIC Settings中勾选RX0中断 在NVIC中配置CAN1中断组为2 2 修改代码 添加bsp_can.c文件,代码如下: #include bsp_can.h #include main.h #define CAN1FIFO CAN_RX_FIFO0 #define CAN1FIF1 CAN_RX_FIFO1 CAN_TxHeaderTypeDef TxMeg; CAN_RxHeaderTypeDef RxMeg; vo
[单片机]
<font color='red'>STM32CubeMX</font>学习--(4)CAN使用
STM32CubeMX使用方法及功能介绍
Ⅰ、写在前面 主要讲述STM32CubeMX菜单及相关功能,简单讲述一下新建工程,后面结合实际例子讲述新建工程配置的具体细节。 Ⅱ、STM32CubeMX主界面描述 打开安装好的STM32CubeMX,看到其主界面如下: 主要看到信息有: 1.菜单栏:打开软件只有4个主菜单,在新建工程后有5个菜单; 2.快捷按钮栏:这些按钮在菜单栏里面都能找到; 3.新建工程:我们打开软件,新建工程就是点击该按钮; 4.导入工程:如果之前有建好的工程,可以点击该处导入工程; 5.帮助:帮助功能都应该知道,可点击菜单help或按F1键打开帮助文档。 1.菜单栏 打开软件时有四个菜单:文件File、工程Project、Window窗
[单片机]
<font color='red'>STM32CubeMX</font>使用方法及功能介绍
STM32通过串口向外部FLASH(W25X16)写入字库
系统中使用过多的汉字会出现芯片容量不够用的问题,可将数据存储在外部FLASH中,在需要使用时进行调用即可。本文是通过STM32串口1实现对W25X16的汉字字库存储。软件层面,配置串口1和SPI1即可,程序初始化后,在对W25X16进行写之前,必须先擦除,可以一个字节、一页、一扇区、一块以及整片擦除。写字库前,我们用整片擦除方式,如下: 整个程序中,关键在于串口接收中断函数的编写,如下: u32 WriteAddress=0; void USART1_IRQHandler(void) { u8 Res; if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) {
[单片机]
STM32通过串口向<font color='red'>外部</font><font color='red'>FLASH</font>(W25X16)写入字库
STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收
参考资料: 1、ST HAL库官网资料 2、https://blog.csdn.net/u014470361/article/details/79206352#comments 一、STM32CubeMX配置外部时钟 注意在进行外部时钟配置时,即“High Speed Clock”和“Low Speed Clock”需配置成“Crytal/Ceramic Resonator(低温/陶瓷谐振器)”不能配置为 BYASS Clock Source(时钟脉冲源) ,否则系统起不来。 二、SWD下载接口配置 如果用HAL库不进行SWD或JTAG配置,单片机只能进行下载一次程序,要进行第二次或更多次程序下载,需要按复位键(如
[单片机]
<font color='red'>STM32CubeMX</font> HAL库串口+DMA数据发送不定长度数据接收
STM32CubeMX | 42 - 使用DMA2D加速显存数据传输
一、使用CPU搬运数据到显存 在上一篇文章中讲述了如何配置 LTDC 驱动 RGB 屏幕: STM32CubeMX | 41-使用LTDC驱动TFT-LCD屏幕(RGB屏)。 本节中我们接着上一节的实验,讲述如何使用 DMA2D 实现打点、画线、填充等函数,只需要单层全屏即可,修改LTDC层配置如下: 1. 编写lcd驱动头文件 创建lcd_rgb_ltdc_drv.h文件,存放关于操作LCD屏幕的一些宏定义配置和函数定义: #ifndef _LCD_RGB_LTDC_DRV_H_ #define _LCD_RGB_LTDC_DRV_H_ #include ltdc.h /** * @brief Window
[单片机]
<font color='red'>STM32CubeMX</font> | 42 - 使用DMA2D加速显存数据传输
STM32CubeMx(Keil5)开发之路——3发送USART数据和printf重定向
运行环境 Windows10 STM32CubeMX___Version 5.0.0 Keil5(MDK5)___Version 5.15 简介 本例程主要讲解如何通过串口发送数据和重定向printf STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—1配置第一个项目 STM32CubeMx USART1配置 1——点击USART1进行设置 2——模式选择Asynchronous异步传输 3——可以看到右边自动出现了Tx和Rx 4——可以自行设置波特率,停止位,校验位等参数 代码修改 1——选择main.c文件 2——在USER CODE中添加如下代码,重定向print
[单片机]
<font color='red'>STM32CubeMx</font>(Keil5)开发之路——3发送USART数据和printf重定向
STM32CubeMX:UART操作
UART共有三种操作方式,轮询方式、中断方式以及DMA方式。 芯片:STM32F103C8T6 应用管脚: 输出:PA0、PA1 USART1 配置界面 添加中断配置 添加DMA配置 代码应用 1.实现printf函数 /* USER CODE BEGIN 0 */ #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTO
[单片机]
<font color='red'>STM32CubeMX</font>:UART操作
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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