Eclipse+GCC开发环境针对STM32F103ZE的开发模板,完美实现C++编程及JTAG调试

2019-08-14 20:06发布

模板地址:https://code.csdn.net/zvvzxzko2006/eclipse_stm32_template
环境搭建需要的工具:
http://pan.baidu.com/s/1eQrY08M

为什么不用MDK?因为mdk代码提示不智能,因为mdk的编译器不支持c++11,因为MDK正版贵的要死..
其实主要就是前两点,由于我习惯用VisualStudio写C++程序,突然用MDK实在感觉很不爽。

工具安装参照这几篇来
http://blog.csdn.net/at91rm9200/article/details/22853621
http://blog.csdn.net/at91rm9200/article/details/23245001
http://blog.csdn.net/at91rm9200/article/details/23334661
这位大神太无私了!

关于调试,我之前使用的GDBServer版本太低,导致无法正常连接。安装新版的就可以了。
最后说一下我的模板里都干了什么:
1.设置好gcc的编译,链接选项
2.提供了链接器脚本
3.移植了原子的实验一,也就是跑马灯实验

其他实验,你可以直接复制到项目中,但是不要忘记修改GCC编译器选项中的包含路径。
有问题后面跟帖。
====================================================================================
更新了一下项目模板,这次用git clone后直接eclipse切换工作区到模板目录中即可。不用再设置其他东西,直接c++编译 然后JLink调试即可。
编译过程也许会弹出一个错误,没关系,点击OK然后重新build就行了。




====================================================================================
更新了项目管理 DEBUG/RELEASE
其中,Debug模式使用内部RAM调试运行,当使用RAM调试运行时,不要忘记切换开发板BOOT的2个短接帽B0  B1 连接到3.3V
Release模式使用正常的Flash运行开发板     使用Flash运行时,不要忘记检查开发板BOOT的2个短接帽B0 B1 连接到GND


有问题,后面跟帖
====================================================================================
更新了C / C++ 部分库支持
C库:malloc  free  memcpy memset strlen strcpy strcmp itoa 
C++库 : new delete


代码托管到CSDN平台上了,有兴趣的欢迎来贡献c / c++ 标准库的stm32实现

有问题,后面跟帖



====================================================================================
已更新ucos成功移植

这次更新是基于原子ucos实验1led交叉闪烁实验。移植到gcc编译环境由于汇编语法不同,主要修改了移植步骤的汇编部分。
需要的可git



========================================================================================
更新修复SRAM调试时出现的SP初始化错误
1.初始化时SP无法自动按照向量表设置的初始值进行初始化,导致运行在SRAM中的程序被堆栈破坏
2.通过重写入口点程序,在堆栈操作之前就修复SP值解决问题。







欢迎关注

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
28条回答
lxing_1988
1楼-- · 2019-08-16 09:58
回复【14楼】lxing_1988:
---------------------------------
我的模板并没有使用gnu提供的标准库,因为涉及到c运行时库对cm3的移植确实很麻烦,所以我的模板直接使用我自己定义的一个c运行时库,而对于CTL中的printf实现起来也很简单,如果使用官方库,你需要重定义fputc函数,原子提供的就可以
int fputc(int ch, FILE *f)
{      
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
USART1->DR = (u8) ch;      
return ch;
}
因为printf是要调用fputc函数实现的。不过事实并没有那么简单,你会发现链接过程还会出现一堆未定义函数的问题,实际上,这些问题都是使用官方库造成的,你可以根据缺失的函数相应的定义出一个个空函数体,不过不可确定因素比较多。
另一种方法,也是我推荐的:如果你只用到printf,或用到很少的标准库函数,那么干脆不要使用官方提供的标准库,而是自己定义一个接受不定长参数的printf.具体方法网上文章不少
编译器参数 有几个必加的
-mcpu=cortex-m3 
-mthumb
-mlittle-endian
分别是cpu选择,指令集选择,小端选择(低字节在前,高字节在后)
这个是我工程模板中的一个例子
arm-none-eabi-gcc -mcpu=cortex-m3 -march=armv7-m -mthumb -mlittle-endian -O0 -fmessage-length=0 -fsigned-char -fno-builtin -Wall  -g3 -gdwarf-2 -DSTM32F10X_HD -DVECT_TAB_RAM -DUSE_STDPERIPH_DRIVER -DHSE_VALUE=8000000 -DDEBUG -I"../include"  -std=gnu11 -Wa,-adhlns="src/HARDWARE/RS485/rs485.o.lst" -MMD -MP -MF"src/HARDWARE/RS485/rs485.d" -MT"src/HARDWARE/RS485/rs485.d" -c -o "src/HARDWARE/RS485/rs485.o" "../src/HARDWARE/RS485/rs485.c"
比较长,不过元素不是很多,
其中-Dxxxx是定义宏,
-MT -MF是文件依赖性相关
-g3    -gdwarf-2    是调试信息相关的
-Wa,-adhlns=   是往汇编器传送编译选项-adhlns=...
就这些东西

你可以使用我的模板,模板中根据设置自动生成makefile文件,使用jlink调试很方便
白霖
2楼-- · 2019-08-16 13:47
很好的资料  学习
njayk
3楼-- · 2019-08-16 13:55
 精彩回答 2  元偷偷看……
白霖
4楼-- · 2019-08-16 15:31
更新 
修复SRAM调试时出现的SP初始化错误
1.初始化时SP无法自动按照向量表设置的初始值进行初始化,导致运行在SRAM中的程序被堆栈破坏
2.通过重写入口点程序,在堆栈操作之前就修复SP值解决问题。
白霖
5楼-- · 2019-08-16 19:32
回复【17楼】白霖:
---------------------------------
好的 谢谢您 受益匪浅
njayk
6楼-- · 2019-08-16 20:28
白霖 发表于 2015-9-25 13:27
回复【16楼】njayk:
---------------------------------
eclipse确实很好用,比如quickfix 功能,如果 ...

请问使用手册写好了吗?我目前也在尝试使用eclipse来开发,但是遇到很多编译问题,如__packed,__asm等兼容问题。希望楼主在手册中关注这些兼容问题是

一周热门 更多>