Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3043903
  • 博文数量: 396
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4209
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-04 13:04
文章分类

全部博文(396)

文章存档

2022年(1)

2021年(2)

2020年(8)

2019年(24)

2018年(135)

2017年(158)

2016年(68)

我的朋友

分类: 嵌入式

2017-04-05 14:42:10

本文引用以下博客成果,
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工程建立,完成


阅读(3207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~