芯嵌stm32入门教程7:创建第一个MDK工程模板

来源:互联网 发布:直通车数据透视在哪里 编辑:程序博客网 时间:2024/05/16 00:34

第一章 为什么会有固件库

     部分网友反馈信息:每次都是使用芯嵌stm32的一个简单例程,删掉里面不要的东西,然后添加自己的模块(程序)。通俗点讲,就是想自己独立完成一个项目程序,最开始总是要依赖别人的模板,在其基础上写自己的代码。因此,我们临时决定增加了本教程,作为大家从零开始创建完全属于自己的代码。

    对STM32来说,要从零开始写代码,与51单片机已经完全不同。因为绝大多数的STM32项目编码,都会使用ST官方提供固件库。这也是ST官方让广大工程师缩短研发周期的初衷—— ST官方帮助工程师写好函数库模板,并提供详细的接口函数的说明。这样,项目开发时,只要调用这些函数即可,比如,让一个GPIOC口的第三个引脚置高电平的函数:

GPIO_SetBits(GPIOC,GPIO_Pin_3);

    具体这个函数怎么实现,完全不要我们写。只需要会调用即可,这样stm32开发变的非常简单。但是,这就要求我们平时要准备一个属于自己的模板。该模板中,有完整的固件库代码。现在我们就一起学习如何创建这样的固件库代码。

第二章  关于固件库的说明

    目前,ST官网提供的固件库版本是V3.5版,大家可以在光盘或者芯嵌stm32官网www.51stm32.com里下载到,或者直接点击:

http://www.51stm32.com/forum.php?mod=viewthread&tid=27&extra=page%3D1

       解压缩后,如下所示:


_htmresc打开后会发现,该文件夹里是ST的 logo,可以删掉。

Libraries:这个文件夹就是所谓的固件函数库了。双击打开后,里面包含STM32 的系统文件和大量C语言底层代码以及对应的头文件。

Project:该文件夹包含大量外设的例程,和各个软件版本的评估版工程模板。当然,也包括MDK的模板。注意,MDK对应的是 MDK-ARM 文件下的工程模板。你也可以利用这个工程模板来修改,得到你自己的工程模块,但这里不建议这么做。笔者认为,既然要创建完全属于自己的模板,那就彻底一些吧!

Utilities:该文件夹是ST官方的评估板对应的相关文件。不过,大家写代码时所用的板子,肯定和ST的评估板不一样(除非你花大几千元买ST的板子研发),因此,可以忽略(代码有参考价值,先收藏,只是这里忽略)。

      还有一个大问号的图标,是stm32f10x_stdperiph_lib_um.chm,这是对固件库的一个帮助文档,英文的,看明白就看。平时参考还是不错的。

      这里顺带强调一下,有些文档会不让我们修改,大家需要右键单击该文档,把“只读”特性去掉即可。

第三章  创建自己的工程

      请大家先新建一个文件夹,以后所有的工程文件都放在这个目录下。这里我们创建XQ_STM32_Pro文件夹(后面所讲“目录”,就是“文件夹”,一个意思)。

      现在开始创建工程,注意:一会儿创建的所有的文件夹(包括路径),和MDK界面左边的树形结构的文件夹目录完全没有关系。MDK里的树形结构的目录,是为了我们查看方便(编译会按照从上到下编译每个文档),并不是真的创建了那些文件夹目录。真正的文件夹目录,是我们下面要创建的。

我们分步骤讲:

步骤一:在XQ_STM32_Pro目录中创建版本控制文件夹V10,表示第一个版本的代码。并创建txt文档,命名为readme.txt,对该工程代码做一个说明。当然,如果你确定不可能对代码进行修改了,就不会出现第二版、第三版的代码,那么本步骤Pass。

步骤二:现在创建真正的工程文件夹。在V10下创建如下四个文件夹:Core,Obj,STM32_FWLib,User。

步骤三:现在复制STM32启动文件到Core目录下。

      打开固件库里的\Libraries\CMSIS\CM3\CoreSupport,将文件 core_cm3.c、core_cm3.h复制到 Core目录中。

      返回到CM3目录,查阅\DeviceSupport\ST\STM32F10x\startup\arm目录,这里面有很多启动文件,后缀有hd.s、md.s、ld.s。分别表示大容量、中容量、低容量对应的STM32芯片的启动文件。由于芯嵌stm32开发板采用的是STM32F103VET6,属于大容量CPU,因此,请复制startup_stm32f10x_hd.s文件到Core目录下。

步骤四:复制库文件到STM32_FWLib目录。

      把固件库中的Libraries\STM32F10x_StdPeriph_Driver下的inc、src文件夹copy到刚创建的STM32_FWLib目录下。

步骤五:复制用户User文件。

      把\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录中的这三个文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的User目录下。

把\Project\STM32F10x_StdPeriph_Template目录下的这几个文件:main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 复制到User 目录下。

      至此,需要复制的文件都完成了。下面开始创建工程文件。注意,Obj目录怎么就没有复制任何文件呢?它是空的!没错!因为这个目录是用于存放编译后产生的.o,.hex等文件。

