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

怎么新建我的第一个工程呢?

[复制链接]
gaosmile 发布时间:2020-3-6 19:44
怎么新建我的第一个工程呢?
(1)建立工作目录和子目录,复制库文件;
(2)使用Keil MDK,建立和配置工程文件;
(3)建立main.c文件,编写代码。
7 |: w" q9 F9 \8 @; _

3 C$ L7 T' q( O: z  m
下面详细解释每个步骤中都做了哪些工作:
6 @% ?# U# r: Q" s; x
(1)建立工作目录和子目录,复制库文件

- C: V0 o2 e3 C5 M" H0 e* E0 n
首先我们在自己电脑中选择一个合适的位置,用于存放以后自己开发的STM32工程文件。在这里我选择存放在G:\STM32Project路径下。选择好项目文件夹需要存放的路径之后,在其下我们新建一个子目录MyFirstProject作为工我们第一个工程的总文件夹,也就是说所有的工程文件都将存放在这个文件夹下。
: `( p" C1 D+ F- N% y2 x
在G:\STM32Project\MyFirstProject这个路径下,也就是MyFirstProject工程文件夹内,我们再新建如下4个文件夹,用于存放不同类别的文件。这4个文件夹分别命名如下:Application、User、STM32Lib、Project、Doc。目录结构图如下所示:
1 [7 i/ w$ d% z
微信图片_20200306193657.png

3 @+ f5 c, Z/ z" w6 G
接下来,我们需要向上述这些空文件夹中复制文件。复制内核文件和驱动支持文件、启动文件。
* Q. N- {% l; B+ V6 ~7 V
将固件库中Libraries\CMSIS\CM3\CoreSupport目录下的两个文件core_cm3.c和core_cm3.h,复制到刚刚创建的MyFirstProject
\STM32Lib\m3子目录中。
1 K) Y5 _, M. @* u- o+ F. r0 T
将固件库中Libraries\CMSIS\CM3
\DeviceSupport\ST\STM32F10x目录下的
stm32f10x.h、system_stm32f10x.c、
system_stm32f10x.h这三个文件也复制到
MyFirstProject\STM32Lib\m3子目录中。

( J: b7 J/ P" L( @
将固件库中Libraries\CMSIS\CM3
\DeviceSupport\ST\STM32F10x\startup\arm
目录下的相应的启动代码复制到
MyFirstProject\Application这个目录下。
启动代码要根据自己所采用的芯片型号来决定。
这里楼主所使用的芯片是STM32F103ZET6,
是属于高密度的芯片,因此应该复制
startup_stm32f10x_hd.s这个启动文件。
当程序开始执行,启动文件startup_stm32f10x_hd.s
是程序“从零开始”的地方。
5 A1 l- s! J( u) k
接下来复制设备驱动程序。将固件库中Libraries\STM32F10x_StdPeriph_Driver\inc
目录下的全部文件复制到上图中的
MyFirstProject\STM32Lib\inc目录下。

  U4 ?; X, M$ d8 u/ C2 x$ z
再将固件库中Libraries
\STM32F10x_StdPeriph_Driver\src
目录下的全部文件复制到上图中的
MyFirstProject\STM32Lib\src目录下。
0 L" }+ v6 z2 S- U+ e1 \
复制外设中断函数文件和固件库配置文件,
复制固件库中的
Project\STM32F10x_StdPeriph_Template
目录下stm32f10x_conf.h、stm32f10x_it.c、
stm32f10x_it.h这三个文件复制到
MyFirstProject\Application目录中去。
7 b% X# s) u5 M: h" p% q
经过以上3步之后,固件库的搬家工作我们就算是做完了。接下来该打开Keil MDK进行工程文件的建立和配置了。
& q/ A1 X* \' ^% g

  \) l; Z! L- i! K3 V% e0 _2 v
(2)使用Keil MDK,建立和配置工程文件
, p+ ^9 w' [3 o$ e
按照菜单项打开Project -> New uVision Project,新建一个uVision工程。得到下图中的界面。
2 n! P1 s/ c+ L4 Z, K% S) k
微信图片_20200306193706.png
! g- Y/ v- N! d# W+ H+ m( J/ w
在接下来弹出的对话框中,选择工程存放路径,MyFirstProject\Project,并给自己的工程命名。具体操作如下图所示。

; d. T- n8 j+ C% F; l4 Z" D
微信图片_20200306193713.jpg

# E6 w1 w& O# I1 ?
点击上图中的保存(S)按钮,弹出下图所示的芯片选择窗口,由于楼主所使用的是STM32F103ZET6,因此找到ST公司,在其下的下拉菜单列表中选择STM32F103ZET类型的设备(芯片)。
/ X6 k, m% ^1 M4 N9 t3 \: z, _
微信图片_20200306193719.jpg

/ L( k7 _4 V. F' n- U; K9 r
选择好对应的芯片后,点击“OK”按钮。弹出以下界面。这个界面是MDK5以上的版本特有的,Manage Run -Time Environment的运行环境界面。通过这个界面我们可以快速搭建一个库函数的工程,快速配置运行环境。

* n2 D& M& K) r4 s
对这个方法如果大家觉得有必要,以后我会在“新建一个STM32固件库工程”的增帖中详细说明。在本节当中,我们暂时先选择略过。因此,对于出现的这个界面,我们点击“OK”即可。

2 P3 q% H' v4 s+ [9 z
微信图片_20200306193726.jpg
0 x$ H$ B; I! ^: `* `2 Y3 A0 d
新建工程后的界面如下图所示。

; p7 H0 K* N- o* E
微信图片_20200306193732.jpg
( D5 b3 g" h! p" O% \% V9 z! A% N, Z
接下来我们要对工程组进行管理,现在可以点击下图所示的“组件管理”快捷按钮进入组件管理界面。

8 W* G7 Y3 s# u9 E+ c% \( A
微信图片_20200306193737.jpg

7 A! H0 p9 C" x3 L
组件管理界面如下图所示。双击工程目标(Target1)和组(Source Group 1)就可以对其进行修改,选择一个组后,按“Add Files”即可添加文件。
: Z, p* T6 l0 h5 k+ t; B$ p
微信图片_20200306193745.png
$ ^$ |8 M* W% s+ L7 A
这里对工程目标(Target1)和组(Source Group 1)进行修改,修改完成后,得到下图所示工程目录结构。
' b) o% K6 U' h" I+ z3 q
微信图片_20200306193753.png
$ t% L2 C+ }, J, Z% ^* h$ Z  ^
点击“OK”按钮,能够看到Keil MDK的工程窗口中出现了4个分组,如下图所示。接下来就是要添加相对应的文件到对应的分组中了。

, j8 K7 ~) _9 C& t
微信图片_20200306193800.jpg

% D! \5 s4 u2 Y
双击一个分组,就可以进入到文件选择界面,选择相应的文件添加到改分组中。如下图所示。

9 N8 L6 B) `. |) R0 b* T# ^( I
微信图片_20200306193805.jpg

