鉴于我学习的资料内容比较多,刚开始使用keil来构建工程还是有点麻烦的,每次忘了点什么步骤就要从众多数据中找到构建项目的方法是十分麻烦的,所以我就干脆在此写一个教程吧,在加深自己印象的同时,说不定还能帮助到某些同学呢(天真无邪的笑容,呵呵)。
在此声明一下我使用的开发板是开元电子的STM32F103RC
首先我们要在某个目录下建立一个文件夹,然后把后面的工程文件都放到这个文件夹中,方便以后寻找。为了演示方便(其实是我比较懒啊),我就建在桌面上了(你们千万不要学我啊,建在桌面上相当于放在C盘啊),然后再在我们的Template目录下构建一系列子文件夹(USER,CORE,HARDWARE,SYSTEM,STM32F10x_FWLib,OBJ),如图:
CORE用来存放核心文件和启动文件;
OBJ用来存放编译过程文件以及hex文件;
STM32F10x_FWLib文件用来存放ST官方提供的库函数源码文件;
USER除了用来放工程文件外,还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c等等
SYSTEM里存放的是接下来我们每个实验都要使用的共用代码,该代码由ALIENTEK编写,在此不做详细介绍。
HAREWARE用来存放提供外部硬件相关的驱动函数,每个.c源文件对应一个.h头文件。
现在地基已经打好了,我们要开始造房子了,打开KEIL,选择Project–>New Uvision Project,然后将目录定位到刚才我们打的地基(USER目录)下吧,房子(工程)的名字就叫Template.
点击保存之后,你就会看到如下界面:
这是在告诉我们要选房子的型号了,这个时候我们就要应地制宜了,经过我们的判断,我们决定选择STM32F103RC这个型号的房子,因为在这个地方这种型号的房子最稳定。
再单击OK,出现如下界面:
这是KEIL5新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不做介绍。所以在所示界面,我们直接点击Cancel,即可.得到下图所示界面:
现在我们看看USER目录下面包含2个文件夹和2个文件,如下图:
这里我们说明一下,Template.uvprojx是工程文件,非常关键,不能轻易删除。Listings和Objects文件夹是KEIL自动生成的文件夹,用于存放编译过程产生的中间文件。这里,为了跟之前版本工程兼容,我们把两个文件夹删除,我们将其放在之前我们新建的Template目录下的OBJ文件夹,用来存放编译中间文件。当然,我们不删除这两个文件夹也是没有关系的,只是我们不用它而已。
到了这里,我们也只是打了地基,选了房子型号,设计了图纸,要建房子,我们还要什么呢,没错,就是砖(启动代码以及.c文件)!现在我们开始搬砖:
下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。
打开官方固件库包,定位到我们之前准备好的固件库包的目录
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下面,
将目录下面的src,inc文件夹copy到我们刚才建立的STM32F10x_FWLib文件夹下面。
src存放的是固件库的.c文件,inc存放的是对应的.h文件,不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个.c文件和一个.h头文件。
下面我们要将固件库包里面相关的启动文件复制到我们的工程目录CORE之下。
打开官方固件库包,定位到目录
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下面,将文件core_cm3.c和文件core_cm3.h复制到CORE下面去。然后定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下面,将里面startup_stm32f10x_hd.s文件复制到CORE下面。这里我们我之前已经解释了不同容量的芯片使用不同的启动文件,我的芯片STM32F103RCT6是大容量芯片,所以选择这个启动文件
定位到目录:
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下面
将里面的三个文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的USER目录之下。然后将
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下面的4个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h复制到USER目录下面。
在我们协会提供的资料中,打开任何一个固件库的实验,可以看到下面有一个SYSTEM文件夹,进入,里面有三个子文件夹delay,sys,usart,将这三个子文件夹copy到我们新建的SYSTEM文件夹之下
呼~总算搬完了,终于可以建了,点开KEIL, 右键点击Target1,选择ManageProject Items
更改我们的Target名称为Template,添加Groups,如下:
然后我们往Groups里面添加文件,点击Add Files添加:
USER目录下面需要添加的文件为main.c,stm32f10x_it.c,system_stm32f10x.c.
CORE目录下需要添加的文件为core_cm3.c,startup_stm32f10x_hd.s(注意,默认添加的时候文件类型为.c,也就是添加startup_stm32f10x_hd.s启动文件的时候,你需要选择文件类型为All files才能看得到这个文件);
FWLIB目录下需要添加的文件为我们建立的文件夹STM32F10x_FWLib/src下面所有的.c文件(全选快捷键为Ctrl+A).这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。例如我只用GPIO,我可以只用添加stm32f10x_gpio.c而其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,你们可以自行选择。
SYSTEM目录下需要添加的文件为SYSTEM文件夹的各个子文件夹下的.c文件。
HARDWARE内的文件需要根据你的程序决定,可以之后添加。
接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。
方法是点击魔术棒,然后选择“Output”选项下面的“Select folder forobjects…”,然后选择目录为我们上面新建的OBJ目录。这里大家注意,如果我们不设置Output路径,那么默认的编译中间文件存放目录就是KEIL自动生成的Objects目录和Listings目录。
还要勾上下面的三个选项。其中Create HEX file是编译生成hex文件,Browser Information是可以查看变量和函数定义。
房子快建好了,我们该做宣传了吧,这个时候就是要把我们的新房的地址告诉KEIL:
下面我们要告诉KEIL,在哪些路径之下搜索需要的头文件,也就是头文件目录。这里大家要注意,对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进来。回到工程主菜单,点击魔术棒,出来一个菜单,然后点击c/c++选项.然后点击IncludePaths右边的按钮。弹出一个添加path的对话框,然后我们将图中几个目录添加进去(HARDWARE根据你的程序,之后添加)。记住,keil只会在一级目录查找,所以如果你的目录下面还有子目录,记得path一定要定位到最后一级子目录。然后点击OK.
因为3.5版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。按照上面的步骤,点击魔术棒,定位到c/c++界面,然后填写
“STM32F10X_HD,USE_STDPERIPH_DRIVER”到Define输入框里面(请注意,两个标识符中间是逗号不是句号,如果你不能确定你输入的是正确的,可以直接打开任何一个库函数实例,然后复制过来这串文字即可)。这里解释一下,如果你用的是中容量那么STM32F10X_HD修改为STM32F10X_MD,小容量修改为STM32F10X_LD.然后点击OK。
到这里,我们的房子的外部构架(工程模板)是彻底OK了。
至于之后的装修就看你们的喜好的,我这里就不举例说明的,我们的实验资料里可以学到之后知识。