你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32开发项目:如何从TRUEStudio转移到STM32CubeIDE

[复制链接]
STMCU小助手 发布时间:2022-4-15 10:00
转移的一般步骤# O1 t# R9 v4 w# x
Clean原TrueStudio工程(Project->Clean)' m! l* c' C8 r3 u6 }: r
修改Makefile文件,可与已经移植过来的工程中Makefile作个文件对比
9 @0 D* C  Y$ t& P9 O   修改1,主要是编译器的选择8 s( }- i1 D1 @2 r. G# P7 o
   修改2,修改linker flags选项,主要与sprintf函数使用有关$ D1 @2 b# i/ u( o: ]! }% a* _" {
     增加-lrdimon -u _printf_float选项) ?# ?) v4 J& e) T
     修改-specs=nosys.specs为-specs=nano.specs
! _- C/ G; S. d5 d
  1. SHELL = sh
    , H/ E! I% I& i4 y0 N& F3 P
  2. OBJECT_NAME = alwhalesStm32Project+ B8 ^: ^- L$ Y
  3. # System configuration/ n7 u4 c1 y5 \  y
  4. CC = arm-none-eabi-gcc
    0 I1 R1 k: ~1 K3 V' E
  5. CC_OBJCOPY = arm-none-eabi-objcopy
复制代码
  1. LINKER_FLAGS = -lm -mthumb -mcpu=cortex-m3  -Wl,--gc-sections -T$(LINK_SCRIPT) \. I# u# C9 ]% r1 u2 }$ @8 M
  2.         -static  -Wl,--start-group -lc -lrdimon -u _printf_float \
    ! Z8 q* u- N0 \5 }' y" `; o  r
  3.         -lm -Wl,--end-group  -specs=nano.specs  -Wl,-cref "-Wl,-Map=$(BIN_DIR)/$(OBJECT_NAME).map" \& H1 q" F# _4 K. H2 ?
  4.         -Wl,--defsym=malloc_getpagesize_P=0x1000
复制代码

  ~; g  h; t2 O4 v# A; b在STM32CubeIDE中再创建一个新的STM32工程。! h& d9 [' t4 [7 o0 _7 e