步骤六:双击keil(MDK)图标。打开一个空的MDK界面(如果不是空的,也不用管它)。请看主菜单工具栏,点击Project,下拉New u Vision Project…,在跳出的新的窗口中,找到刚才创建目录V10下,把新建的Project工程保存在V10下,并命名为XQ_STM32_Example.uv2(名字可以自取)。

     此时,就会跳出窗口,这是让我们选择一个CPU型号。我们找到STMicroelectronics,这是ST公司的处理器所在目录。点开树形结构,找到STM32F103VE,点击OK。若有提示“copy STM32 startup code to ...”,点击否。这样,我们就创建了一个空的工程,里面只有这样的界面。

      

      现在,我们把这个Target 1名字也改成:XQ_STM32_Example。修改方法:单击Target 1名字,变成选中状态,然后再点击一下,就可以修改了。注意,可能用复制粘贴无效,要一个一个字符敲进去。

      步骤七:现在我们把刚才创建和复制的那么多文件,都添加进来吧!怎么添加?请看:

对着字符XQ_STM32_Example右键,选择Managecomponent。

这个界面有三个栏。第一个栏是工程名字,第二个栏,是这个工程下的代码,想归类成几个目录(一会要创建这些目录)。注意,这些目录是虚拟的,实际不存在。只是为了我们编码查阅方便。第三个栏显示每个选中的目录下都有啥文件。这里,我们只选c文件添加。对应的h文件会自动添加。

       在第二栏单击:上图里的红色方框的图标,这是增加一个组Group,即增加一个文件夹目录。我们把新增加的组命名为Core。同样的方法,命名STM32_FWLib,User这两个目录。如果要修改,双击即可。

       现在单击Source Group 1,把这个默认的目录删掉(刚才红色方框右边的那个叉号就是删除)。现在窗口变成如下:


      现在单击Core,如上图所示。在第三栏下面,点击Add Files。在跳出的窗口中,找到刚才我们创建的Core目录。添加所有的c文件。Core下只有一个c文件:core_cm3.c。按照此方法,分别添加STM32_FWLib,User这两个目录下所有的C文件。注意,STM32_FWLib下的C文件在src目录中。最后点击OK,返回到主界面。

      

现在,是否就可以编译调试程序了呢?还不行!因为我们只是把程序添加到工程中而已。我们还要对工程进行设置!

步骤八:MDK工程设置

(1)右键点击工程名字:XQ_STM32_Exmaple,选择Options for Target‘XQ_STM32_Exmaple’,打开如下窗口,开始一个一个选项卡设置过去。


(2)Target选项卡,默认即可。我们看Output选项卡,修改如下:

点击“Select folder for objects…,选择到我们刚才创建的Obj目录。这是为了让编译产生的所有文件,都放在Obj目录里。然后把Create HEX File打勾,创建下载到板子里用的hex文件。

(3)现在Pass掉Listing和User选项卡,我们看C/C++选项卡,修改如下:


上面的红色方框,是要配置一个全局的宏定义变量,因为3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的。如果你的板子用的不是大容量的CPU,请做相应修改。芯嵌stm32开发板使用大容量CPU,因此这里是STM32F10X_HD。

下面的红色方框,是整个工程里所有的文件,需要用到include头文件的位置(路径),那么就在这里告诉工程吧。刚才我们每个目录下都会有h头文件,比如Core等。注意,MDK只会在一级目录查找头文件,这里的STM32_FWLib目录下的头文件,是放在子目录inc下,因此要定位到最后一级子目录inc。

如果担心键盘敲错路径,可以单击红色方框右边的那个圆圈方框,像添加Group目录一样添加路径。

(4)Pass掉Asm和Linker选项卡,点击Debug选项卡,修改如下:

默认是软件仿真。点击右边红色方框,下拉菜单选择Cortex-M3 J-LINK。即选择硬件仿真中的jlink仿真。

(5)点击最后一个选项卡,修改如下:


先修改左边的“1”,下拉菜单,选择Cortex-M3 J-LINK,然后点击右边的Settings,跳出如下对话框,点击Add,增加Flash大小的选项窗口。


上图窗口中,滚动条拉到最底下。由于芯嵌stm32开发板上是大容量的CPU,因此选择图中的512K,点击ADD,再点击OK,退出。再点击OK,整个工程设置完毕。

步骤九:最后一步。把main.c文件修改一下即可。因为main.c文件,我们是复制ST官方评估板的,里面写的是评估板的主程序,如果就这么编译的话,估计错误警告超多。

我们采取如下方法:

(1)   保留#include "stm32f10x.h",其他全部删掉。

(2)   添加代码如下:

int main(void)

{

    while(1)

   {

   }

}

经过以上设置,整个工程创建到此就结束了。

最后一个想说明的是,如果刚感觉创建的工程中,MDK界面左边,树形结构中的User目录在最下方,不好看。

如何把User移到STM32_FWLib目录上面呢?可以这样:对准User右键,选择Manage component,打开的窗口中第二栏,点击User,然后点击第二栏右上方的向上箭头,就可以把Uer目录往上移了。点击确定退出即可。

    以上就是MDK工程的创建过程,期待大家拍砖。如需拍砖,请直接前往www.51stm32.com 猛拍,以促进芯嵌STM32进一步改善教程,谢谢!