图3.2.1 MDK5组成从上图可以看出,MDK Core又分成四个部分:uVision IDE with Editor(编辑器),ARM C/C++ Compiler(编译器),Pack Installer(包安装器),uVision Debugger with Trace(调试跟踪器)。
uVision IDE从MDK4.7版本开始就加入了代码提示功能和语法动态检测等实用功能,相对于以往的IDE改进很大。
Software Packs(包安装器)又分为:Device(芯片支持),CMSIS(ARM Cortex微控制器软件接口标准)和Mdidleware(中间库)三个小部分,通过包安装器,我们可以安装最新的组件,从而支持新的器件、提供新的设备驱动库以及最新例程等,加速产品开发进度。
同以往的MDK不同,以往的MDK把所有组件到包含到了一个安装包里面,显得十分“笨重”,MDK5则不一样,MDK Core是一个独立的安装包,它并不包含器件支持和设备驱动等组件,但是一般都会包括CMSIS组件,大小350M左右,相对于MDK4.70A的500多M,瘦身不少,MDK5安装包可以在:/demo/eval/arm.htm下载到。
而器件支持、设备驱动、CMSIS等组件,则可以点击MDK5的Build Toolbar的最后一个图标调出Pack Installer,来进行各种组件的安装。
也可以在/dd2/pack这个地址下载,然后进行安装。
在MDK5安装完成后,要让MDK5支持STM32F103的开发,我们还需要安装STM32F1的器件支持包:Keil.STM32F1xx_DFP.1.0.5.pack(STM32F1的器件包)。
这个包以及MDK5.14安装软件,我们都已经在开发板光盘提供了,大家自行安装即可。
3.3新建基于固件库的MDK5工程模板在前面的章节我们介绍了STM32官方库包的一些知识,这些我们将着重讲解建立基于固件库的工程模板的详细步骤。
在此之前,首先我们要准备如下资料:a)V3.5固件库包:STM32F10x_StdPeriph_Lib_V3.5.0这是ST官网下载的固件库完整版,我们光盘目录:软件资料\STM32固件库使用参考资料\STM32F10x_StdPeriph_Lib_V3.5.0我们官方论坛下载地址:/posts/list/6054.htmb)MDK5 开发环境(我们的板子的开发环境目前是使用这个版本)。
这在我们光盘的软件目录下面有安装包:软件资料\软件\MDK5在建立工程模板之前,大家首先要安装MDK5开发环境。
对于MDK5的详细安装,请参考光盘的安装文档:“\1,ALIENTEK精英STM32开发板入门资料\MDK5.14安装手册.pdf”。
这里顺便提醒大家,本小节新建的工程模板在我们光盘目录下面有存放,路径为:“\4,程序源码\2,标准例程-V3.5库函数版本\实验0-1 Template工程模板-新建工程章节使用”。
大家在新建工程过程中有任何疑问,都可以跟这个模板进行比较,找出问题所在。
接下来我们将手把手的教您新建一个基于V3.5版本固件库的STM32F1工程模板。
步骤如下:1)在建立工程之前,我们建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工程都可以放在这个文件夹下面,这里我们建立一个文件夹为Template。
2)点击MDK的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹Template之下,在这个目录下面建立子文件夹USER(我们的代码工程文件都是放在USER 目录,很多人喜欢新建“Project”目录放在下面,这也是可以的,这个就看个人喜好了),然后定位到USER目录下面,我们的工程文件就都保存到USER文件夹下面。
工程命名为Template,点击保存。
图3.3.1新建工程图3.3.2定义工程名称接下来会出现一个选择CPU的界面,就是选择我们的芯片型号。
如图 3.3.3所示,因为ALIENTEK 精英STM32F103所使用的STM32型号为STM32F103ZET6,所以在这里我们选择STMicroelectronics→STM32F1 Series→STM32F103→STM32F103ZET6(如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意:一定要安装对应的器件pack才会显示这些内容哦!!,如果没得选择,请关闭MDK,然后安装光盘:6,软件资料\1,软件\MDK5\ Keil.STM32F1xx_DFP.1.0.5.pack这个安装包)。
图3.3.3选择芯片型号3)点击OK,MDK会弹出Manage Run-Time Environment对话框,如图3.3.4所示:图3.3.4 Manage Run-Time Environment界面这是MDK5新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不做介绍。
所以在图3.3.4所示界面,我们直接点击Cancel,即可,得到如图3.3.5所示界面:图3.3.5 工程初步建立到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c文件等。
4)现在我们看看USER目录下面包含2个文件夹和2个文件,如下图3.3.6所示:图3.3.6工程USER目录文件这里我们说明一下,Template.uvprojx是工程文件,非常关键,不能轻易删除。
Listings和Objects 文件夹是MDK自动生成的文件夹,用于存放编译过程产生的中间文件。
这里,我们把两个文件夹删除,我们会在下一步骤中新建一个OBJ文件夹,用来存放编译中间文件。
当然,我们不删除这两个文件夹也是没有关系的,只是我们不用它而已。
5)接下来,我们在Template工程目录下面,新建3个文件夹CORE, OBJ以及STM32F10x_FWLib。
CORE用来存放核心文件和启动文件,OBJ是用来存放编译过程文件以及hex文件,STM32F10x_FWLib文件夹顾名思义用来存放ST官方提供的库函数源码文件。
已有的USER目录除了用来放工程文件外,还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c 等等。
图3.3.3.5工程目录预览6)下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。
打开官方固件库包,定位到我们之前准备好的固件库包的目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下面,将目录下面的src,inc文件夹copy到我们刚才建立的STM32F10x_FWLib文件夹下面。
src存放的是固件库的.c文件,inc存放的是对应的.h文件,您不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个.c文件和一个.h头文件。
图3.3.3.6官方库源码文件夹7)下面我们要将固件库包里面相关的启动文件复制到我们的工程目录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\a rm下面,将里面startup_stm32f10x_hd.s文件复制到CORE下面。
这里我们我之前已经解释了不同容量的芯片使用不同的启动文件,我们的芯片STM32F103ZET6是大容量芯片,所以选择这个启动文件。
现在看看我们的CORE文件夹下面的文件:图3.3.3.7启动文件夹8)定位到目录: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目录下面。
图3.3.3.8 USER目录文件浏览9)前面8个步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将这些文件加入我们的工程中去。
右键点击Target1,选择Manage Components图3.3.3.9点击Management Components10)Project Targets一栏,我们将Target名字修改为Template,然后在Groups一栏删掉一个SourceGroup1,建立三个Groups:USER,CORE,FWLIB。
然后点击OK,可以看到我们的Target 名字以及Groups情况。
图3.3.3.10图3.3.3.1111)下面我们往Group里面添加我们需要的文件。
我们按照步骤10的方法,右键点击点击Tempate,选择选择Manage Components.然后选择需要添加文件的Group,这里第一步我们选择FWLIB,然后点击右边的Add Files,定位到我们刚才建立的目录STM32F10x_FWLib/src下面,将里面所有的文件选中(Ctrl+A),然后点击Add,然后Close.可以看到Files列表下面包含我们添加的文件。
这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。
例如我只用GPIO,我可以只用添加stm32f10x_gpio.c而其他的可以不用添加。
这里我们全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,用户可以自行选择。
图3.3.3.1212)用同样的方法,将Groups定位到CORE和USER下面,添加需要的文件。
这里我们的CORE下面需要添加的文件为core_cm3.c,startup_stm32f10x_hd.s (注意,默认添加的时候文件类型为.c,也就是添加startup_stm32f10x_hd.s启动文件的时候,你需要选择文件类型为All files才能看得到这个文件),USER目录下面需要添加的文件为main.c,stm32f10x_it.c,system_stm32f10x.c.这样我们需要添加的文件已经添加到我们的工程中了,最后点击OK,回到工程主界面。