: f1 B/ @; g1 m6 p+ k3 f7 S 20200504162019822.png $ H' X7 D  Z! o( F' ]2 Y7 A
( E. ?, G# R! g" l5 c% X' v- z
将新创建的工程文件夹中的工程文件(.cproject & .project)拷贝(替换)到已导入的TrueStudio工程的工程文件夹中(先关闭该工程)" v* j: s2 x! ~3 l% N! h1 ~/ W  M# j* r+ Z
亦可以直接将已经成功移植过来的工程文件.cproject & .project替换原工程文件,然后直接用STM32F103CubeIDE导入已存在的项目到工作空间即可:
# i. ]  n6 \- Y# K# ^
( ~6 ~6 B+ Y0 S8 c 20200507091743886.png
6 ~" [: h' C( J/ H) W  z: P! \6 ^" a8 M) g7 d  b9 |
重新打开已导入的TrueStudio工程,修改部分参数(笔者没有采用系统自动生成的Makefile体系,采用了自定义Makefile文件),需要修改的如下图所示:
9 z* K; [- _2 [( q% R- h; W9 `* V1 ^7 w# B4 M# H9 K' F
0.设置构建自动刷新的目录
; B9 o) H) a# R' r+ B: L3 o% O/ @2 z8 O: |2 J$ \6 Q# l& r
20200507121450808.png ! x, L' |0 T$ {5 X! S2 t9 |
" T* F# C: `" x7 ~) x1 X
1. 设置构建命令和构建位置
  H3 k! X3 M! h/ k& O2 y5 ^0 u8 e2 ]/ ~. m
20200516225802985.png 8 \! S* N% ]# k2 F2 C4 u8 w" Q
! l- u: I% `" G
2. 删除定义的引用文件与源码文件(手动在Makefile文件中添加)
) E- c; W% p5 s" W4 G
# \7 N3 T! Q8 k6 L: u1 z" h" N, m+ J 20200507092447909.png
/ g: h% N5 ?$ S# {1 f
- g4 \1 G$ p- r$ ?+ [- p& }% B⌘+B 重新编译工程
  V9 s8 F2 g- }, d' k# ~: G& @7 z1 }
6 X7 C  _0 M  ? 20200504164207586.png : M/ ?% G0 c3 g" V

3 A9 q. S+ z% ~. x9 i* X重新设置调试过程(Run->Debug Configurations...)
# u* \& R6 O: q) b- e
5 \  z' c, x7 H* s 20200504164556511.png $ b& x8 `5 Y9 W+ B+ O1 w( d

& Y/ O9 ?* z: ]. A1 U; I( O⌘+F11 下载程序,调试(All done.)1 m# G& B: U# K- P" d( s# V5 B- X# J" h

6 i7 _& s& j% ]4 J% [( `# N) k3 Z6 @* `sprintf函数报错处理, w' r4 d* q2 F: m  X7 h- Q
如果使用了int sprintf(char* str, const char *fmt, ...)函数,可能会在对应位置出现如下报错:' o6 x3 a* ~: X/ ]7 }, E  e
* N3 p1 z- r2 F; K; C6 V
20200507140538667.png
" ^3 X3 B+ r5 Q. N9 N6 q! V. B
5 D  u. B; x3 O' H/ TThe 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.* [+ R0 Z9 t5 |4 o% d% e- r8 t

3 M1 @4 L& W5 }& `初步判断错误类型为: Code analysis problem, 属于Codan Errors:
0 j# Y7 O, B0 F, ]# L: w. L
1 q* N! D4 R2 r8 f" o1 @ 20200507140907761.png
: }/ z+ G/ k5 z, D$ c6 h9 `0 W& B- L! d: _/ W7 s; v/ v6 E
笔者的项目由于完全采用自己编写的Makefile文件,因此编译过程与这些错误无关,只需要按照它指示的要求在Makefile文件中linker flags中添加"-u _printf_float"选项即可(但是不能消除错误)。经过摸索,可以采取以下步骤“骗过”编译器,消除这个错误:; B" U+ e+ M! N( P4 f
8 J+ F0 ]8 G# y+ a2 r( G
1. 重新打开自动生成Makefile文件功能
& I! G  }! I# o$ C( A* y4 [
! ]- S. b' I) E* h4 |0 W 2020050714135116.png . O; V* T, ]: y+ m8 ?" J, \
$ D: P- k5 ^. \4 |
2. 此时的C/C++ Build->Settings出现了Tool Settings的选项
8 S( N1 e" x. _! H1 H( ]1 p0 {! `+ l$ U
20200507141726240.png % d; Q6 }# e' L  O
, Y" S' {' c6 \: ]% W5 L
3.勾选Use float with printf from newlib-nano (-u _printf_float),并点击Apply and Close,此时错误会自动消除
2 u* N' G2 X+ m& _
( z, V+ C# u0 [7 j' p) F 2020050714193638.png
$ m9 E4 @+ f% q6 ?) B! s+ L/ J1 J, }- q, I7 \
4.再次取消自动生成Makefile文件功能,这个报错不会再次出现。: c- N# [& p1 [  y  J( L

) L7 D! ~, V3 I- g 20200507142130375.png
8 C( A  M& B2 P8 J+ x. \; U/ c' z2 B+ e
尚未查明原因的一个现象; \: L: l$ [* i" h8 ~1 U2 i
STM32CubeIDE中自动生成的makefile文件中在linker flags 中有一个选项是-specs=nano.specs,而笔者用的选项是-specs=nosys.specs,这个选项的区别在于选择哪一个静态库。5 W4 L% q0 k; Z& P9 E
$ o. S; i: q2 ]( Y5 q
已经观察到的一个区别是:, r# g, |* K6 \* S* X

1 f# ~; I+ u+ T1 T1.代码编译后的使用空间不一样:
$ A3 f& j6 y5 U  z( g3 H6 k+ g+ J
nano库:
4 U5 d9 w2 Y4 P# S3 y
1 J- ~  b5 k. P& s, T5 A$ Z 20200507143107546.png $ l+ ]3 \) ^1 j6 ], y! F
, ]/ Y8 |9 M7 Y. _; i/ v/ R$ j
nosys库:- W" N2 }* N; x+ d5 q9 A6 z6 I

+ Q( G; O& D) t* T+ w5 A$ u 20200507143234964.png
' j' N( ]- E6 f. K
0 M/ [+ O. e+ S9 q2 Q2.使用nosys库无论是否添加-lrdimon -u _printf_float选项都会报错:
! n) X' Y0 C3 `) @) b
4 O5 X( q2 f" h. NThe 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.
2 G4 R! ~$ m3 W/ O2 i% h0 G- L9 j
  S% J. r, U/ t" Z0 I; A- q- m/ O4 D% w0 n# G7 f' P$ V* }/ P8 P
赞 收藏 评论0 发布时间:2022-4-15 10:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版