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

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

[复制链接]
STMCU小助手 发布时间:2021-12-13 22:50
由于工作需要,用eclipse搭建基于stm32f7xx芯片的工程环境。记录下安装和编译链接工程过程中遇到的问题,今后可以参考。同时也希望能给遇到类似问题的人一些参考。/ `1 t  |/ j( ]- [# }8 Q0 T
$ S2 j) d! w0 O% K( Y
Eclipse: 一款开源的集成开发环境(Integrated Development Environment),配合众多插件,可以用于Java应用程序开发、Android应用程序开发等。最精简的Eclipse只是一个框架,开发不同应用程序时需要安装对应的插件才能进行,不像微软的VS已经集成了众多的编译工具。- {+ {2 h' e, Q' B" |9 o6 s

! ]8 u& w' X2 D) u6 G  lCDT:开发stm32应用程序主要使用的是C/C++,所以Eclipse需要安装CDT(C/C++ Development Tooling)插件。
/ O% l! g. n2 V; y5 _/ o0 ~; O! p$ I4 t* t9 F( E
GNUARM Eclipse: 包含一套Eclipse插件和用于跨平台嵌入式ARM程序开发工具的开源项目。有过stm32库函数开发经历的朋友可能知道,开发前我们都会找一套工程模板,包含了对各个库文件的引用,我们只需要关注核心的应用即可,换一个项目时我们就拷贝一份模板,重新进行开发。Eclipse装了GNU ARM Eclipse工具簇后,新建项目时我们只需要选择对应模板的项目,插件就会自动帮我们配置好工程。# I4 @& K3 J& k# \' `
$ k% L2 _% W1 i5 d% p# J
Windowsbuild tools: 程序由代码变为可执行文件需要进过编译和链接的过程。Windows下的IDE无论是VisualStudio还是KEIL,编译工具都集成到IDE中了,且有着自己的一套管理项目文件的方式。Eclipse创建的工程会自带makefile文件,该文件的解析需要make工具。Linux下自带make工具,Windows下需要使用Windows build tools作为make工具使用。- F8 r8 ~" b. y3 A* K

