请选择 进入手机版 | 继续访问电脑版

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

【经验分享】STM32怎么创建工程:如何创建第一个工程模板(基于固件库)

[复制链接]
STMCU小助手 发布时间:2022-5-18 22:45
一、 首先在电脑的某个目录下创建一个空文件夹用来存放工程文件。创建好后在该文件目录下分别创建CORE 、FWLIB、OBJ、SYSTEM、USER等五个子文件夹。至于这些文件夹名字,实际上是可以任取的,我们这样取名只是为了行业规范。* c& N1 b  ?% O( [

5 z' b! ?: Q) n# [2 R 3MH(K~9HPJWL4%{0@JC$$JS.png & c# c8 w* |' w3 [7 r) D4 N

0 E+ X" S8 i- K4 r& {7 K; P% \1 ]  z二、打开keil软件,点击 Keil 的菜单: Project –>New Uvision Project,保存时将目录定位到自己创建的文件下的USER子目录下:
! F3 r; Z8 Z! l" N+ Q6 X5 R4 t; A
( r. c9 @' \* g8 \4 t; V! _% U N0$C[E39D}CPTX%R~8(2ARA.png
. R0 j2 W7 r+ {8 y$ Q5 f) s7 a
5 ^5 I8 m) }& z9 R+ ` R8W1LIV52ZFC3(CPV7]X3DE.png # [. a) ^" r4 m
+ R8 m( P! W: C* d" q
三、接下来会出现一个选择 Device 的界面,就是选择我们的芯片型号,我们选择STM232F407ZE(如果使用的是其他系列的芯片,选择相应的型号就可以了)特别注意: 一定要安装对应的器件支持包才会显示这些内容)。5 @& z+ _. m6 r: {6 c
5 ?" M! u0 m. u$ `0 Z0 t
ZQY5%(4%D]O)E(~W3%RK@%L.png / ~- x6 a% s# e7 v0 j
) w$ y# c% w; i6 T( s
6DXTIBIZG{AKG1RQ)R@6}_D.png ) y( U: g1 r5 o8 z# l
1 a9 @; }. c3 S- |, @2 i2 y
这里是一些组件,直接点击OK即可,这样工程文件就算初步建立完成
) {" u" N1 J8 W2 m  ^6 }5 @; G& U0 `. x/ T0 J$ v: c& [
四、打开TEST文件下的USER子目录下可见包含 2 个文件,Listings 和 Objects 文件夹是 MDK 自动生成的文件夹,用于存放编译过程产生的中间文件,这里可以自由设置,到时候会定位到OBJ里面去,这两个文件可不用理他
" ^) x% i# K( }# a3 C
' [) F: n4 e5 g( ~8 L DFVR1%PU]%RBFO_{1@XVF(R.png : }; w. W1 p3 C( F
3 B- ^, a+ X0 {

, |1 X4 m7 b" F' Z" U五、现在打开官方固件库,定位到\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver下面,  `$ Z8 ?, L3 n1 ^: l0 G
将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 FWLib 文件夹下面。
7 J" \1 ]+ {" {6 p5 ]& s( {
0 I$ X  k; F* \2 D, Y9 y! w X(ZKF%~_AQE6}D`KET9KGM1.png 9 i1 q) V2 P! \

7 a, R$ _& Z% U0 h; t
) x5 L7 s# f8 g7 ]1 ~% u六、同样定位到 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm下面,将文件 startup_stm32f40_41xxx.s复制到 CORE 目录下面。
& r- ^) Y* |5 x) v9 g2 ]) A2 W# j/ b! K) t- V# x. `# v
Q0$$KN~LHA_(R2{)BNXO2[F.png
" e6 |3 e8 H2 `4 ?# d8 w2 T1 U; `3 a. f! `& P/ C

) |" N6 g8 ^1 K8 _& z然后定位到目录\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ, 将 里 面 的 四 个 头 文 件 :core_cm4.h、core_cm4_simd.h、core_cmFunc.h 以及core_cmInstr.h 同样复制到 CORE 目录下面。! p9 M  S0 {- x) I( t2 [
, |; h% }5 J; q& `9 S/ j
}IHSVMHDMA0G2Y3~V_)}S]2.png 8 z4 N4 g: D) ?+ l  X7 T

+ m5 |) C9 |# }! k6 I# }
3 M) H/ a& j% j1 d$ S七、继续定位到目录:! L8 m. }$ q+ y* ~$ d
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include将里面的 2 个头文件 stm32f4xx.h 和 system_stm32f4xx.h 复制到 USER 目录之下。 这两个头文件是STM32F4 工程非常关键的两个头文件。
( A9 Z0 ~7 t3 k8 L5 T/ B' d
( `. ^1 o  A4 r% ?* l+ L. e 8)SYM~3VG(L91$YULFP[V3Y.png 0 k0 x" D! X* j& N$ u  B

3 y  b- J' M7 O* O0 W6 `
. k6 l6 X  @  |' y6 K  x5 f然后进入目录 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates,
5 u) Z9 g6 T: e3 G2 G( K7 w. \- ^: a& ?
将 目 录 下 面 的 5 个 文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h ,system_stm32f4xx.c 复制到 USER 目录下面。, _. Q1 B/ @" x5 l
" t8 V1 j% l$ d' }
GQXE`)~BA)R]9%W7}M(N]$G.png
; s4 Y  R! K: j2 q  V3 X& \: l# s1 U( x8 m# {
. M$ r. e& V+ W. A% Z8 v+ b! o1 _! U
最后USER文件如下图所示:
, X; m) t4 q! V8 r
- o( I5 D* h1 r$ r; } M~O%0NH%LAH5`)(LRE[16S5.png
( |) @7 l  j- f! ]3 ~+ N: z" U: x2 P0 p8 {5 N# }# B
八、完成以上步骤后,下面我们需要把这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items,如下图:
7 r* o% U) @0 J2 a3 w! t. j3 W- i9 B; J' o
4{6NINND4}D}2%{WNF1Q}OG.png $ j& R- c' ^0 L( l; i8 ?

. W5 z$ X+ c( b. K
* Z6 M' F; t! Q1 i6 K$ w3 t九、建立三个Groups: USER,CORE,FWLIB。然后点击 OK即可
( b& D6 j8 K3 Q1 N9 y3 H8 z; l2 }3 g" A7 l
7DDJCV}T}6L~4J9M0U4%WYJ.png
  @6 Y( _4 W3 X" g: N
# ?( |$ j; P9 V& G% r% x) q十、接上一步,添加需要的文件选择 FWLIB,然后点击右边的 AddFiles,定位到我们刚才建立的目录\GECLIB\src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件。3 K2 f  B* E9 |/ X* T1 B) Q; j" _

# f; t/ A; K) H! s2 \4 C @$W[BF31T9AI[OY0[B~XSH5.png + J" s9 N" ]7 b0 m! ?4 k, x

4 c/ s, G& e1 M& i/ N, e+ J* j3 o5 f' `
注意:) p% \! j- s" r; @/ j' q
& N/ j# \8 t& h  v2 n
1、例若只用到GPIO的配置,可以只选择stm32f4xx_gpio.c这样可以减少工程的代码量,提高编译的速度。
4 U8 ~6 z" y# v7 L7 d: ?+ V, e) P- R5 d1 q- N3 S
2、有个文件stm32f4xx_fmc.c 比较特殊。这个文件STM32F42 和 STM32F43 系列才用到,所以我们这里要把它删掉(注意是 stm32f4xx_fmc.c  要删掉,不要删掉stm32f4xx_fsmc.c)。' p0 B" R# [3 I  y
4 S, j3 B" e" J  }" c* Q6 `
十一、用同样的方法,我们CORE下面需要添加的文件为 startup_stm32f40_41xxx.s(注意:你需要选择文件类型为All files才能看得到这个文件),USER 目录下面需要添加的文件为 main.c, stm32f4xx_it.c,system_stm32f4xx.c。最后点击 OK。
' N3 I1 K1 h" N' s& s' E3 H0 g. T4 X' [+ M4 U8 S- p* S1 M
W0GLXS4($~~9Q{M1_EX_3`8.png
6 U' F4 u1 @, w8 G; u8 f4 |3 ~4 P( l$ \3 c4 V9 q5 P

; m" C5 D: g3 q- Z, i5 {0 Y  f# I! d十二、进入设置界面设置头文件存放路径,如果没有设置头文件路径,那么工程会出现报错,头文件路径找不到8 M% ?7 Z1 g2 O+ C, E

8 Y; i2 M, ]( V2 y( W& u 52{XNE(LTUMOBVBCU%TMIEU.png
( Z$ e+ Y$ g2 @/ C+ y; r; y
+ A( L! {2 Y) C% J2 u- @" Q. d' y8 A& e
TZ`HWX)W_KELG5C@70X53MH.png
1 b" {& n! ^! j' C5 }% w
7 V1 g; C8 w1 p  [3 K. k我们需要添加的头文件路径包括:\CORE, \USER\以及\GECLIB\inc。若需要添加到自己建立的头文件,也需要做路径的添加
! r' |0 H' l* a) \9 h5 S: Z. v# y/ c) o
}Z20ILV1UM88CW@_IERBO)C.png * B% [! q( i1 D' k4 D  w
& F: y9 y% b5 Y  L9 k9 D0 j
) f' F! P& I: f, U' [0 I
十三、STM32F40 系列的工程,还需要添加一个全局宏定义标识符。添加方法是点击魔术棒之后,进入 C/C++选项卡,然后在 Define 输入框连输入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。注意这里是两个标识符 STM32F40_41xxx和 USE_STDPERIPH_DRIVER,他们之间是用英文的逗号隔开的,请大家注意。
7 @7 P2 T( J( R4 M( f9 i4 L; u! B( ], ~! H& k1 z' q
{}EI8GLVWOES_(]B[UB7G7C.png 0 _$ X' ?4 N. V5 z6 C
" n3 v6 S, I/ T# r2 P# b
& l% j. i6 X, F4 r
十四、在做编译工程之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择“Output”选项下面的“Select folder forobjects…”,然后选择目录为我们上面的新建的 OBJ  目录。然后再OBJ目录下就可看到我们需要的程序.hex文件了。(上面第四步所说过)' H! L  O. c' T9 S& q" S% d8 \
) o& v" q+ L3 |, G8 e/ l
MMK$}XA)`ERFW8FUEY1W}CP.png 5 `2 u* K$ ^) {( t
! K" X- v+ T6 A& U. [- U
十五、在编译之前,我们先把 main.c 文件里面的内容清空,编写自己的代码与此同时,我们要将 USER 分组下面的 stm32f4xx_it.c 文件内容清空。 或者删掉其中的 32 行对main.h 头文件的引入以及 144 行 SysTick_Handler 函数内容! v, Y! H0 b# J8 M' f

1 C; e5 ^. a, x2 H" U2 n0 r 67XWZ2MU_D8MMD9(NIZ@~F8.png
% O6 a# K. Q1 @+ t1 ^, I3 H8 w& p& E# ^* n/ X" w" d& v
[1WU3DWO97(6}V0BVKQT(Q2.png / ]  X+ J# s- n5 B2 y+ _/ r4 |8 k3 W2 P8 [

* M+ `5 a+ C* L$ w/ s下面我们点击编译按钮 编译工程,没有任何错误和警告,那工程文件就算完整的建立完成了。, I6 g; E4 N/ W0 @9 f9 q0 [0 y

0 m. k  N; c4 c! g) @; V十五、最后,打开工程文件会看到以下文件信息,这里不做一一介绍
: B- i$ _: D4 _/ r* x. b( V: C, s
- X. E3 f1 h+ j5 y# Q! Z注意:LIB里面的文件可根据自己需要进行增加或删除
  y- l$ D% k% i5 G7 _  E3 k8 k1 e$ h
{~XE`D1WC{DK9F[ZV$~FRKF.png
( C3 ]0 x5 ^! O& U% X- t  Y
) ~/ P1 P5 B1 W& o$ J3 u; y1 C如果是控制简单的GPIO输入或者输出,可以使用以上的这些文件就足够了。8 f: Z$ g8 Y1 {- ?; ^' ]5 m
' i3 \  M7 P' C# k* _

: g7 `4 y$ x+ L( }% f1 [/ O! Z
收藏 评论0 发布时间:2022-5-18 22:45

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版