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

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

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

9 @. h/ x; v4 F9 Y 3MH(K~9HPJWL4%{0@JC$$JS.png
) |/ t0 G4 C/ ]/ A) W
0 H0 X' a7 s5 g; z1 W二、打开keil软件,点击 Keil 的菜单: Project –>New Uvision Project,保存时将目录定位到自己创建的文件下的USER子目录下:2 Q0 x# K5 @- T2 K, D8 i8 E
! ?% q9 U) A3 O7 B: R( p
N0$C[E39D}CPTX%R~8(2ARA.png
3 V! `7 G! ]: c/ e
& W/ O# A& ~( S# U6 H R8W1LIV52ZFC3(CPV7]X3DE.png , P2 x4 l+ d, Q% n
6 D9 e# s1 U4 x% f9 \; A" Z) F
三、接下来会出现一个选择 Device 的界面,就是选择我们的芯片型号,我们选择STM232F407ZE(如果使用的是其他系列的芯片,选择相应的型号就可以了)特别注意: 一定要安装对应的器件支持包才会显示这些内容)。) K5 b- m; Z; Y, W4 c" J

' }" @; G* F! ?9 R! q ZQY5%(4%D]O)E(~W3%RK@%L.png ) M' P8 `3 [  i" {  S' o* @
; O" [3 Z6 L' q" w: J* e/ ~3 k
6DXTIBIZG{AKG1RQ)R@6}_D.png
) ^5 m7 R$ Q. |% `. m' B( m: ?2 @. K8 o% _* ?
这里是一些组件,直接点击OK即可,这样工程文件就算初步建立完成  ]" o5 B8 t. x2 _) d
9 ]& [4 U& D# h5 H( \, R/ b
四、打开TEST文件下的USER子目录下可见包含 2 个文件,Listings 和 Objects 文件夹是 MDK 自动生成的文件夹,用于存放编译过程产生的中间文件,这里可以自由设置,到时候会定位到OBJ里面去,这两个文件可不用理他% o5 k- q3 R# m0 s1 ?7 e

' q7 w" J0 K. `6 a! Y- r DFVR1%PU]%RBFO_{1@XVF(R.png 7 D0 |1 L5 H1 n" B: |

" B6 {: w% a) E: A6 j1 J6 r% c+ `; P# [! u
五、现在打开官方固件库,定位到\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver下面,
# c+ n0 l' ~2 k$ d9 w* \7 q/ [将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 FWLib 文件夹下面。9 v+ r( S" p0 f' p5 O

/ F2 U2 S9 a% G X(ZKF%~_AQE6}D`KET9KGM1.png " A& u% s( {% F5 V0 x, z
9 B4 z. T9 J; {
$ g, a, u3 J; F: x2 r
六、同样定位到 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm下面,将文件 startup_stm32f40_41xxx.s复制到 CORE 目录下面。
3 ]8 \  b% |! H6 Z) L
8 e# r, `) _2 s- t  k- x, [& [* l- } Q0$$KN~LHA_(R2{)BNXO2[F.png
7 S4 v/ z7 ^+ [9 O( h; s0 |/ u% ]6 x: j  c* ~1 b0 x! y" B& ?. h
  y# }; K# i9 w3 `, h
然后定位到目录\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ, 将 里 面 的 四 个 头 文 件 :core_cm4.h、core_cm4_simd.h、core_cmFunc.h 以及core_cmInstr.h 同样复制到 CORE 目录下面。* u3 j( g# Y6 q- K

0 S1 L+ J; T* y: B, a( j }IHSVMHDMA0G2Y3~V_)}S]2.png . x) ^5 p2 E- C; M3 G
2 ^1 t1 L; E8 K; _" o% a) c# C
& s$ M( b7 T- A
七、继续定位到目录:
/ u. l* q: u% e0 OSTM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include将里面的 2 个头文件 stm32f4xx.h 和 system_stm32f4xx.h 复制到 USER 目录之下。 这两个头文件是STM32F4 工程非常关键的两个头文件。
$ Y6 N8 `5 m: m
0 q' H9 {! a! C+ @; t! g% ? 8)SYM~3VG(L91$YULFP[V3Y.png 8 L2 R  N6 A4 D9 _  a
# c( n/ c5 C% j) k8 {

4 P( ^5 E5 K7 c: D0 e2 r然后进入目录 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates,
, H$ T- P; M# f/ A$ y( F& T, J" y- _9 L3 p8 ~- ~# l) @: d/ y
将 目 录 下 面 的 5 个 文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h ,system_stm32f4xx.c 复制到 USER 目录下面。
' e8 L6 Z) {7 _% d9 @
0 w9 |6 g( x& t( R( b GQXE`)~BA)R]9%W7}M(N]$G.png
+ Q: C/ X5 @6 x  u8 s0 a) G2 x* z! z: S% j

