STM32CubeMx在不同版本的工程迁移时生成的代码编译出错各种multiply defined

使用STM32CubeMx的同学都知道,它的版本更新非常快,目前(2019.4.30)已经是5.2.0版本了,半年前还只是4.27.0版本。当你更新到新的版本后,你打开用旧版本创建的工程时,总是不那么兼容,出现一些莫名其妙的错误。

我的情况是:

我的原工程是使用4.27.0版本的STM32CubeMx,以及1.21.0的HAL库代码包创建的;

于是我把STM32CubeMx更新到了5.2.0版本,同时HAL库代码包也更新到了1.24.1版本(1.21.0版本的删掉了);

1.当我使用新的CubeMx打开那个旧工程时,首先会提示如下图:

点击中间的 “移动” 选项即可;

2.成功迁移项目到新版本后,点击重新生成代码,然后编译会出现各种重复定义的错误如下图:

Error: L6200E: Symbol SystemCoreClock multiply defined (by system_stm32f4xx_1.o and system_stm32f4xx.o).

Error: L6200E: Symbol AHBPrescTable multiply defined (by system_stm32f4xx_1.o and system_stm32f4xx.o).

Error: L6200E: Symbol APBPrescTable multiply defined (by system_stm32f4xx_1.o and system_stm32f4xx.o).

Error: L6200E: Symbol SVC_Handler multiply defined (by stm32f4xx_it.o and irq_cm4f.o).

-------------------------------解决办法如下--------------------------------

出错的原因:

工程在低版本迁移到高版本时有一个叫做 “ system_stm32f4xx.c ” 的文件不能自动覆盖低版本所生成的,所以会出现重复!如下图:

红框所示的两个重复的文件,一般第一个是低版本生成的,第二个是高版本生成的,所以我们需要把第一个低版本生成的移除。移除之后,再返回STM32CubeMx中重新点击生成代码,这时候去keil中检查Drivers/CMSIS下是否还有重复,如果不再有重复说明我们移除低版本的成功了,可以先编译一下,应该是不会出错了的。但是即使编译通过了还没完哦!

接下来就是到STM32CubeMx生成的工程文件夹内的“ Src”中找到“ system_stm32f4xx.c ” 文件的本体,将其删除,不删除的话这个文件会阻碍新版本的同名文件的重新生成!

如下图:

删除“ system_stm32f4xx.c ”文件后,再次重新点击STM32CubeMx中的生成代码,随后会自动在这里生成新的同名文件,这次所生成的代码才真正成功迁移工程到新版本中,编译不再有错。

注意:只能从低版本迁移到高版本,建议不要从高版本迁移到低版本!

这是高版本向下兼容的常识!!!!

  • 15
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
回答: 要将Keil工程迁移STM32CubeMx,可以按照以下步骤进行操作。首先,新建一个工程文件夹,并将STM32CubeIDE的工作空间中的空白工程文件全部复制到该文件夹中。工作空间的地址可以在STM32CubeIDE中找到。\[1\]然后,删除旧工程中的"system_stm32f4xx.c"文件。接下来,在STM32CubeMx中重新生成代码,这将自动生成一个新的同名文件,这样就成功将工程迁移到新版本中了。请注意,只能从低版本迁移到高版本,不建议从高版本迁移到低版本,因为高版本向下兼容的常识是不可行的。\[2\]在迁移过程中,可能会遇到一些兼容性问题和错误。这是因为STM32CubeMx版本更新非常快,所以建议在更新版本后,使用新版本打开旧工程要注意这些问题。\[3\] #### 引用[.reference_title] - *1* [STM32项目从Keil MDK迁移STM32CubeIDE(不含LWIP和FreeRTOS)](https://blog.csdn.net/wujunfeng200808/article/details/128119979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32CubeMx不同版本工程迁移生成代码编译出错各种multiply defined](https://blog.csdn.net/wu10188/article/details/89692407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值