使用STM32CubeMX制作外部Flash编程驱动程序(.stdlr)前言当前,越来越多的应用程序需要扩展外部Flash以满足存储需求。然后,在调试和批量生产过程中,需要刻录外部扩展的Flash。
由于STM32ST-LINKUtility和STM32CubeProgrammer的支持Flash的型号有限,因此它们只能涵盖部分MCU和Flash模型,不能完全满足客户的需求。此外,它提供的externalloader生产模板存在一个问题,即它涵盖的芯片模型较少,并且无法在早期阶段由QSPIFlash进行调试。
本文旨在提供一种通过stm32CubeMX制作externalFlashloader的方法。客户可以根据自己的模型定制世代。
本文以客户实际使用的MCU(STM32H750)和Flash(S25LP128F)为例进行说明。准备工作,安装STM32CubeIDE,安装与模型对应的MCU的HAL库,Externalloader开发,ExternalLoader开发分为三个部分,第一部分是使用STM32CubeMX来配置和生成项目。
第二部分是外部Flash的驱动程序调试,主要包括初始化,擦除,写入和读取等操作。第三部分调用驱动程序函数生成外部加载程序,包括外部Flash信息的定义,包括Flash容量的大小,页面的大小以及与Sector相关的信息;在第三步中,外部加载器和相应设备的驱动程序所需的代码可以在下面的GitHub存储库中获取它,也欢迎您将调试后的设备驱动程序提交到该存储库。
地址:https://github.com/WellinZHANG/External_Loader使用STM32CubeMX生成项目。在这里,我们使用与STM32CubeIDE集成在一起的STM32CubeMX进行项目配置和生成。
创建一个新项目,选择相应的设备,填写项目名称,然后选择存储位置:根据硬件原理图进行引脚配置,选择相应的Flash引脚,这里是Bank2,配置如图所示以下。注意将引脚的速度调整为高电平,并同时使能QSPI中断。
FlashSize值设置为N,并且Flash大小配置为2N + 1。时钟配置基于板上的时钟源,并执行相应的时钟配置。
此处,内部时钟源用作系统PLL。要生成项目,请切换至CodeGenerator标签,然后选中“ Generateperioheralinitializationaspairof..c / .h” filesperperipheral”。
选项。调试QSPI驱动程序从开头提到的GitHub存储库中获取相关的驱动程序代码。
第一步是将External-LoadersQSPI测试目录的mian_test.c中的代码添加到项目中相应的main.c文件中。请注意,添加代码时,请保留USERCODEBEGINx和USERCODEENDx标记,否则当CubeMX重新生成代码时,添加的代码将被覆盖。
第二步是将外部加载器QSPIDriversIS25LP128F目录中的QSPI HAL驱动程序文件替换为项目中的相应文件。第三步是打开CubeMX并重新生成项目。
因为要适应所有系列的QSPI接口,GitHub提供的QSPI的HAL驱动程序不提供相应的QSPI外设配置功能,而该功能需要通过CubeMX生成。第四步如上图所示,因为每种型号的FLASH的控制指令略有不同,因此您需要根据在此步骤中选择的QPSIFLASH设备进行调整。
同时,有必要调试QSPI的读写是否正常。如果QSPIFlash无法正常读写,请在下图中标记的位置添加一个断点,以找出哪个链接错误,然后进一步调整驱动程序。
修改配置以生成QSPILoader完成QSPI驱动程序调试后,我们需要添加生成externalLoader所需的代码并修改相应的配置。第一步是添加相应的代码并将其存储在External-LoadersLoader_Files目录中。
由于H7与其他系列的链接器文件不同,因此将其存储在H7和其他两个文件夹中。在这里,我们选择H7目录下的问题件。
将所有文件添加到项目中。第二步是将Dev_Inf.c中的名称修改为要设置的名称,通常将其设置为MCU + Flash名称。
第三步是修改链接器的配置,并通过“项目”菜单打开设置页面。 -> “属性”。
将红色框中的ld文件修改为linker.ld。 (已在第一步中添加到项目中)。
第四步是修改配置和生成。