* R* R1 R0 o, ]/ p最后USER文件如下图所示:
4 B. N' A( T7 y, s6 s, y& w" R4 U/ l" ^( c% Q3 f1 v: z  D
M~O%0NH%LAH5`)(LRE[16S5.png ; n; `( j% J/ R0 o

8 @& ?# ?7 T3 o1 v( ?( f5 ]八、完成以上步骤后,下面我们需要把这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items,如下图:
0 A2 Y9 f& n6 M- b* l) w0 q; l" K& a& J% a1 v$ A' D( a- T/ w
4{6NINND4}D}2%{WNF1Q}OG.png
; x  R& [# ]" I$ I% I  q
. Z! P; g8 J) i" s' a, K' \9 q5 [2 r  N% c& T4 j3 N4 ]
九、建立三个Groups: USER,CORE,FWLIB。然后点击 OK即可
& `. L; ~* B3 s% [1 W! j$ \1 M, h2 s
7DDJCV}T}6L~4J9M0U4%WYJ.png 2 h, a0 i; z2 I4 ^7 N- ^

/ b4 w( G! E4 l/ e: C! s十、接上一步,添加需要的文件选择 FWLIB,然后点击右边的 AddFiles,定位到我们刚才建立的目录\GECLIB\src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件。4 \) I8 j! h. _9 g- e
+ z) b+ T8 I/ V2 T
@$W[BF31T9AI[OY0[B~XSH5.png ! ^8 S+ T) r0 @: ~# j

8 ~5 }0 u+ v: b- A
0 F7 P" @# d% W' x4 }) D注意:* f& f  N- }; @9 T5 F. z* d

$ S! T* R0 T7 r. v& C# R! G1、例若只用到GPIO的配置,可以只选择stm32f4xx_gpio.c这样可以减少工程的代码量,提高编译的速度。
5 e4 Y% d+ N& v0 S) O1 X5 z7 {1 U" K0 w- z1 K$ s( \) G: W
2、有个文件stm32f4xx_fmc.c 比较特殊。这个文件STM32F42 和 STM32F43 系列才用到,所以我们这里要把它删掉(注意是 stm32f4xx_fmc.c  要删掉,不要删掉stm32f4xx_fsmc.c)。* A- d5 ^3 P8 Q# e+ n) r
8 j- ]9 l8 Q3 V0 e
十一、用同样的方法,我们CORE下面需要添加的文件为 startup_stm32f40_41xxx.s(注意:你需要选择文件类型为All files才能看得到这个文件),USER 目录下面需要添加的文件为 main.c, stm32f4xx_it.c,system_stm32f4xx.c。最后点击 OK。
5 f. T) x* o" M0 |" |7 u8 n2 p2 m+ F5 t7 r$ R" T4 \% C* z5 y! x
W0GLXS4($~~9Q{M1_EX_3`8.png 6 t: [: g: X& l" H! t0 Q
: J" u3 o9 A+ b2 r- |2 \

9 o( I6 Q6 |! g9 I十二、进入设置界面设置头文件存放路径,如果没有设置头文件路径,那么工程会出现报错,头文件路径找不到
- v' u. c3 m# ^" O
9 V- N, b/ P- B, u6 W# y 52{XNE(LTUMOBVBCU%TMIEU.png
; p9 K7 \0 w# g' z& A1 S5 K8 y+ ^; ]+ w+ E2 c! C- f% E% E& l; @

& S- F9 S& D4 }1 ^) H TZ`HWX)W_KELG5C@70X53MH.png
3 s0 x1 g9 i" d6 {% Q1 s' i7 |* g) [" u  E4 n
我们需要添加的头文件路径包括:\CORE, \USER\以及\GECLIB\inc。若需要添加到自己建立的头文件,也需要做路径的添加# R+ e& j& t; M6 o+ k3 V+ a

  _. Z7 c( @) c }Z20ILV1UM88CW@_IERBO)C.png 9 }9 e% `1 D8 Z

