步骤一:
打开
MDK
(以下将
MDK5
简称为
MDK
)软件。然后点击
Project
→
New uVision Project
如图
3.2.1
所示
步骤二:
在桌面新建一个
TEST
的文件夹,然后在
TEST
文件夹里面新建
USER
文件夹,将工程名字设为
test
,保存在这个
USER
文件夹里面,之后,弹出选择器件的对话框,如图
3.2.3
所示
步骤三
因为
ALIENTEK MiniSTM32
开发板所使用的
STM32
型号为
STM32F103RCT6
,所以在这里我们选择
STMicroelectronics
→
STM32F1 Series
→
STM32F103
→
STM32F103RCT6
(如果使用的是
其他系列的芯片,选择相应的型号就可以了
特别注意:
一定要安装对应的器件
pack
才会显
示这些内容,如果没得选择,请关闭
MDK
,然后安装 光盘:
6
,软件资料
\1
,软件
\MDK5\
Keil.STM32F1xx_DFP.2.2.0.pack
这个安装包)。
步骤四
点击
OK
,
MDK
会弹出
Manage Run-Time Environment
对话框,如图
3.2.4
所示:
这是
MDK5
新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建
开发环境,不过这里我们不做介绍。所以在图
3.2.4
所示界面,我们直接点击
Cancel
,即可,
得到如图
3.2.5
所示界面:
步骤五
步骤六
到这里,我们还只是建了一个框架,还需要添加启动代码,以及
.c
文件等。这里我们先介
绍一下启动代码:启动代码是一段和硬件相关的汇编代码。是必不可少的!这代码主要作用如
下:
1
、堆栈(
SP
)的初始化;
2
、初始化程序计数器(
PC
);
3
、设置向量表异常事件的入口地
址;
4
、调用
main
函数。感兴趣的朋友可以自己去分析这部分代码。
ST
公司提供了
3
个启动文件给我们,分别用于不同容量的
STM32
芯片,这三个文件是:
startup_stm32f10x_ld.s
startup_stm32f10x_md.s
startup_stm32f10x_hd.s
其中,
ld.s
适用于小容量 产品;
md.s
适用于中等容量产品;
hd
适用于大容量产品;
这里的容量是指
FLASH
的大小
.
判断方法如下:
小容量:
FLASH
≤
32K
中容量:
64K
≤
FLASH
≤
128K
大容量:
256K
≤
FLASH
我们开发板使用的是
STM32F103RCT6
,
FLASH
容量为
256KB
,属于大容量产品,所以我们选择
startup_stm32f10x_hd.s
作为我们的启动文件。
这三个启动文件在开发板光盘
→
4
,程序源码
→
STM32
启动文件 文件夹里面(也可以从我
们的论坛 下载到, 下载地 址:
http://www.openedv.com/posts/list/313.htm
), 这里我 们把
startup_stm32f10x_hd.s
拷贝到刚刚新建的
USER
文件夹里面。
不过这个启动文件,我们做了一点点修改,具体是
Reset_Handler
函数,该函数修改后代码
如下:
这段代码,我们屏蔽了复位中断服务函数(
Reset_Handler
)对函数
SystemInit
的调用,如果是库函数版本,可以取消这个函数的注释,并在外部实现
SystemInit
函数。
步骤七:
在图
3.2.5
中,我们找到
Target1
→
Source Group1
→
双击
→
设置打开文件类型为
Asm Sourcefile
→
选择
startup_stm32f10x_hd.s
→
点击
Add
,如图
3.2.6
所示:
步骤八:
这里看到的
2
个文件夹:
Listings
和
Objects
,是
MDK5
自行创建的,用于保存编译过程中生成的一些文件,后续会介绍。添加完后,我们得到如图
3.2.7
所示的界面:
步骤九:
至此,我们就可以开始编写自己的代码了。不过,在此之前,我们先来做两件事:第一件,
先编译一下,看看什么情况
?
编译后如图
3.2.8
所示:
步骤十:
图
3.2.8
中
1
处为编译当前目标按钮;
2
处为全部重新编译按钮(工程大的时候,编译耗时
较久,建议少用)。出错和警告信息在下面的
Bulilt Output
对话框中提示出来了。因为工程中没
有
main
函数,所以报错了。
接下来,第二件事,让我们看看存放工程的文件夹有什么变化?打开我们刚刚建立的
TEST\USER
文件夹,可以看到里面多了
3
个文件夹:
DebugConfig
、
Listings
和
Objects
,如图
3.2.9
所示:
步骤十一:
在
USER
文件夹下,
startup_stm32f10x_hd.s
(启动文件)和
test.uvprojx
(
MDK5
工程文件)
是我们必须用到的
2
个文件,然后
DebugConfig
、
Listings
和
Objects
文件夹是
MDK5
自动生
成的,
DebugConfig
文件夹用于存储一些调试配置文件,
Listings
和
Objects
文件夹用来存储
MDK
编译过程的一些中间文件。
MDK5.21A
已经默认将这些文件生成在了
Listings
和
Objects
文件夹里面,但是
MDK5.11A
及之前版本是不会自动生成这两个文件夹的,所有中间文件都是生成在工程同面目录下,也就
是
USER
文件夹下,这样会显得比较混乱。
这里,我们不用
MDK5
自己生成的
Listings
和
Objects
文件夹来存放中间文件,而是在
TEST
目录下新建一个新的
OBJ
文件夹来存放这些中间文件。这样,
USER
文件夹专门用来存放启动
文件(
startup_stm32f10x_hd.s
)、工程文件(
test.uvprojx
)等不可缺少的文件,而
OBJ
则用来存
放这些编译过程中产生的中间文件
(
包括
.hex
文件也将存放在这个文件夹里面
)
。然后把
Listings
和
Objects
文件夹里面的东西全部移到
OBJ
文件夹下(当然要先关闭
MDK
软件),并删除这两
个文件夹(
DebugConfig
文件夹不用删除)。整理后效果如图
3.2.10
所示:
步骤十二:
由于上面我们还没有任何代码在工程里面,这里我们把系统代码
COPY
过来(即
SYSTEM
文件夹,该文件夹由
ALIENTEK
提供,可以在光盘任何一个实例的工程目录下找到,不过不要
拷贝错了!
不要把库函数代码的系统文件夹拷贝到寄存器代码里面用,反之亦然!
这些代码在
任何
STM32F10x
的芯片上都是通用的,可以用于快速构建自己的工程,后面会有详细介绍)。
完了之后,
TEST
文件夹下的文件如图
3.2.11
所示:
步骤十三:
在上面对话框的中间栏,点新建(用红圈标出)按钮(也可以通过双击下面的空白处实现),
新建
USER
和
SYSTEM
两个组。然后点击
Add Files
按钮,把
SYSTEM
文件夹三个子文件夹里
面的:
sys.c
、
usart.c
、
delay.c
加入到
SYSTEM
组中。注意:此时
USER
组下还是没有任何文件,
得到如图
3.2.13
所示的界面:
步骤十四:
点击
OK
,退出该界面返回
IDE
。这时,我们在
Target1
树下发现多了
2
个组名,就是我们
刚刚新建的
2
个组。如图
3.2.14
所示:
步骤十五:
接着,我们新建一个
test.c
文件,并保存在
USER
文件夹下。然后双击
USER
组,会弹出
加载文件的对话框,此时我们在
USER
目录下选择
test.c
文件,加入到
USER
组下。得到如图
3.2.15
所示的界面
至此,我们就可以开始编写我们自己的代码了。