【官方原创】防止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 - 保留所有权利

相关推荐
悠哉悠哉愿意14 小时前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_110115 小时前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元15 小时前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-1873661339715 小时前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z203483152015 小时前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书17 小时前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
Alaso_shuang18 小时前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟19 小时前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_9181269119 小时前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z203483152019 小时前
STM32F103系列单片机定时器介绍(一)
stm32·单片机