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

目录

转移的一般步骤

sprintf函数报错处理

尚未查明原因的一个现象


以 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导入已存在的项目到工作空间即可:


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

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

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

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

  • ⌘+B 重新编译工程

  • 重新设置调试过程(Run->Debug Configurations...)

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


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:

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

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

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

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

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


尚未查明原因的一个现象

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.

猜你喜欢

转载自blog.csdn.net/u013441358/article/details/105919107