【官方原创】防止STM32CubeMX删除用户文件的方法 LAT1442

关键字:STM32H5,LwIP,STM32CubeMX

1. 引言

STM32CubeMX为了简化工程,通常情况下,会把一些它认为不再需要的文件删掉,

但是对于有些用户自己添加第三方软件包的情况来说,会给用户带来一定的困扰。

2. 问题

2.1. 问题详情

客户在开发其产品过程中,使用了STM32H563ZIT6。因为STM32CubeH5这个

Cube包中,可以看到STM32H5默认使用的是AzureRTOS的产品,包括THREADX,

NETXDUO,等等。也就是说,同样在STM32CubeMX的界面中,在RTOS这块只能看

到AzureRTOS的配置。如果客户要使用FreeRTOS,就只能再添加X-CUBE

FREERTOS。要使用LwIP的话,只能自己移植。

客户将LwIP的软件包复制到\Middlewares\Third_Party下,如图1。

图1. 重新生成代码前的\Middlewares\Third_Party文件夹

成功调试以太网功能后,客户就直接在这个工程上继续添加其他功能。当在

STM32CubeMX添加其他外设,并重新生成代码时,客户发现,在Keil下编译代码出现

了一大堆的错误,如图2。

图2. 编译错误

2.2. 问题分析

从图2的错误来看,用户放进去的LwIP相关的文件都不见了。于是从资源管理器中进

入到工程里的文件,可以看到确实在\Middlewares\Third_Party下的LwIP文件夹不见

了,如图3。

图3. 生成代码后的\Middlewares\Third_Party 文件夹

可见,在生成代码的时候,STM32CubeMX把用户复制进来的LwIP文件夹删掉了,

导致编译失败。

2.3. 解决方法

对于这种情况,最直观的想法就是在重新生成代码后,把LwIP的文件夹重新拷贝过

来。这个办法可行,但是当一个项目很大的时候,用户添加了更多的文件夹和文件之后,

用这个办法的工作量可能会大大增加了,也不方便。

那么是否有一劳永逸的办法呢?

来看一下STM32CubeMX的用户手册,可以看到在代码生成的"生成的文件"选项

的介绍中提到了一个删除先前的文件的选项,如图4所示。

图4. 代码生成之"生成的文件"选项

这里的意思是说,如果之前生成的文件,在当前的配置中不再需要,那么这些之前生

成的文件将被删除。比如,之前的代码生成的时候使用了UART外设,从而生成了

uart.c/.h 文件,现在这个配置中不再使用UART外设了,那么重新生成的时候就删掉

uart.c/.h 文件。

所以,看起来Middleware文件夹也是受STM32CubeMX管理的,也能解释为什么

我们放到\Middlewares\Third_Party 下面的 LwIP文件夹会被删掉,因为

STM32CubeMX并没有配置LwIP,它会认为\Middlewares\Third_Party\LwIP这个文件

夹是没有用的,就直接将其删除。

现在要做的是看看如何阻止STM32CubeMX删除这些文件。

既然在用户手册看到了这个"生成的文件"选项,那么就可以到STM32CubeMX的

用户界面去查看这些选项,在Project Manager页面中,如图5所示。

图5. STM32CubeMX界面之"生成的文件"选项

可以看到,"Delete previously generated files when not re-generated "选项是

默认打勾的,也就是默认会删除之前已经生成的但是现在用不到的文件。

那么,来尝试一下把这个勾去掉,会发生什么样的事情?先把把LwIP文件夹再复制到

\Middlewares\Third_Party 下,再去除"Delete previously generated files when not

re-generated "前面的打勾。再重新生成代码,这个时候就可以看到LwIP文件夹依然躺

在\Middlewares\Third_Party 下,证明确实是可以的。

打开Keil工程,进行编译,编译成功。

3. 问题解决

当担心STM32CubeMX删掉用户的文件时,可以考虑在重新生成代码前先去除

"Delete previously generated files when not re-generated "前面的打勾。

4. 小结

STM32CubeMX为了让工程项目更简洁,会删掉一些它认为不再需要的文件,但是这

些文件也可能来自于用户自己复制进去的文件。要避免误删除这些用户文件,需要在

Project Manager 页面中将"Delete previously generated files when not re

generated "选项前的打勾去除。


意法半导体公司及其子公司 ("ST")保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST 销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财 产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利

相关推荐
lingzhilab2 小时前
零知IDE——STM32旋转编码器计数系统:原理可视化 + 精准计数实现
stm32·单片机·嵌入式硬件
LS_learner3 小时前
ROS (Robot Operating System) 一个灵活的机器人软件框架及其适用平台
嵌入式硬件
兆龙电子单片机设计3 小时前
【STM32项目开源】STM32单片机厂房环境安全监测
stm32·单片机·安全·开源·毕业设计·电子信息
chengpei1473 小时前
Ender-3S加装3DTouch实现自动网床校准
单片机·嵌入式硬件·3d打印
松涛和鸣3 小时前
DAY69 Practical Guide to Linux Character Device Drivers
linux·服务器·arm开发·数据库·单片机·嵌入式硬件
bai5459363 小时前
STM32 CubeIDE 超声波测距
stm32·单片机·嵌入式硬件
robet_hua3 小时前
DSP28377D项目实战 (4) - 高速串口打印波形
单片机·嵌入式硬件
mftang4 小时前
STM32Cube IDE 详细介绍
ide·stm32·嵌入式硬件
克莱斯勒ya4 小时前
嵌入式编码器(Embedded Coder)
嵌入式硬件