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

【经验分享】使用eclipse搭建stm32f7xx环境的工程

[复制链接]
STMCU小助手 发布时间:2021-12-13 22:50
由于工作需要,用eclipse搭建基于stm32f7xx芯片的工程环境。记录下安装和编译链接工程过程中遇到的问题,今后可以参考。同时也希望能给遇到类似问题的人一些参考。. d# S5 ], K: s. V0 D( l
7 J: y  ]8 P$ [. l/ {+ s
Eclipse: 一款开源的集成开发环境(Integrated Development Environment),配合众多插件,可以用于Java应用程序开发、Android应用程序开发等。最精简的Eclipse只是一个框架,开发不同应用程序时需要安装对应的插件才能进行,不像微软的VS已经集成了众多的编译工具。
% {0 N5 y" t/ L; W0 ^* ]
: g2 A! {( U4 F7 H" oCDT:开发stm32应用程序主要使用的是C/C++,所以Eclipse需要安装CDT(C/C++ Development Tooling)插件。: L% p0 n* v4 q/ e% K

" b6 {3 c' h0 KGNUARM Eclipse: 包含一套Eclipse插件和用于跨平台嵌入式ARM程序开发工具的开源项目。有过stm32库函数开发经历的朋友可能知道,开发前我们都会找一套工程模板,包含了对各个库文件的引用,我们只需要关注核心的应用即可,换一个项目时我们就拷贝一份模板,重新进行开发。Eclipse装了GNU ARM Eclipse工具簇后,新建项目时我们只需要选择对应模板的项目,插件就会自动帮我们配置好工程。
3 R8 V' Y& _( y
) t' g5 p" N2 }/ @Windowsbuild tools: 程序由代码变为可执行文件需要进过编译和链接的过程。Windows下的IDE无论是VisualStudio还是KEIL,编译工具都集成到IDE中了,且有着自己的一套管理项目文件的方式。Eclipse创建的工程会自带makefile文件,该文件的解析需要make工具。Linux下自带make工具,Windows下需要使用Windows build tools作为make工具使用。
3 h! ~) K& T5 ~7 a6 H! B+ h
1 ~$ w9 `* J& I0 r9 w) vGNUARM Embedded Toolchain: ARM交叉编译链,被编译的程序运行于基于ARM架构的处理器上。
1 x& s) i9 _# d; {: v' c3 I0 R& J
' X0 Q" Y7 \: a( m2 `# K: a% L+ i下面介绍下我自己的安装使用过程。
" q9 C  C1 m; @
  J8 b' C, ]1 O! w+ b& R# ^1、搭建基于eclipse的开发环境需要安装的软件包:; v4 B2 l0 D% z# r% b. x, i# P
8 s, t5 g! T5 E9 S  A- {
20200518114132563.png

& m" ?0 c* c. y# K4 r% e4 x( A% H8 }( U  d+ D6 |% \5 d4 S
202102240948015.png
+ w; j" c) C; n4 I! y4 u+ G! u6 R
8 ?, b% n4 K" j8 E5 _
* ]. h( f, T6 B
按照说明上的需要先装xpm工具再用命令安装windows-build-tools包,xpm的安装方式是用npm工具。npm是nodejs下的包管理器,先下载安装node.js。
' }6 R, v4 k  }! N; x1 j* u  e% w, C0 H9 A  j6 [: K# r7 e
20210224095516888.png
1 D, c9 w& e- V: N1 B  c2 w- K% F

1 _/ p. @" a" _6 v1 @6 |  A; R: E点14.15.5 LTS 下载
' w% |3 a, a7 P$ E1 s  i
( D: r0 }9 x2 i+ m$ N; Y
20210224095643120.png

9 P3 k# ]- m$ Q+ ~1 |' W( X# ?. v9 f
双击安装( j" d0 k( y' ~+ y; V

+ a8 `1 [8 y7 ]2 h, X4 W1 d" |
20210224095732314.png
% X% z7 l4 u1 t* B$ t& J4 `

4 g9 Y; a( [0 L5 u( s9 [安装完毕后用npm命令安装xpm:npm install --global xpm@latest, a8 o/ H+ `& ?) Z  @3 p5 z

) n' N+ _1 D1 G5 H
20210224095848166.png

) `% A( [1 d5 Q5 a& \. a& w+ \$ g- @
xpm安装完毕后,就可以根据说明书上的安装命令安装windows-build-tools工具。
: V' L3 k$ A( [% m, u( R7 P3 `  c; k
20210224094649121.png

. n  ~* y+ `; K, q, I5 K1 B' \- T, V4 k5 F2 }0 g  \

0 r, n5 M# L8 [6 E, Leclipse C/C++版本* }# m; _7 p6 q( e* T2 }- K
: G5 g! c2 R, q8 N" x- `
 下载 C/C++ 的Eclipse IDE,免安装,解压即可用(前提是JAVA环境配置好了)! X+ f. Q8 p" X7 ]! C1 W/ G  P1 D
0 K- M3 Y8 {8 a% c
20200518114203468.png
4 W" A/ x: v& T8 d# R9 Q2 Y
3 G+ D1 |  V/ q. z  q2 E7 l

/ p0 i1 a4 {( a- |7 Y- g; e9 t安装GNU ARM Eclipse插件。
/ O4 j  o2 n2 C, \0 l) P
5 c5 E9 B0 C0 _% g用xpm工具安装:
3 M) d9 Q9 t& K, O0 S7 A4 v% i
$ v; l, B1 M' a/ X1 L! O" varm或者riscv平台的工具链根据工程需要选择。
5 w7 B5 |2 ^  Y% X. v' B" U9 B& E2 Q; m# }4 f' R
2021022410433298.png

3 v- f1 Y4 `1 ?! N9 n4 @; k4 w
! U3 x0 P) }* \7 Z: E
6 ]8 \8 c+ [6 }' R$ I& N3 H+ |2 U# T- \
打开eclipse,Help->Install New Software...->Add,在Location输入网址,name输入GNU ARM Eclipse Plug-ins。5 [* m" s, m/ w2 I& n: e

  d! B" M& C3 r4 e; A0 f2 F" `& I8 G
20200518114221864.png
) ~* J: j5 n* K  ]1 |1 h
% Y' h( s' @  u. K1 v* l
6 {: M0 P- V3 L9 U% _' o: M) L
选中上面的工具,跟着向导一路next,直到finish,这时eclipse需要restart一次。
/ I9 S- q9 [0 n* Y6 W- i: O) {. h. r+ ]! O
创建一个基于STM32f7x系列的空工程3 ]' A( H; I& B' b( [% Z! `3 g9 Q: z. z
* I6 Z0 \- M* v2 c0 ~4 Q' s3 f3 p; r
20200518114234290.png

: D1 Q4 J3 g0 g8 c6 L7 r+ s
4 K2 v2 W2 t3 E% L9 x- O然后,选择工程参数时有几个选项,需要根据自己的工程需求选择。不知道怎么选就先用默认的。工程运行中发现问题再来看看是否这里有需要改的。) r+ j- @8 |8 f+ b* `. L9 @
( ]" m0 S7 D3 p+ S( f) w; B# U
20200518114311876.png

0 D1 x5 t, b& T' z/ f* @
: z- ]/ _! I" N# m6 s4 o
5 ~8 x5 z. ^, }; o* p3 e* Z; e4 X5 k4 v" U! H/ b! S& a
2、Eclipse中出现Type 'xxxx' could not be resolved的处理方法) @/ P- \! Q5 w5 ~, a$ {
①选择工程->roperties->C/C++ General->Indexer1 f4 |) z) R5 q% I8 I- w

& {, Z+ n9 Q7 @& d3 i7 W②勾选Enable project specific settings0 p7 A; k5 w/ ?; u. G/ O
; n$ ^) W2 W- L  M. z9 [% O$ t
③勾选Index unused headers as C++ files
) J9 r! j) T: R( s( y" @$ x( V' o
③勾选Index unused headers as C files0 U; L( u! `/ E

$ b6 j6 a5 R$ Q. M+ a
% B3 ]$ p4 X4 }) p7 W3 g$ i3、提示错误“③勾选Index unused headers as C++ files”) |, U4 S% g* p* C0 v- Y
解决Eclipse semantic error! B) H& M% [- [5 M( g0 p0 v
4 U/ d4 t3 _' s
项目->properties->c/c++ General ->Code Analysis
: h" ~4 x! Q+ V9 M
7 [) N* f0 m" N7 g(1) Potential Programming Problems1 ]( e* u! I1 @

9 V) ^4 J/ y2 cNo return value4 U; N2 a6 _+ A, j# j1 t
5 b0 G* E0 ^. m4 Q. j9 N
Unused return value
7 p8 V4 `4 R" @  m! L
4 Z6 L1 l; ]7 k6 V, FAssignment to iteself- i) i& T8 y7 w) x- u. i( A+ F) K

3 R* r# k9 h6 s6 r( N, a2 O(2)Coding Style 全部
5 e' V6 U9 D  Y+ i( D& h, W2 v
+ `3 l8 k5 K- q7 \  C8 P. Q(3)Syntax and semantic Errors全部0 Q7 i$ g* \- q6 l9 e8 N- X
$ B# {7 y" j9 k& D
(4)Securirty Vulnerabilities 全部
, N- E  ], h/ S
* X- W. i. m9 g' p" p/ [& @以上内容全部勾去,如下图所示
2 v! n* |6 O; o5 w: L! }) j: ]& E% C! {* E
20200518114341413.png
6 f6 ^  }/ d2 m  `

" D9 H# F- Z! j# \; L$ Z9 Y9 A$ E3 T# c  }1 E* [$ G/ l

/ I! O' d0 P7 }. m3 K/ h4、编译(工具栏锤子按键)程序,rtthread中用到的.s文件出现下面这样的错误,, [: G  D4 x3 [4 d: A& j3 x! i2 B  f
context_gcc.S:110: Error: selected processor does not support `vstmdbeq r1!,{d8-d15}' in Thumb mode

3 ^1 Z* m7 T! V; ~4 p9 G0 D网上有好多说了一堆硬浮点软浮点的问题,都是建议改成软浮点,但是stm32F7芯片时支持硬浮点的,所以没用尝试改成软浮点。用了有人偶尔提到的方法:增加一个参数,ASFLAGS += -Wa,-mimplicit-it=thumb
# Q0 y& l" ?8 S+ R& E/ h. f  Z/ D! Q0 k9 M/ V
20200518114419879.png
9 t* `3 f! X9 n: g1 K& v' E

/ f, j3 X8 Y3 f- i编译错误可以解决,不知道会不会导致运行时出错。
/ U) |) ]/ \8 }+ y
* n. y! G& ]/ x/ ^: G- g另外选择用硬浮点的设置方法:
) g7 D# Y: |1 Y
5 N7 p. M$ v2 @! M5 B# z& n, V
20200518114439766.png

1 h9 q3 k* U2 {+ G( W+ I) u
, r" z1 m  G6 n3 P& [3 v
20200518114447984.png

' j6 Q& d+ |  e7 p: K; J9 e. U% U: Y' y. A' x: `

; l1 g, Z8 i3 _' I5、rtthread下面的libcpu\arm\common\divsi3.S编译时报一堆这样的错误
& V2 x( C4 V8 K7 v# `9 p1 xdivsi3.S:330: Error: Thumb does not support conditional execution

. I0 v2 i: I& ]; `& e) i! W, M+ o看了rrt-nano的移植相关的说明,common文件夹下的大概不是需要加入工程的,于是把common整个文件夹都不放入工程编译。
* C) Y$ f/ w' Q& f) q% |! o8 R4 Z& z0 H9 v( f
6、HAL库中的接口未定义报错
& E: x: n- s. C$ N8 ?* M4 G% ]% RDescription    Resource Path Location Type
& \; I* K  d$ y1 ~5 `- \) v- A- r: K
undefined reference to `HAL_UART_Init'    main.c    /mkwsf7/src/app   line 305   C/C++ Problem
' j" s  x9 a* W3 W& O# e$ t/ @) Y  E# d5 m+ z7 Q) [
创建工程选择F7系列模板工程时,会自动吧stm32f7的hal库加入到工程,但是很多.c文件被斜杠划掉了,如下:# j( b- w" ^4 A0 K
' J; f7 M% i" l" s7 a3 b
2020051811450640.png
6 l% O7 {2 t, g  i# R

1 e& D& |1 E" j" p6 f% S
& H1 y1 Q# |/ T% j: E1 {
3 S& x7 F4 J' g8 Y0 @1 c2 W解决方法:
4 L2 |% E0 }% Q" \# E  z
: X1 C0 Z* q) I; j, e! r( v& Iproperties -> c/c++ general -> paths and symbols -> source location ->(找到为加入项目中的文件路径)edit filter 从目录中删除被屏蔽的文件来加入到工程,顺便通过add将不需要的文件屏蔽。# i0 d! y% d! Z! J6 u

: Y8 J' |4 Z" V* C; _/ l7、cmsis的头文件和src文件在创建工程是大多数没用加入,从keil文件中找到使用到的cmsis的头文件和src,替换原有工程的,原有工程已有的也替换,因为工程里的可能版本比较旧。旧版本会出现下面的报错。; o4 i+ j- O4 B5 M# u" Z5 q4 H$ @

3 E  k  H$ }) `7 k: R
20200518114516419.png
( `" J" S* }6 G
" K9 M1 S6 n3 f8 y

' J& D/ P7 C: G6 n8、出现一堆系统调用接口链接失败5 y. m9 O7 o! m3 Z/ a4 i
类似这样的报错:
. B2 r! \/ f" X" z
  1. gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc_nano.a(lib_a-writer.o): In function `_write_r':0 q+ l2 M* y* I
  2.   l) E" p* Z8 g* U" b
  3. writer.c:(.text._write_r+0x10): undefined reference to `_write'( R; W% V4 T9 v$ q9 H
  4. / J& M4 E% a  p  r% [2 T7 k6 e
  5. d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc_nano.a(lib_a-closer.o): In function `_close_r':
    2 H4 a% A; U3 e; h, V: r
  6.   f5 U0 B6 F" U# Y: a5 g# y
  7. closer.c:(.text._close_r+0xc): undefined reference to `_close'
    0 a3 ^: H+ C1 P  |
  8. * c( o4 K* y7 n) v9 D
  9. d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc_nano.a(lib_a-fstatr.o): In function `_fstat_r':
    / t8 r- I5 a, {
  10. # R" z" R6 n, C3 V, h8 X
  11. fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat'4 H/ w2 F( ]6 c9 s; h2 I8 S* u

  12. 1 o7 h- o, s: s0 {9 Y: a  z
  13. d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc_nano.a(lib_a-isattyr.o): In function `_isatty_r':
    9 Q& X% F& i/ `$ C+ S

  14. & j( g5 T1 a8 m' f8 S
  15. isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty'
    & I9 X9 D2 Z9 t6 z6 W

  16. 6 F: @8 z! ~% f# m+ U- l
  17. d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc_nano.a(lib_a-lseekr.o): In function `_lseek_r':
    . y2 j: K  W: E4 E7 ~  ?
  18. 2 r" q8 b9 R6 z
  19. lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek'2 _/ f& b% S0 k1 [

  20. $ I6 m6 W, g0 J/ e4 y, E* g
  21. d:/gcc-arm-none-eabi-4_9/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc_nano.a(lib_a-readr.o): In function `_read_r':
    : j! t% m$ k. @+ M
  22. ) U. e# }' Q1 \9 }0 S
  23. readr.c:(.text._read_r+0x10): undefined reference to `_read', L# u3 |3 C' a, ^" ?, t+ r
复制代码

( m) r, w: D' F+ M% |在_syscall.c中是有实现的,只是宏定义屏蔽了,因为工程里勾选了-ffreestanding。1 T4 x8 m" J1 k3 {
独立的环境是标准库可能不存在,程序启动不一定在main的环境。选项 -ffreestanding 指示编译器不是假设标准函数有其通常的定义。
" p# W; u; u  e: R2 g$ k; W: u/ d& J9 `0 l
默认情况下,GCC将作为托管实现的编译器,将 __ STDC_HOSTED __ 定义为1,并假设当使用ISO C函数的名称时,语义在标准中定义。要使其成为独立式环境的合适独立实现,请使用选项 -ffreestanding 。然后它将 __ STDC_HOSTED __ 定义为0,而不是假设标准库中的函数名的含义。  p7 @$ S  b4 h% y

5 n. |3 Z/ M7 |+ `& V0 \  Y除去勾选后可以解决编译错误,但不知道执行时printf功能是否正常。
0 U" F% e. ^- S, G7 E' `% F
* _. w1 p  }- j4 ~. C9、编译出现如下错误:0 f$ e; G0 j: o' A0 M7 ^
In file included from ../system/include/cmsis/arm_nnfunctions.h:163,
9 O: |5 c6 J- ]. v! W2 _8 p8 Z7 B4 `) }1 {
                 from ../src/tensorflow/lite/micro/kernels/cmsis-nn/add.cc:18:! S% z  n/ g( |% z

# ^5 C4 w4 a' N' a  P../system/include/cmsis/arm_nnsupportfunctions.h:452:1: error: '__STATIC_FORCEINLINE' does not name a type
  H- {; p& ?9 @4 T- A
2 j5 e2 b, L. K. h2 i, h  452 | __STATIC_FORCEINLINE q31_t arm_nn_read_q15x2_ia(const q15_t **in_q15); u0 v, \( N! V3 t; D, ^3 ^% X

. g, {# k( ?/ v; K# c      | ^~~~~~~~~~~~~~~~~~~~
/ }% n) ~. ^2 C$ i4 L, j$ g6 N/ n
0 b6 B! H/ y( U, W: w7 c4 h../system/include/cmsis/arm_nnsupportfunctions.h:467:1: error: '__STATIC_FORCEINLINE' does not name a type1 [; s# a( M' U, g6 c

" U1 j7 E% K; D# m  467 | __STATIC_FORCEINLINE q31_t arm_nn_read_q7x4_ia(const q7_t **in_q7)
, W# N$ o5 T0 }
! ^, ]5 T1 h& y! S% p4 H      | ^~~~~~~~~~~~~~~~~~~~
* a5 W8 F. p# D% l7 R1 r4 R" [3 x# R& e/ x- k6 ^' H* F, i( N
../system/include/cmsis/arm_nnsupportfunctions.h:481:1: error: '__STATIC_FORCEINLINE' does not name a type3 {6 t2 y8 G, t8 u
. i, |% @3 _5 \4 |
  481 | __STATIC_FORCEINLINE q31_t arm_nn_read_q15x2(const q15_t *in_q15)
$ S6 o0 X' U/ k) r1 |0 v$ K9 e0 w: r& n" ~0 T7 {5 I, a- ~$ C
      | ^~~~~~~~~~~~~~~~~~~~
1 x2 Y$ h9 s: T  L5 y* P2 }' ^- ?* z+ q' u/ d
../system/include/cmsis/arm_nnsupportfunctions.h:494:1: error: '__STATIC_FORCEINLINE' does not name a type& l2 z1 P/ N) D6 H5 m# D

3 W: ^0 j+ y/ }# p  494 | __STATIC_FORCEINLINE q31_t arm_nn_read_q7x4(const q7_t *in_q7)2 }3 p/ W" W! R5 B1 r8 E" Q

$ _+ Y4 v7 B% t( K大概时工程自动生成的cmsis代码太旧导致。替换成新版本的cmsis的代码。
7 j! o1 @. d, H2 D8 r8 b$ I6 f3 t; I; p7 g. G
10、../system/src/diag/trace_impl.c:32:10: fatal error: cmsis_device.h: No such file or directory
4 c( B& G' s8 h4 U   32 | #include "cmsis_device.h"
! B' f5 i9 G4 {# B3 ~% j7 x& p" t& O# B% m& |" y
      |          ^~~~~~~~~~~~~~~~
* }9 F4 ~" ], F: H% L8 I# Z) O- q& @  K4 I; h% ^+ P4 z
compilation terminated.( D1 ~$ R) l+ ]& V& I

6 T( e+ I  Y; B, w0 ~3 tsystem/src/diag/subdir.mk:21: recipe for target 'system/src/diag/trace_impl.o' failed0 B& `/ }2 a9 H6 N9 g& |  u

  A# m/ [. W( @$ s. k4 [make: *** [system/src/diag/trace_impl.o] Error 1# F. H7 ^& G8 t- g
% u5 c- n  a; C4 o- g5 U* C
新版本没用这个头文件了,其本来的定义是包含了#include "stm32f7xx.h",因此直接替换本处代码为#include "stm32f7xx.h"即可。, _. {) i0 b8 D8 O2 b

& f0 t7 k, j$ z4 {8 u! c; r. {/ _3 g5 r& w
收藏 评论0 发布时间:2021-12-13 22:50

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版