打印
[应用相关]

STM32开发项目:如何从TRUEStudio转移到STM32CubeIDE

[复制链接]
939|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aoyi|  楼主 | 2021-6-5 18:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
以 Ubuntu 18.04 的TRUEStudio(版本号:9.1)转移至macOS/windows STM32CubeIDE(版本号:1.3.0)为例

转移的一般步骤
Clean原TrueStudio工程(Project->Clean)
修改Makefile文件,可与已经移植过来的工程中Makefile作个文件对比
修改1,主要是编译器的选择
修改2,修改linker flags选项,主要与sprintf函数使用有关
增加-lrdimon -u _printf_float选项
修改-specs=nosys.specs为-specs=nano.specs
SHELL = sh
OBJECT_NAME = alwhalesStm32Project
# System configuration
CC = arm-none-eabi-gcc
CC_OBJCOPY = arm-none-eabi-objcopy


LINKER_FLAGS = -lm -mthumb -mcpu=cortex-m3  -Wl,--gc-sections -T$(LINK_SCRIPT) \
        -static  -Wl,--start-group -lc -lrdimon -u _printf_float \
        -lm -Wl,--end-group  -specs=nano.specs  -Wl,-cref "-Wl,-Map=$(BIN_DIR)/$(OBJECT_NAME).map" \
        -Wl,--defsym=malloc_getpagesize_P=0x1000
在STM32CubeIDE中再创建一个新的STM32工程。


将新创建的工程文件夹中的工程文件(.cproject & .project)拷贝(替换)到已导入的TrueStudio工程的工程文件夹中(先关闭该工程)
亦可以直接将已经成功移植过来的工程文件.cproject & .project替换原工程文件,然后直接用STM32F103CubeIDE导入已存在的项目到工作空间即可:



使用特权

评论回复
沙发
aoyi|  楼主 | 2021-6-5 18:27 | 只看该作者

重新打开已导入的TrueStudio工程,修改部分参数(笔者没有采用系统自动生成的Makefile体系,采用了自定义Makefile文件),需要修改的如下图所示:

0.设置构建自动刷新的目录


使用特权

评论回复
板凳
aoyi|  楼主 | 2021-6-5 18:28 | 只看该作者

1. 设置构建命令和构建位置


使用特权

评论回复
地板
aoyi|  楼主 | 2021-6-5 18:29 | 只看该作者

2. 删除定义的引用文件与源码文件(手动在Makefile文件中添加)


使用特权

评论回复
5
aoyi|  楼主 | 2021-6-5 18:30 | 只看该作者
  • ⌘+B 重新编译工程


使用特权

评论回复
6
aoyi|  楼主 | 2021-6-5 18:31 | 只看该作者
  • 重新设置调试过程(Run->Debug Configurations...)


⌘+F11 下载程序,调试(All done.)


使用特权

评论回复
7
aoyi|  楼主 | 2021-6-5 18:32 | 只看该作者
sprintf函数报错处理
如果使用了int sprintf(char* str, const char *fmt, ...)函数,可能会在对应位置出现如下报错:



The float formatting support is not enabled, check your MCU Settings from "Project Properties > C/C++ Build > Settings > Tool Settings", or add manually "-u _printf_float" in linker flags.

初步判断错误类型为: Code analysis problem, 属于Codan Errors:


使用特权

评论回复
8
aoyi|  楼主 | 2021-6-5 18:34 | 只看该作者
笔者的项目由于完全采用自己编写的Makefile文件,因此编译过程与这些错误无关,只需要按照它指示的要求在Makefile文件中linker flags中添加"-u _printf_float"选项即可(但是不能消除错误)。经过摸索,可以采取以下步骤“骗过”编译器,消除这个错误:

1. 重新打开自动生成Makefile文件功能




使用特权

评论回复
9
aoyi|  楼主 | 2021-6-5 18:35 | 只看该作者

2. 此时的C/C++ Build->Settings出现了Tool Settings的选项


使用特权

评论回复
10
aoyi|  楼主 | 2021-6-5 18:38 | 只看该作者

3.勾选Use float with printf from newlib-nano (-u _printf_float),并点击Apply and Close,此时错误会自动消除


使用特权

评论回复
11
aoyi|  楼主 | 2021-6-5 18:39 | 只看该作者

4.再次取消自动生成Makefile文件功能,这个报错不会再次出现。


使用特权

评论回复
12
aoyi|  楼主 | 2021-6-5 18:41 | 只看该作者
尚未查明原因的一个现象
STM32CubeIDE中自动生成的makefile文件中在linker flags 中有一个选项是-specs=nano.specs,而笔者用的选项是-specs=nosys.specs,这个选项的区别在于选择哪一个静态库。

已经观察到的一个区别是:

1.代码编译后的使用空间不一样:

nano库:



nosys库:



2.使用nosys库无论是否添加-lrdimon -u _printf_float选项都会报错:

The float formatting support is not enabled, check your MCU Settings from "Project Properties > C/C++ Build > Settings > Tool Settings", or add manually "-u _printf_float" in linker flags.


使用特权

评论回复
13
ADZ2016| | 2021-6-6 09:33 | 只看该作者
linux版本的开发环境IDE吗?

使用特权

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

本版积分规则

100

主题

3306

帖子

3

粉丝