4 L! m9 [1 e% s/ I" Q6 p
6 ]- k3 s% \; b十三、STM32F40 系列的工程,还需要添加一个全局宏定义标识符。添加方法是点击魔术棒之后,进入 C/C++选项卡,然后在 Define 输入框连输入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。注意这里是两个标识符 STM32F40_41xxx和 USE_STDPERIPH_DRIVER,他们之间是用英文的逗号隔开的,请大家注意。0 L* H# {: K! O% k6 L; R9 S( V

/ U$ G" ~5 \* {* ~9 n& F {}EI8GLVWOES_(]B[UB7G7C.png
% N# I7 X2 ]+ |( e& M) ~+ ^/ ~/ J/ T+ r2 Z* L  B' T, B( @
' K9 V! f5 t0 Q6 ^) A! {
十四、在做编译工程之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择“Output”选项下面的“Select folder forobjects…”,然后选择目录为我们上面的新建的 OBJ  目录。然后再OBJ目录下就可看到我们需要的程序.hex文件了。(上面第四步所说过)
9 j9 u* z1 z# j# [- Q
+ a, J: d; s, X MMK$}XA)`ERFW8FUEY1W}CP.png 0 y! W# Q/ R) Y4 G; a, ~
# U4 D1 B! ^2 _, e2 I
十五、在编译之前,我们先把 main.c 文件里面的内容清空,编写自己的代码与此同时,我们要将 USER 分组下面的 stm32f4xx_it.c 文件内容清空。 或者删掉其中的 32 行对main.h 头文件的引入以及 144 行 SysTick_Handler 函数内容0 `( C( q- x, |! H- v; J: u

6 H: J# V8 q9 V* \  O8 _ 67XWZ2MU_D8MMD9(NIZ@~F8.png   P8 {4 s9 ^. i) O- y2 }5 ?

7 q, @7 Z3 m7 e. I [1WU3DWO97(6}V0BVKQT(Q2.png
8 P5 Y  a. ~' a" I1 D- B
3 |! x. e9 D- |1 D7 }下面我们点击编译按钮 编译工程,没有任何错误和警告,那工程文件就算完整的建立完成了。
$ ~  L, g3 A: |( q6 b1 ~7 }0 S3 j1 ?) q$ R( F
十五、最后,打开工程文件会看到以下文件信息,这里不做一一介绍7 O4 p5 m2 \4 t
" ]; U; `/ b5 K" X  D  s! D" Q
注意:LIB里面的文件可根据自己需要进行增加或删除
3 f# X6 H8 G5 [: M: b; U* s& S$ [+ J; W( b7 Q
{~XE`D1WC{DK9F[ZV$~FRKF.png
" z# O$ j+ X+ O& b# }$ |+ f( \
! ~1 w* c( ?  V如果是控制简单的GPIO输入或者输出,可以使用以上的这些文件就足够了。# e0 V, G2 w$ E! D: h" {
& ?0 L0 u8 ?6 z6 l  k2 u  V
( F0 w) E& R5 Q1 t4 G
赞 收藏 评论0 发布时间:2022-5-18 22:45

举报

0个回答

所属标签

相似技术帖

官网相关资源

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