eclipse中创建stm32工程

本文详细介绍了如何从零开始搭建STM32F103C8T6的开发工程,包括创建C project、配置交叉编译工具、选择正确的.s文件及链接文件,以及修改main.c文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章:https://blog.csdn.net/Mustang_Jack/article/details/46972735

http://www.doc88.com/p-1985064628697.html

之前都是别人的工程直接拷贝过来,改改源文件,工程框架都是用的别人的,现在想自己从零开始搭建一下工程,于是查找搜索了一下,找到以上两篇文章,参考进行创建,根绝以上文章创建完成后,有几处错误(文章中红字标注出来的地方),后来问了以前公司的一个同事,在他的指导下才知道是.s文件要根据编译器不同选择不同的.s文件。我的eclipse是GCC交叉编译的,所以要选择GCC下的.s文件。最后工程搭建完运行正常。在此,向我的那个前同事表示感谢。接下来将创建配置过程记录如下,以便更多的人可以参考。

1.首先创建一个空的C project。交叉编译工具选择如下的Cross ARM GCC,饭后点击next-->next, 

Toolchain path选择gcc安装的路径下的bin文件

2. 将stm32的固件库拷贝到工程目录下,并在工程目录下创建user 和 startup两个文件夹。

3. 将固件库中的STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的以下4个选中的文件 main.c,  stm32f10x_conf.h,  stm32f10x_it.c,  stm32f10x_it.h放在user文件夹下:

4. 将固件库目录F:\stm32f103官方固件库 STM32中文编程参考手册\stm32f103官方固件库+STM32中文参考手册+\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7

下的startup_stm32f10x_md.s放在工程目录下的startup文件夹下,并将后缀改成大写.S。这个文件的选择要根据自己选用的单片机型号的大、中、小容量进行选择,我用的是STM32F103C8T6,属于中容量,所以选择startup_stm32f10x_md.s

这里要注意:因为我的eclipse用的是GCC编译,所以要从gcc_ride7下面拷贝.s文件,有的参考链接里说的是从arm\目录下拷贝,这个要根据编译器的不同要进行选择。

根据里面是

5. 将F:\stm32f103官方固件库 STM32中文编程参考手册\stm32f103官方固件库+STM32中文参考手册+\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\TrueSTUDIO\STM3210B-EVAL目录下的stm32_flash.ld文件拷贝到工程目录下,这个是用来链接的文件。

注意:这个文件的选择要根据单片机的型号,B-EVAL,C-EVAL,Z-EVAL对应不同的单片机,我的单片机是STM32F103C8T6,所以选择STM3210B-EVAL,具体的可以打开这个ld文件看一下里面的flash大小和ram大小是否和你的单片机datasheet上写的对应。

datasheet上的大小说明:

至此,所用到的库和链接文件以及.s文件拷贝完。

最后,删除工程录下固件库目录下的Projects 和 Utilities 两个文件夹。按F5或右击工程点击Refresh刷新工程。

至此,工程创建完成。

二、 接下来是工程的配置:

在工程上右击--》properties, 接下来按照图中进行以下操作。

1. 设置cortex家族

2. 表示使用中型的MCU和外围固件

3. 加入头文件的路径

4. 设置链接文件

5. 设置Toolchains:

点解确定,至此编译环境配置完成。

三,对main.c文件进行修改,删除里面没有用的东西,只留下main()函数以及里面的while(1), 然后进行编译,

这时会出现以下编译错误:

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,再一次编译。刷新是很重要的。

另外,有可能还会出现下面的make错误,

解决方法:如下图,将Current builder改成 CDT Internal Builder,点击OK。进行编译,就没有问题了。

至此,整个创建和编译配置的完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值