2 M& f, ~8 C' V( {& q" V) u# d7 [GNUARM Embedded Toolchain: ARM交叉编译链,被编译的程序运行于基于ARM架构的处理器上。
: e; s) ^7 |) V, H; {6 l; m9 l' s! L8 k' {
下面介绍下我自己的安装使用过程。$ n2 G. m( H/ V0 E
$ ~; N: y* S7 e1 o  `/ g
1、搭建基于eclipse的开发环境需要安装的软件包:
8 H( e& V% Z$ F. s3 d) c$ |0 B/ s2 {5 d- e7 x
20200518114132563.png

9 q! Q0 C9 i- s/ m' C3 Z
5 |' A4 y4 I% O0 X* E6 ~' R
202102240948015.png

& i. f; q4 t/ N# `* _0 ]( m2 U3 Z5 s  U5 T

& n% L$ ?8 }$ c: A按照说明上的需要先装xpm工具再用命令安装windows-build-tools包,xpm的安装方式是用npm工具。npm是nodejs下的包管理器,先下载安装node.js。
3 ?$ u8 t/ B. G1 g; B- p) H$ S! Z/ Q. I/ q: p1 Q
20210224095516888.png
! g* b1 F. b% U- j0 {0 h1 O; J

5 A, `7 P  A  n$ Q* B2 W2 o; H& D点14.15.5 LTS 下载
% Y) C$ \' S6 z" Z2 i
% `. w6 h+ I# M; S8 ^. A  \
20210224095643120.png
( C0 J# R1 o, j
; u6 I. K. o( g( ~
双击安装' a8 a, S- J& w& ?8 g- A  R

6 D) o; W8 s' w3 N
20210224095732314.png

/ O; A- Z( o$ n
+ _" T+ m0 R  P' Q7 s安装完毕后用npm命令安装xpm:npm install --global xpm@latest
3 U! `( b) z6 u; L% d# I  `9 O  q5 x/ X
20210224095848166.png

' {6 p' k& a: D& I9 l- q0 i
4 B' D$ Y: O5 X6 q' X, f2 cxpm安装完毕后,就可以根据说明书上的安装命令安装windows-build-tools工具。
  z; e7 X, M) z- `5 I! B" N- b
3 ]: _9 q1 E* \- M7 w
20210224094649121.png

8 e* U0 ?6 }$ @2 K
2 o3 U" V* x$ j6 j! _8 O# C4 o6 L# Y) r% \' q
eclipse C/C++版本! J5 O, ~% k9 [

) x& R  D/ p: @& M 下载 C/C++ 的Eclipse IDE,免安装,解压即可用(前提是JAVA环境配置好了)
  n1 y$ o* F; z& L3 `% b& o0 |5 U; ?7 S3 q  c
20200518114203468.png

4 U$ m7 r1 K6 g8 z4 D. K$ {) J3 w1 V: Y( m" [! J

, g- o7 |) Z5 p- ~安装GNU ARM Eclipse插件。6 m7 }2 O+ C; ?! T

9 Q& d. ^  t6 n2 F! t0 t; p# \" u用xpm工具安装:0 D) Z1 C' z$ {& X
8 M6 Q) h2 V% ?. ]
arm或者riscv平台的工具链根据工程需要选择。
- R$ R& x6 B4 o; R. h& u/ {6 `+ e% H
2021022410433298.png

. F" ^! h/ W' I) e4 X" l0 `
' m8 Z7 c$ M/ T* \; D2 m
' \8 A. P1 U6 I3 i8 O# f: l* a$ X! \! n1 H5 Y8 ~# [
打开eclipse,Help->Install New Software...->Add,在Location输入网址,name输入GNU ARM Eclipse Plug-ins。8 p8 i) e# j0 @  H
5 S% R, s5 T) {6 j7 p
20200518114221864.png
6 w/ D+ z2 S+ s. w$ s2 T5 U4 Y! c; s
6 ?/ C9 H4 j, ?- G2 K

9 C$ h6 K5 h. l4 r$ W2 h/ F$ x选中上面的工具,跟着向导一路next,直到finish,这时eclipse需要restart一次。6 w; m1 K, P0 J  ?6 N& Z; S7 J4 F

! i/ ^) j+ ]- j2 K3 _6 v( n% s创建一个基于STM32f7x系列的空工程
" y& }8 z9 F# `3 R" A* a; O, n; Z$ b$ p9 x* u2 M5 [+ J0 G% m
20200518114234290.png

, R0 e$ C8 ?* k
5 r+ B6 }+ ]1 u' b: `: ]$ }8 U然后,选择工程参数时有几个选项,需要根据自己的工程需求选择。不知道怎么选就先用默认的。工程运行中发现问题再来看看是否这里有需要改的。
8 l" L, a( d% K4 M
$ R( w8 X. g6 _) z- Q
20200518114311876.png
, H! g" t9 K( T6 G  w0 P

% D/ Q) I2 T2 ]3 V3 _& G" i
7 c) D+ d: a: ^5 P( l
0 |/ G: Q# X" {' C( t- }% R. v2 D8 J2、Eclipse中出现Type 'xxxx' could not be resolved的处理方法5 i3 s- t+ R0 _% ]2 O2 T
①选择工程->roperties->C/C++ General->Indexer
9 L9 l$ Q8 P$ E! ~. v( \
) z( z  Z$ v  H( e6 P$ v/ c②勾选Enable project specific settings
& k! Z' g7 J$ h
  P! K" S3 N, R+ ?③勾选Index unused headers as C++ files
. ]5 S7 h3 r+ ~5 M$ ?* P
& P3 P7 p+ I: F4 ~+ m) _: ~- J③勾选Index unused headers as C files
; o0 v6 Q8 q9 {) a8 K1 M& s% `- k  V/ C4 o+ U) L! ~

# w- W( p% i7 l' |8 x3 o3、提示错误“③勾选Index unused headers as C++ files”
1 ^/ W, c4 ~2 m2 s( S; c1 C解决Eclipse semantic error
2 x& S* |3 I( L' C4 `% U# [6 ~9 Z! A' i' S2 F4 O# M9 F  i
项目->properties->c/c++ General ->Code Analysis$ Q6 k" n! S2 [/ o& f

9 N7 O! u" G9 k9 ~(1) Potential Programming Problems
2 O9 t: a) Y, k, V4 V) }
) N/ {& {- H# U2 \. m7 E* fNo return value
3 b6 K; Q, P1 E# q) _+ S( B( U
) O- o. x) `* K3 u  b3 fUnused return value6 ^7 F9 n0 v, s& }3 E
( w4 }( V+ J  X
Assignment to iteself5 |+ D! h  Y* B6 f2 U+ B: E5 W! f
5 E! [3 A3 N! f! U. ]# Z
(2)Coding Style 全部; p: ^5 ^0 N0 a& P: e5 @, L+ L, d
; _9 A  n# T; Z  G- a5 P, o
(3)Syntax and semantic Errors全部# H+ g2 ]) E5 N0 }
0 \0 Q) ]0 o& k
(4)Securirty Vulnerabilities 全部
- o/ b9 g1 Q1 M
. M) p1 |7 @, G$ g以上内容全部勾去,如下图所示
7 {2 n0 V& x4 U5 g8 c
9 r9 k6 l# Q3 g0 `
20200518114341413.png

