EEPW ARM DIY手记之软件设计(一)——MDK_ARM工程的搭建
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EEPW ARM DIY手记之软件设计(一)——MDK_ARM工程的搭建作者:胡恩伟时间:2012年3月17日星期六
从本篇博客起,我将带领大家进入本次ARM DIY活动的软件设计世界。
首先介绍MDK_ARM(V4.23)中工程的搭建,然后结合本次DIY板,依次介绍各功能模块及嵌入式操作系统移植相关的软件设计。
可能大家觉得之前得几片DIY手记之硬件功夫整片都是文字,看着有点头大了,以后我的博客将图文并茂,力争在有限的文字中为大家呈现更多的精彩内容。
今天先介绍一下MDK_ARM(V4.23)中STM32软件工程的搭建,最后将得到一个工程模板,以后的工程都将基于此建立。
关于本次ARM DIY活动所使用软件设计的编程环境详细信息请参见我之前的博客《EEPW ARM DIY手记之软硬件设计使用软件说明》,这里不再赘述,软件环境MDK_ARM(V4.23) 的下载、安装也不在本博客的内容之列,敬请查看相关书籍或网络博客。
以下是在MDK_ARM(V4.23)中搭建STM32软件工程的详细步骤:
目录
一、下载、安装及破解MDK_ARM(V4.23)(此处略); (2)
二、新建STM32工程 (2)
三、设置工程选项 (6)
四、配置工程调试工具 (9)
五、编译工程 (11)
六、注意事项 (12)
一、下载、安装及破解MDK_ARM(V4.23)(此处略);
二、新建STM32工程
下载并解压STM外设支持库STM32F10x_StdPeriph_Lib_V3.5.0至某一新建文件夹Example(可任意命名):如下图:
然后,在Example目录下新建工程目录:My_STM32_MDK_Prj_Template。
随后,打开MDK 软件,Project->New uVision project,如下图,打开刚刚新建的工程目录,新建工程My_STM32_MDK_Prj_Template,保存。
接下来,选择目标器件Target CPU:选择STM32F103ZE
接着弹出是否复制STM32的启动汇编代码startup_stm32f10x_hd.s(也就是boot loader)到工程,点击是;在新建工程目录下就可以发现多有一个文件startup_stm32f10x_hd.s(如下右图所示):
接着,将\Examples\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\ STM32F10x_StdPeriph_Template目录下的stm32f10x_conf.h,stm32f10x_it.hc,stm32f10x_it.h 以及system_stm32f10x.c四个用户可配置文件复制到新建的工程目录下:
点击菜单栏工程目录快捷管理图标如下图所示:
在弹出的对话框中新建Default、User、StdPeriph_Driver、CMSIS、Onbaord_Parts五个文件组(Group),分别用于管理启动代码,用户代码、标准外设库代码、ARM提高的底层CMSIS 代码硬件与DIY板子上外扩功能模块相关的驱动程序代码,并将相应的代码添加到对应的组:
添加文件示例
添加当前工程目录下的启动代码startup_stm32f10x_hd.s到Default组
添加刚刚拷贝到工程目录下得四个用户可配置文件到User组
添加\Examples\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\ STM32F10x_StdPeriph_Driver\src目录下的所有代码文件到StdPeriph_Driver组
添加\Examples\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries \CMSIS\CM3目下所有文件(*.c)到CMSIS组
点击OK,回到工程界面,得到如下工程目录:
至此,整个STM32工程的目录建立完成,还需要进行一下工程设置才能顺利编译工程,否则会出现如下错误:
..\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_ Driver\src\stm32f10x_bkp.c(23): error: #5: cannot open source input file "stm32f10x_bkp.h": No such file or directory
三、设置工程选项
选中Target1,右键选中Option for Target1,弹出如下工程选项窗口:
切换至Output,配置如下:
此时,点击设置工程编译生成目标文件保存目录为\Examples\My_STM32 _MDK_Prj_Template\obj\(此处obj文件夹为新建目录),这样的设置可以避免在工程根目录下生产编译的之间文件,便于工程管理。
接着,切换至C/C++,配置编译器预处理符号及工程编译包含路径(即编译时,编译工具自动查找源文件、头文件的目录)
定义编译器预处理宏USE_STDPERIPH_DRIVER, STM32F10X_HD,前者告诉编译器使用并编译STM32的标准外设库,后者告诉编译器编译STM32F10X系列MCU高密度(High Density)器件相关的启动和配置代码;
设置工程编译包含路径,添加的所有工程包含路径如下:
..\My_STM32_MDK_Prj_Template;..\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0 \Libraries\CMSIS\CM3\CoreSupport;..\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5
.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x;..\stm32f10x_stdperiph_lib\STM32F10x_ StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc;.\Onbard_Parts
四、配置工程调试工具
工程默认使用ULINK2调试器,这里重新配置为J-Link V8.
首先在工程选项配置界面中切换至Debug,设置如下,建议勾选Run to main()选项,这样每次调试时,就会自动在main()函数开始行增加断点并运行到main()函数的第一行代码处,而不是停留在启动代码startup_stm32f10x_hd.s的汇编文件,系统复位代码处。
选择Cortex-M/R J-LINK(这里注意只有J-LINK V8以上版本才支持Cortex M系列MCU的调试,V6、V7版本的J-Link不支持Cortex M系列MCU的下载和调试,可以通过软件升级至V8版本)
点击J-link设置(Settings)设置如下:
添加Flash编程算法,选择STM32F10X High Density Flash 512K
最后一步,切换至Utilities,选择J-LINK作为Flash编程工具:
五、编译工程
新建text,输入简单的main()函数并保存为main.c
选中User 组,右键选择Add Filse to Group ‘User’
点击菜单栏编译,开始编译工程:
从上图中可以看到,本工程建立编译成功,0错误,0警告:
生成的工程编译报告如下:
Program Size: Code=848 RO-data=336 RW-data=20 ZI-data=1636 (代码大小)FromELF: creating hex file... (生成可执行hex文件)".\obj\My_STM32_MDK_Prj_Template.axf" - 0 Error(s), 0 Warning(s).(编译错误警告提醒)至此,整个STM32工程的新建,配置、编译就是完成了,以后我们就可以使用本工程作为工程模板,建立其他的应用工程了~!
六、注意事项
如果选择Clearn target,清除了编译结果,重新编译
Clean started: Project: 'My_STM32_MDK_Prj_Template'
deleting intermediate output files for target 'Target 1'
则会出现如下编译错误:
提示打不开startup_stm32f10x_hd.s.,没有此文件或者目录,对比下图的红色圆圈内的文件图标可以发现startup_stm32f10x_hd.s.与其他文件不一样了,原本在工程目录下的
startup_stm32f10x_hd.s.在Clean target的同时也被删除了。
解决的办法是将MDK的安装目录:\Keil\ARM\Startup\ST\STM32F10x下的startup_stm32f10x_hd.s复制到本工程的根目录下,重新编译即可。