打印
[应用相关]

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

[复制链接]
794|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wiba|  楼主 | 2021-9-4 11:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
使用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).

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



使用特权

评论回复
沙发
wiba|  楼主 | 2021-9-4 11:49 | 只看该作者
-------------------------------解决办法如下--------------------------------
出错的原因:
工程在低版本迁移到高版本时有一个叫做 “ system_stm32f4xx.c ” 的文件不能自动覆盖低版本所生成的,所以会出现重复!如下图:


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




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



删除“ system_stm32f4xx.c ”文件后,再次重新点击STM32CubeMx中的生成代码,随后会自动在这里生成新的同名文件,这次所生成的代码才真正成功迁移工程到新版本中,编译不再有错。
注意:只能从低版本迁移到高版本,建议不要从高版本迁移到低版本!
这是高版本向下兼容的常识!!!!



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

3312

帖子

3

粉丝