4 @6 j* A0 t' N- s: u
1 }0 W7 n5 `3 l3 Q$ O$ G4 x
1 R9 m1 }1 r! Q9 Q! A* X5 E! l- Y
8 F2 @# v, O  M5 ]2 f9 e; T0 M4、编译(工具栏锤子按键)程序,rtthread中用到的.s文件出现下面这样的错误,
! g; o7 G! {/ S  v4 X2 Qcontext_gcc.S:110: Error: selected processor does not support `vstmdbeq r1!,{d8-d15}' in Thumb mode

6 I. f- P* N/ o( R! Q8 c网上有好多说了一堆硬浮点软浮点的问题,都是建议改成软浮点,但是stm32F7芯片时支持硬浮点的,所以没用尝试改成软浮点。用了有人偶尔提到的方法:增加一个参数,ASFLAGS += -Wa,-mimplicit-it=thumb+ j0 [, A/ U( i3 v
) K+ ^& ^; T/ Y) ^' b( g
20200518114419879.png
7 e# X. g5 D" d/ f$ b( a* v. W( x
# ~3 M5 n- l2 v5 H: A
编译错误可以解决,不知道会不会导致运行时出错。+ ^. q; q, Q1 f; B7 e( }: c
* |: a7 q& n  p, H7 d4 I3 }
另外选择用硬浮点的设置方法:+ f% D9 i) a7 I+ \; k" u3 }

. l+ X8 Y$ q1 W4 J/ G+ {+ {$ r
20200518114439766.png
1 d; t8 Q9 s8 }
: p4 a% J" K, n: J
20200518114447984.png

/ x, o) M0 C& U: Q) g1 `0 i- k
- Y2 i# Q* p1 h" A+ y6 z) Y( ]5 y) n3 ?/ s1 W$ Z% l1 }9 a  }
5、rtthread下面的libcpu\arm\common\divsi3.S编译时报一堆这样的错误
4 e4 T/ ^: a% O9 B, b3 zdivsi3.S:330: Error: Thumb does not support conditional execution
' u- j8 M) s4 L7 u$ `5 z0 |
看了rrt-nano的移植相关的说明,common文件夹下的大概不是需要加入工程的,于是把common整个文件夹都不放入工程编译。
+ l8 @' z: K" G* |
  }" b1 w) J1 K* n, x2 i0 W( `( b, S6、HAL库中的接口未定义报错
