您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 创建一个STM32工程_冰棱科技
冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第102页,共461页1.新建KeilMDK工程在开发板DVD光盘中,我们提供了3.0.0外设库:STM32F10x_StdPeriph_LibV3.0.0。在光盘的目录:“stm32外设固件库V3.0.0”。我们在C盘新建一个文件夹:test,做为新建工程的文件夹。然后在该文件夹下再建立两个文件夹:MDK、User。其中MDK用于存放工程文件,而User则用于存放我们自己要编辑或修改的代码文件。将外设库库中的\Libraries\STM32F10x_StdPeriph_Driver文件夹复制到“test”目录下。这个文件夹存放了外设库的源文件。将外设库库中的\Libraries\CMSIS\Core\CM3文件夹复制到“test”目录下。这个文件夹存放了CM3源文件和startup文件。在MDK目录下建立两个目录:“Obj”和“List”。“Obj”用于存放编译时产生的对象文件,“List”用于存放编译时产生的list文件和map文件。冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第103页,共461页然后,我们复制外设库的“\Project\Template”下的4个文件到“\test\User”目录:打开KeilMDK软件,选择“Project”下拉菜单中的“NewuVisionProject”,把新的工程保存在MDK目录下,工程名为:test:冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第104页,共461页选择开发板的CPU型号是:STM32F103ZE:冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第105页,共461页这时会提示我们是否添加默认的启动文件到工程文件,选择否,因为我们要用ST的外设库里面带的启动代码:然后,我们点击KeilMDK软件界面上的“品”字图标,如下图:我们建立了四个组:User、StdPeriph_Driver、CM3、StartUp。(1)“User”组中添加“\test\User”目录下刚才复制的两个C文件。(2)“StdPeriph_Driver”组中添加“\test\STM32F10x_StdPeriph_Driver\src”目录下的所有C文件(其实可以只添加用到的C文件)。(3)“CM3”组中添加“\test\CM3”下的两个C文件。(4)“StartUp”组中添加“test\CM3\startup\arm”目录下的“startup_stm32f10x_hd.s”文件(注意是“arm”目录下的S文件,两外两个目录中的S文件分别是为IAR和GCC准备的)。冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第106页,共461页建立好以后的4个组如下图:冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第107页,共461页我们点击KeilMDK界面上的魔术棒,进入设置界面:第一页是“Device”,我们已经选择了CPU型号:STM32F103ZE。第二页是“Target”,这时候ROM,和RAM的分配已经根据你选择的CPU设置好了。需要注意的是,一般我们都习惯选上”UseMicroLIB”,这是KEIL自带的一个简易的库,如果您用printf函数的时候,就会从串口1输出字符串。冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第108页,共461页第三页是“Output”,第三页的下方三个勾都要打上,分别是:调试信息、生成HEX文件、层次关系信息。特别需要注意的是,在打勾选择了“BrowseInformation”之后,对于已经编译成功的程序,要查找函数、变量、宏定义的原型等,只需要鼠标点击此函数、变量或宏定义,按下“F12”键,那么编辑界面就会自动切换到它们的原型出处。此功能非常方便,特别是开发STM32程序一般都使用ST的库函数,这样就可以方便地了解到库函数里面所有定义的实际情况。我们设置HEX文件名为:test,并保存在:test\MDK\Obj目录下:冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第109页,共461页第四页是“Listing”,一般这一页的勾都可以不打上,除非你有很多特别的信息想看。“Listing”页主要是设置List文件的目录,保存在:test\MDK\List目录下:冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第110页,共461页第六页是“C/C++”,在这一页我们可以设定程序的优化等级,一般作为学习调试之用,优化暂时都应该选Level0(-O0),也就是不优化。这样调试起来会顺畅一点。如果在程序中,没有使用的函数如何不编译成代码呢?在下图的“OneELFSectionperFunction”前打勾就可以了。选项“OneELFSectionperFunction”的主要功能是对冗余函数的优化。通过这个选项,可以在昀后生成的二进制文件中将冗余函数排除掉(虽然其所在的文件已经参与了编译链接),以便昀大程度地优化昀后生成的二进制代码。而该选项实现的机制是将每一个函数作为一个优化的单元,而并非整个文件作为参与优化的单元。选项“OneELFSectionperFunction”所具有的这种优化功能特别重要,尤其是在对于生成的二进制文件大小有严格要求的场合。人们习惯将一系列接口函数放在一个文件里,然后将其整个包含在工程中,即使这个文件将只有一个函数被用到。这样,昀后生成的二进制文件中就有可能包含众多的冗余函数,造成了宝贵存储空间的浪费。选项“OneELFSectionperFunction”对于一个大工程的优化效果尤其突出,有时候甚至可以达到减半的效果。当然,对于小工程或是少有冗余函数的工程来说,其优化效果就没有那么明显了。分析原因:STM32芯片的编程大多采用ST公司提供的库文件。这些库文件中大量而全面的定义了芯片的结构以及初始化,但是有些库文件中的结构体或者函数根本在主程序中没有调用到,白白地占用了大量的代码空间。使用该选项后,则将这些冗余的配置全部删除了,因此节约了CODE空间。冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第111页,共461页在本页的“Define”中写入“USE_STDPERIPH_DRIVER”,选择此项会包含*_conf.h文件,从而使用外设库。冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第112页,共461页此外,在本页中,我们还需要正确的设置头文件的路径,否则编译不能通过。我们添加以下三个目录:(1)\test\STM32F10x_StdPeriph_Driver\inc(2)\test\CM3(3)\test\User这三个目录包含了我们用到的所有头文件。冰凌科技STM32F103ZET6开发板用户手册仅供参考,版权所有第113页,共461页第八页是“Linker”,使用如下图的默认配置,编译器会自动帮您编排代码位置的了:好了,KeilMDK“魔术棒”的设置就先讲到这里,昀后两页的设置和JLINK仿真器相关,将在以下介绍JLINK之中讲述。
本文标题:创建一个STM32工程_冰棱科技
链接地址:https://www.777doc.com/doc-172141 .html