0 Z- J& S5 Q9 `& s) O' S( y
所有的文件添加完毕之后,得到如下图所示结果。注:如果不确定这个工程需要用到哪些的外围设备进行开发。或者想用这个工程做通用的开发模板的话,那么在stm32lib中,可以将stm32\inc和stm32\src目录下的所有头文件和源文件复制到工程中的stm32lib分组中。

, V6 U1 C- b! H( s* w. z) S
在本节的案例中,由于我们即将使用这个工程进行LED灯相关程序的开发,而简单的LED灯程序所涉及到的函数只使用到了stm32f10x_gpio.c和stm32f10x_rcc.c,因此我们只需将以上两个文件拷贝到stm32lib分组中即可。如下图所示。
  |' i% z' a4 W- Q' }3 d
微信图片_20200306193811.jpg
% l! [1 i# y0 J% w5 s9 U0 ^
接下来,对工程进行相应的配置工作。点击配置按钮(就是像小魔术师手棒形状的那个按钮)会弹出如下图所示的配置窗口。

0 F; Q" Z) m, B! s( c
微信图片_20200306193817.jpg
* k/ T' \$ R1 s# s( X/ {8 B
在“Output”选项卡中,选中“Create HEX File”表示编译时要生成后缀为.hex的目标文件。HEX文件是能够下载到STM32芯片里的的编译后的二进制文件。然后再按按钮“Select Folder for Objects”,选择生成的HEX文件的存放路径。

. l3 U8 U' x: t- `
如上图所示,在这里我们选择存放在Objects文件夹下。之所以选择存放的路径,是因为编译时生成的文件不止HEX这一个文件,还包含有很多中间件,如果不分离出来,那么生成的.hex文件会混在其他生成的文件中,难以找寻。

4 m8 e! n+ ]3 E) Y8 y! t
选择好路径之后,点击OK按钮即可完成。

' [& U- s8 c+ x4 B% O, M
到这一步,我们可以发现,我们的工程里的文件数量已经很多了,那么我们在写程序的时候,怎么才能互相找到这些源文件(.c)所对应的的头文件(.h)呢?只需要在配置窗口进行简单的配置即可。操作步骤如下:
5 j# G& `5 L7 ]; n* B# |- I
(1)重新回到配置窗口(还是点击那个小魔术师手棒图标)

" i: H4 h3 W  d3 c1 A7 G" v
(2)选择C/C++选项卡,按Include Path右边的按钮,即可设置查找路径。如下图所示。
* c/ [1 @1 ~: w' g9 `8 N1 d
微信图片_20200306193823.jpg

" G$ W5 r" E) v2 R
配置过路径之后,还需要在Define后面的输入框中输入两个宏定义:
“USE_STDPERIPH_DRIVER,STM32F10X_HD”,
- H; \/ h9 V* Y
其中“USE_STDPERIPH_DRIVER”表示的是使用库函数外设驱动,而“STM32F10X_HD”表示使用的是高密度的STM32。

3 ]( Y+ x5 K1 J/ E( y: T
至此,点击OK按钮,我们的开发模板就完全设置完毕了。虽然只是设置了分组和配置,还没有开始编写任何代码,但是有了这个模板之后,再进行相关的开发就很容易了。
" [8 j% h% `/ s% g% d
另外,新建一个工程,对于初学者来说,是很关键的。任何一个步骤上的不完整,都很可能导致自己的工程编译出现很多不可预知的错误。因此,这一步一定要多加练习。

; S9 d' c' O: u/ E+ \
(3)建立main.c文件,编写代码
" _* u$ ~; n0 O+ X' c
至此步骤,你可以开始着手编写自己的代码了。
+ C( d# T. \7 u6 i% [; H, n! B
收藏 评论1 发布时间:2020-3-6 19:44

举报

1个回答
gaojianjian1114 回答时间:2020-3-9 20:09:18
大佬,stm32G4系列的库文件可否有,有的话能不能发我一份?邮箱 1012867398@qq.com  谢谢大佬" C  J# d. J( i9 R$ H& X

所属标签

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