, D) T0 u" j8 [+ f  z# F1 PDescription    Resource Path Location Type
+ w  e9 L1 [5 Y
3 y) [6 e1 |1 ]( R( ]5 D* e* H8 J) mundefined reference to `HAL_UART_Init'    main.c    /mkwsf7/src/app   line 305   C/C++ Problem
  F6 t+ |5 i' g# S. g. ~$ b
2 ?5 C3 C& d/ I) v5 |1 A8 h: ]$ a* v创建工程选择F7系列模板工程时,会自动吧stm32f7的hal库加入到工程,但是很多.c文件被斜杠划掉了,如下:
" J, t0 |2 T6 J; x2 Z7 |$ o/ y
7 P& l9 Y* a9 C5 ], I
2020051811450640.png

$ X. \3 I# U# v4 B$ L7 ~  v8 R/ |7 j2 l* m+ m7 }) ^
* P( H: ]& T, C/ B7 y# \  D4 R2 Z4 o7 m

! y, M  `7 W( D; {9 q解决方法:
0 f" E1 k/ I( M( C. S/ H6 L
+ T! x* m8 y( X$ vproperties -> c/c++ general -> paths and symbols -> source location ->(找到为加入项目中的文件路径)edit filter 从目录中删除被屏蔽的文件来加入到工程,顺便通过add将不需要的文件屏蔽。
6 h$ v( R" _( G0 A
0 g! ^+ U: ~( |5 l; Z  `7、cmsis的头文件和src文件在创建工程是大多数没用加入,从keil文件中找到使用到的cmsis的头文件和src,替换原有工程的,原有工程已有的也替换,因为工程里的可能版本比较旧。旧版本会出现下面的报错。( X9 ?' k* e7 A; ^

/ ^! d' U* b. e6 w+ d
20200518114516419.png

# r5 |0 a8 O5 j( U, b7 X$ s' R4 o( }) x

0 S) m3 E/ h% ~. v* X9 X) B8、出现一堆系统调用接口链接失败/ E  W2 k1 n% s3 b: N" ^! Q
类似这样的报错:- @, |2 c2 x( D! b9 E
  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':
    " X7 R" f( U+ u( M* Y

  2. 3 c# T# N( O9 E8 Q
  3. writer.c:(.text._write_r+0x10): undefined reference to `_write'4 a6 d3 z' |) P, n6 C. h1 {
  4. + f! j! A4 V- ]$ f' B9 b1 k
  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':
    # Q: P' K+ |- E. M" S
  6. 4 }3 n; d% _5 W+ A' A+ _3 i/ r( d
  7. closer.c:(.text._close_r+0xc): undefined reference to `_close': Q0 e$ {  |8 N3 \: p

  8. ( ~3 |/ z. h  ^# Z6 S9 d7 i
  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':2 z! q* x, [9 V, _

  10. . h+ c( Q4 ?" V* C- P& ]; x
  11. fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat'9 y( d2 p5 J1 t. \2 G/ B

  12. ! D+ k# F: v, J$ @
  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':$ `# D  }1 ]+ g/ T2 e. _+ ^$ e
  14. # Q$ Q# `9 x# S
  15. isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty'; W; O+ C! c0 \0 L/ y9 C* j) k3 [
  16. , a7 r3 y+ Y) n/ X) y& j
  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':3 x3 f9 H- ]) G* d% U4 M

  18. 7 k' A, [; j/ K, V2 w
  19. lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek'8 V$ N* l/ Q9 H* ?
  20. + V- @( y" U6 V4 W" x  ~: Z
  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':1 a- g7 n% _) x2 ]3 I: F/ v9 s
  22. ) P" @$ v7 P6 u
  23. readr.c:(.text._read_r+0x10): undefined reference to `_read'
    # L. V7 A' o1 ~% `8 W
复制代码

) \5 J! j7 _$ o在_syscall.c中是有实现的,只是宏定义屏蔽了,因为工程里勾选了-ffreestanding。
! s8 {! S% l9 ]- E独立的环境是标准库可能不存在,程序启动不一定在main的环境。选项 -ffreestanding 指示编译器不是假设标准函数有其通常的定义。
* a5 S. z$ I. Z
  ^2 b8 W# \' V3 b% |2 s* |默认情况下,GCC将作为托管实现的编译器,将 __ STDC_HOSTED __ 定义为1,并假设当使用ISO C函数的名称时,语义在标准中定义。要使其成为独立式环境的合适独立实现,请使用选项 -ffreestanding 。然后它将 __ STDC_HOSTED __ 定义为0,而不是假设标准库中的函数名的含义。
