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

【经验分享】STM32F1在MDK下新建标准库函数工程

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:54
STM32F1 在 MDK 下新建标准库函数工程( x% x: L5 d) a2 I  O
一、准备" k3 p6 J7 z9 [
STM32F10x 官方固件库;
: v* L' N( p6 x4 H# H! I- a  Q# K; X
20210408094157723.png

; _, k( S! }# w/ i' u9 o' R& w- ]; T
keil5 MDK 软件8 C9 ?$ B8 b  X9 z9 a
4 g  O3 c7 y6 @+ X. n
20210408094236205.png
7 ]8 P: w' X. G. @

  Y' z5 {4 Y  j7 W二、步骤/ f* o# k0 e: h# H
(一)创建项目文件夹,复制固件库文件
. _3 K* y3 ]8 X! U' b) g新建项目文件夹,名称自定,如 Project
7 _2 G. t" |- U0 h
5 O0 h  v' F6 c! g
20210408094308107.png

) C1 Y6 O$ T- ?: p% v4 H' E7 @* |+ W' T9 o6 i7 y3 e1 ^' W
在文件夹中再新建 4 个文件夹,分别取名为 CMSIS、Lib、Startup、User、Basic、Hardware,每个文件夹的作用如下表所示,此处参考来源于洋桃电子工作室:9 F, G) ~9 ~# S
文件夹名称        作用
8 k) E+ }, Y6 m: p; @0 O3 {% l
3 {! Z* d* T  i/ L6 i1 [5 ^
IGEW[WXJD`PW8`LB]%OI}T8.png
3 d: F. f+ @* n4 q4 g% S5 G' d

0 t% L" x! W/ w, t! H5 [) E) h" X
2021040809463570.png

8 H, U" E) {4 K6 y
9 y8 b$ S; D/ ~( v3 @为每个文件夹粘贴指定的官方固件库文件
+ m/ o  S7 f- c0 [CMSIS 文件夹中需要粘贴的文件在官方固件库中的路径如下所示:
) y8 @+ N7 u  ^5 w3 \9 a
  1. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport\core_cm3.c+ Z4 l4 E0 k0 t+ W, p& D5 g
  2. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport\core_cm3.h& ?% T# A) r; P$ M9 Y3 e! O! t5 f
  3. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h  u1 r: W9 v( c; d- O
  4. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
    ( Z" d, m9 h. }/ p" h
  5. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h
复制代码
* p/ `9 e2 ]! E% [; q+ _! y
因此,CMSIS 文件夹中的文件如下所示:
' N5 b4 E6 e) M8 T$ _
5 D+ P8 ?8 _0 v+ @3 D  J7 ^# \0 T
2021040809470937.png

& Z0 K! L, y7 G' x. Q! t/ F, C  q7 k
, J8 A1 X1 {! g- A8 xLib 文件夹中需要粘贴的文件在官方固件库中的路径如下所示:
# {( O$ N$ D( ]8 C5 D
  1. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc1 X, A+ H; o- k" j1 [7 Q
  2. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
复制代码

; y1 q3 y- P) r# ]2 b因此,Lib 文件夹中的文件如下所示:
, F4 M) ^# v8 \2 i' q, N. p, y- U* R! L2 ]: I
20210408094740591.png
' j- T5 g) H6 H: y6 z8 |
; s# Q& @4 S8 X: [) s% s) \0 ~
Startup 文件夹中需要粘贴的文件在官方固件库中的路径如下所示:
  1. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm(里面所有的文件复制)
复制代码
因此,Startup 文件夹中的文件如下所示:
3 \( [2 K4 y/ f1 j, E" E. s/ ]' o) c( H# f4 f
20210408094859930.png
! g3 @2 i! W+ K. R7 D
( Z6 r6 f2 J7 w+ _3 w5 @; U
User 文件夹中需要粘贴的文件在官方固件库中的路径如下所示:3 m' ^% f; k6 p6 X& M
  1. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\main.c0 u  c0 ?6 B% H1 h' D, z
  2. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\stm32f10x_conf.h
    ; l2 |) d# B' @
  3. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\stm32f10x_it.c- ~8 R6 G' v' K7 a1 i+ p+ O
  4. STM32F10x_StdPeriph_Lib_V3.5.0固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\stm32f10x_it.h
复制代码

% w! u; ~& B# c因此,User 文件夹中的文件如下所示:$ v1 s  J7 ?$ O

5 \% ]2 @* M; c- S
20210408094927828.png

5 l% o' m+ h, b( J8 O4 E
' {8 b% _! ]/ w% o' i5 D- p(二)keil5 创建标准库函数工程% M% d6 z* Q3 h; R" W! i

% z- g4 Z" K: [5 a7 K# l$ r% B打开 keil5,新建工程
( m- K& i) ?8 S4 K6 o& `% |! ^& Q9 l3 I5 f) U
20210408095052466.png

0 u/ x# U4 U! j4 r- Y* T  q# l+ |8 C' M) r; u
创建新工程,起名为 Project2 q* i8 Z( a; F& Q: g
! V+ G1 E8 O+ F  {7 {5 p% U4 J% [
20210408095121706.png
0 P, f: c* x5 ?& k4 z. H

/ I) `6 Q0 l2 ?: S6 S4 W) ]在弹出来的对话框中选择相应的 MCU,作者的开发板使用的芯片是 STM32F103C8T6,因此选择 STM32F103C8! v$ W/ Y$ \5 ?2 z! e& L
' D6 a  |* X( |5 [( _, a) A, k
20210408095144762.png
  r; q' j: Z# }# z' w) Q( I. c3 v

+ r" C/ L6 V- [  p/ H) h# s在弹出的对话框中,选择取消6 t- X7 E' p# {
4 l0 a9 F8 I* X( q
20210408095212494.png
  `8 ~2 b7 M7 L# p( X' y
1 v$ P6 [; {  i( A6 ?0 t
得到工程最基础的文件夹
! G9 r) _0 J$ U# q4 O* x7 G0 ~( E  A# i3 P/ _  j' r1 B" T
20210408095238898.png

' S) ^9 ]' w) z( ~; ^2 P
0 r9 C# Q% e/ ^; W8 Y% Q将刚才复制好的库文件加载到 keil5 中7 m7 l7 @) K5 d, b/ i8 q
点击菜单栏中的三个小方块按钮
2 y- B8 ^! x5 M' l' E" M# N' d5 n) X3 b- w* C! T+ F/ i
20210408095257539.png

- a4 `2 S( o% O" P7 f* B1 g2 S. r" [6 Y/ }$ u
在弹出的对话框中,在 Groups: 这一列里面点击方框按钮,手工输入刚才的几个文件夹名称,注意要名称一致,新建好了之后将原先自带的文件名 “Source Group 1” 点击红叉按钮删除: ^; {/ }3 w! B& A! l/ c& v+ }5 U
1 B4 T( _! n. I# u$ }5 E1 X
2021040809531784.png

9 V4 F' m& H* j) w, t
% a* Y& y( C. q% p& [' M: g# o0 J- n输入完成后如图所示:' L$ B) S2 j/ ~! F* Y  ?. y/ Y

! a$ \8 ?6 D2 V3 E# j
20210408095338843.png
' A9 z+ j) m+ u8 Y7 g
+ w8 F$ i: I* Q5 z6 o
在新建好的文件夹中添加对应的文件
" n- c! w/ B5 r, J8 O8 f) N) {& B3 O5 j3 o$ e* J9 y3 g; M; ?
20210408095401491.png
2 Z, D) c! L; t. k& s: P

7 ^; `$ w: @4 j* i每个文件夹添加文件之后的截图如下:
5 O& J& T2 c$ q' Z7 p, J9 D6 H4 P6 m7 W' s9 ^, m4 ?
20210408095429876.png

1 n$ _! o1 z/ C4 L/ @
+ ]4 t' A& g. r  _9 ^( |/ ~1 P2 _6 e; `+ t, d# ~# y
20210408095445707.png

8 t! F7 ^( k+ u+ Q$ @# ?  G* w8 d8 c& e% _( J9 }$ M2 [. s
20210408095458359.png
; R& {3 r( d" _+ ^& R/ M- @
5 R8 @9 q8 R0 r# B! S- U! {! C
20210408095512921.png

0 H0 [- l- L! X! N+ ?' h) V) u0 ~  t+ @+ S
. Z: O# m5 y& o: b) @
此时完成了文件的添加,点击 OK 退出
8 e: [9 f+ M1 i% ?+ c' J& Q" I1 _; p1 P- d# W: s
此时可以在软件左侧的文件树中看到刚刚添加的文件
5 U8 b0 l+ l8 h% x9 ]* M( o: T- r) V
2021040809552888.png
& j" h  @! g7 U- j
' e& `, H4 j5 O, J
进行初始化的配置; l2 k. J8 l- H8 {9 Y
点击菜单栏中魔术棒的按钮
; t' J2 g# f. C& _$ K; U( f8 ?0 ]0 [
20210408095544713.png
; w* z: X  {3 T) l' J; O
# s! j1 Y7 s9 _; Y
首先设置单片机的晶振为 8.0MHz
  i7 O# o. r- V1 ?" [6 B
5 }6 S- o( t7 U( r0 _* `7 K" o+ G
20210408095600386.png

/ \) L! @" r2 q' V0 [6 p1 Y+ j. E7 Y. y
勾选生成 Hex 文件
8 Z. h3 P( ^7 e7 @0 D% z
$ i9 \) Y" q6 I: l/ f( f
20210408095613226.png
$ f3 ~" ?7 n* D4 n

: h* U4 B& M  V/ M6 P# s在 C/C++中输入处理器类型,USE_STDPERIPH_DRIVER,STM32F10X_MD/ D( |" f: m0 A  b
% o8 t% o9 [6 h; F& e6 U
20210408095628530.png

, c, k' B; y  E! k+ {9 _$ h8 @$ D) |
6 \# p1 Y. Q5 f; O9 s( g在 C/C++中输入包含文件的路径,然后点击 OK
  |* \% C' b; l% f; D! u: D$ X$ ^% W1 S" M* Y8 p* h) h
20210408095641883.png

5 S; ?" W: e$ G# X! V( ]
1 i# g1 k' X# z  ?1 h在文件树中选择 main.c 文件,删除原有的内容,就可以按照自己的项目需求来填写代码了, T! ?* |/ z  e2 y0 Y5 d/ V

: \% g# \* g) F9 {4 z+ ~) k
20210408095716404.png
! f  v" x; }3 f; n! ]4 d( a8 I; l
: r0 V" ^! t9 a6 E; e
收藏 1 评论1 发布时间:2021-11-28 22:54

举报

1个回答
朱贵和 回答时间:2021-11-29 09:09:58
详细!5 y. M/ Z; |5 L1 l9 P
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版