本文引用以下博客成果,
http://blog.csdn.net/at91rm9200/article/details/22853621
http://blog.csdn.net/at91rm9200/article/details/23245001
http://blog.163.com/rainsmell_/blog/static/212827113201431443714393/
http://blog.sina.com.cn/s/blog_78212a050100ph5y.html
http://eraycanli.com/blog/2015/01/24/stm32-gnu-arm-gcc-toolchain-with-eclipse-stlink-and-openocd-debugger/
(解决那个汇编问题的歪果仁链接)
感谢以上优秀的博文和博文的原创作者
本文仅用作本人学习、备忘用途,如需转载,请与本人联系:mustang.rxm@gmail.com
打开Eclipse,点击NEW->C Project
命名好工程的名字,并且选择工程类型,工程类型处有各种模板,本次选择空的工程,选择“Empty project”,右边是选择前边所安装的交叉编译工具,选择Cross ARM GCC
选择完成后,点击“NEXT”
一路点击"NEXT"
当安装好交叉编译工具后,Eclipse会自动导入工具在系统中的位置,如下,最后点击FINISH
工程初步建立。
在工程目录下新建一个【USER】和【startup】文件夹
将固件库复制到工程目录下,STM32的固件库,可以在www.stmcu.org 或者ST的官网上均有下载。本人使用V3.5版本的STM32F10x_StdPeriph_Lib_V3.5.0。
本人使用STM32F103ZET6,对复制到工程目录下的固件库文件操作如下
复制\ stm32\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的 main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 到【USER】文件夹
复制\stm32\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\TrueSTUDIO\STM3210E-EVAL下的stm32_flash.ld到工程目录下(打开可以看到,这个链接文件是针对于STM32F103ZET6的,固每种不同型号的STM32 MCU,需要更换此文件)
复制\stm32\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO下的startup_stm32f10x_hd.s到工程目录下,并且将后缀.s从小写更换为大写.S(因为本次使用STM32F103ZET6大容量MCU,故使用此文件
删除工程目录下的\stm32\STM32F10x_StdPeriph_Lib_V3.5.0的【Project】和【Utilities】文件夹,至此,文件增删完成,在Eclipse的工作区中选择该工程,然后按F5刷新,文件会自动导入工程
此时,还未可以进行编译,因为工程配置还没有完成,配置如下
选中工程->右键->Properties->C/C++ Build->Settings
选中CROSS ARM C Compiler->Preprocessor 添加两个宏 STM32F10X_HD 和USE_STDPERIPH_DRIVER,表明使用大容量MCU和使用外围固件库
添加头文件路径
添加链接文件,选择从固件库复制出来的stm32_flash.ld(打开该链接文件,可以看出是针对于STM32F103ZET6的)
点击【Toolchains】选卡,把安装的交叉编译工具路径下的bin文件夹路劲填上
这个时候,来到了一个最关键的地方,我坑了1天多,点击Environment->PATH,在这里,添加GNUWIN32的路径 C:\Program Files (x86)\GnuWin32\bin(路径是我自己的),因为工程需要make工具,有的交叉编译工具会自带Make工具,但我使用的这个没有,如果没有加上,会出现找不到"make.exe"错误
完成后对【USER】文件夹下的Main.c进行修改,因为没有包含任何DEMO文件,所以需要删除MAIN.C下调用的函数,清理干净后,可以进行编译,出现了如下错误
经谷歌,寻找歪果仁讨教后,ERROR:register may not be the same -- strexb r3,r2,[r3]等错误的解决方法如下
打开工程文件\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的core_cm3.c,找到
__ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
__ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); 两行,更改如下
__ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
__ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
修改完成后,保存!注意,请再选中工程项目,刷新F5,再一次编译。刷新是很重要的。
至此,基于Eclipse的STM32工程建立,完成
阅读(3337) | 评论(0) | 转发(0) |