, E9 E9 k/ A8 i8 q! ~9 d1 x
9 r9 C6 j  c! m/ o$ o+ E除去勾选后可以解决编译错误,但不知道执行时printf功能是否正常。
0 A  A' M+ ?/ v8 G  L  E3 ]5 s) Z& c" x0 ]$ W( H* x6 e) j. h
9、编译出现如下错误:
% D) w) Z8 S9 C: Y- }In file included from ../system/include/cmsis/arm_nnfunctions.h:163,& `4 J) v+ @( X2 ]* m7 W8 a  k

5 J4 L- c! d( Q; e- d! x" s% `                 from ../src/tensorflow/lite/micro/kernels/cmsis-nn/add.cc:18:5 W# n: m& C$ X! B& _4 r: q0 ]
7 ]3 S7 a: g% M) e+ Z0 Q
../system/include/cmsis/arm_nnsupportfunctions.h:452:1: error: '__STATIC_FORCEINLINE' does not name a type# v& d" T: T7 t- J
: P- Y. O( w. u+ ]3 Q0 F% p
  452 | __STATIC_FORCEINLINE q31_t arm_nn_read_q15x2_ia(const q15_t **in_q15)
/ I! v/ L& G0 L5 t; a
  g& {: x, D- j3 f      | ^~~~~~~~~~~~~~~~~~~~
& F3 b) p) t4 O$ B: k! t$ D  o0 X! q6 o) T5 Q# q4 R5 `
../system/include/cmsis/arm_nnsupportfunctions.h:467:1: error: '__STATIC_FORCEINLINE' does not name a type6 @9 J+ g& J  M& u% s, N# b) m/ d1 n
8 ?: @6 C% ~1 b( }/ U
  467 | __STATIC_FORCEINLINE q31_t arm_nn_read_q7x4_ia(const q7_t **in_q7)9 w3 _0 ?& {* `7 v
" a( p/ J8 n! K& L# ?' c: o
      | ^~~~~~~~~~~~~~~~~~~~
; O1 y7 \* a" n, {* C+ Q5 \* L3 @( L1 T/ C
../system/include/cmsis/arm_nnsupportfunctions.h:481:1: error: '__STATIC_FORCEINLINE' does not name a type( E+ \! ]: `5 a6 x% B8 s7 `
- g# ]% F" E5 a
  481 | __STATIC_FORCEINLINE q31_t arm_nn_read_q15x2(const q15_t *in_q15): V/ E) f$ ^, {8 c8 b$ L+ t
. c0 ^1 Z) n  i/ \9 l
      | ^~~~~~~~~~~~~~~~~~~~) d: v+ J) ~2 g! J$ b

* y9 i1 `/ Y5 ^../system/include/cmsis/arm_nnsupportfunctions.h:494:1: error: '__STATIC_FORCEINLINE' does not name a type% I, ^+ L1 P: J" H& ^' l) e
% e+ w. ?+ M) V2 H
  494 | __STATIC_FORCEINLINE q31_t arm_nn_read_q7x4(const q7_t *in_q7)) N6 [$ Z$ I! }3 f6 g+ z- T
9 E# m! m7 R5 r- f8 c
大概时工程自动生成的cmsis代码太旧导致。替换成新版本的cmsis的代码。
1 V2 a% I6 A' ^; _% ^/ V
, B. ^# j7 P5 M; p, `10、../system/src/diag/trace_impl.c:32:10: fatal error: cmsis_device.h: No such file or directory0 H0 V/ u$ `+ [
   32 | #include "cmsis_device.h"
' h& d! k% h4 {. E, l1 K& }% P% {) S5 p( T' l# T
      |          ^~~~~~~~~~~~~~~~
5 R7 |+ i' ~+ Q+ u/ f7 \# Y& [5 i+ X: S5 t4 M0 G$ p) G" q; g
compilation terminated.. G/ l/ p; \: R( j5 b( c( W% j
8 p% A# }: |! T. b! j
system/src/diag/subdir.mk:21: recipe for target 'system/src/diag/trace_impl.o' failed6 v$ m; a: [! Q

! P( N  q+ s8 u7 w$ G2 Omake: *** [system/src/diag/trace_impl.o] Error 1* o) {; N7 g* b: g; I0 H

! O8 p! P. w, v" H4 B: p6 d8 _新版本没用这个头文件了,其本来的定义是包含了#include "stm32f7xx.h",因此直接替换本处代码为#include "stm32f7xx.h"即可。1 \! ?* V" ~& E7 ~, T
  ~; b" b0 j% j

6 y( g9 B6 i5 w0 J: F3 _+ ^4 l
收藏 评论0 发布时间:2021-12-13 22:50

举报

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