芯嵌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进一步改善教程,谢谢!
- 芯嵌stm32入门教程7:创建第一个MDK工程模板
- STM32之keil MDK下建立第一个工程
- ARM Keil MDK开发STM32工程模板
- 用MDK建立STM32工程模板
- STM32工程模板简单套用教程(Keil MDK)
- 使用Keil MDK以及标准外设库创建STM32工程
- 使用Keil MDK以及标准外设库创建STM32工程
- STM32 MDK 工程创建 图解步骤 自我学习总结
- 记忆力减退---之STM32 MDK工程创建---宏定义
- 使用Keil MDK以及标准外设库创建STM32工程
- 使用MDK创建stm32 库函数工程简单教程
- 基于MDK-KILE5.23版本的STM32创建工程
- 使用Keil MDK运行第一个STM32程序
- 使用Keil MDK运行第一个STM32程序
- 使用Keil MDK运行第一个STM32程序
- 使用Keil MDK运行第一个STM32程序
- 使用Keil MDK运行第一个STM32程序
- 建立第一个stm32工程感触
- hdu 1863 畅通工程 (最小生成树kruskal 算法)
- su密码忘了,很简单的搞定方法
- Androd 如何使andorid应用程序的icon不在Launcher界面上显示
- 二分图 最大匹配
- POJ1037 A decorative fence
- 芯嵌stm32入门教程7:创建第一个MDK工程模板
- CSS hack
- 初学者学习 Android 开发,有什么好网站推荐?
- 【Cocos2d-X开发学习笔记】第03期:渲染框架之导演类(CCDirector)的使用
- c++之类的前置声明
- stm32外部中断进入不了的原因分析
- [二分][YandexAlgorithm2013T5]homework
- CF 191 div2
- myeclipse10中表单中的JS函数无法写return