Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试
Eclipse+CDT+YAGARTO+J-Li;开源开发环境搭建与调试;作者:Chongqing;邮箱:ycq.no1@163.com;文档版本:V1.0;发布日期:2014-08-04;前言;此文档本着开源精神,基于LGPL协议发布;因网上开源的单片机、微控制器开发平台信息很少,故;因用ARM公司的KeiluVision开发环境开;因Eclipse是一个
Eclipse + CDT + YAGARTO + J-Link,STM32
开源开发环境搭建与调试
作者 :Chongqing
邮箱 :ycq.no1@163.com
文档版本 :V1.0
发布日期 :2014-08-04
前言
此文档本着开源精神,基于LGPL协议发布。如有修订及重新发布,请标明原始作者、邮箱、原始版本及修订日期。
因网上开源的单片机、微控制器开发平台信息很少,故发布此文档,以飨读者。
因用ARM公司的Keil uVision开发环境开发单片机、微控制器并发布商业产品涉及版权问题,需要支付不菲的授权使用费,这对中小型公司来说是笔不小的开销。故寻找Keil uVision的替代方案。
因Eclipse是一个开源的开发平台,并且支持各种插件的开发,因此可以以Eclipse + CDT + YAGARTO + J-Link的方式搭建开源开发平台。
Eclipse是一个开源、免费、跨平台、支持插件扩展的Java、C/C++等集成开发环境。Eclipse通过CDT可以比较好的支持C/C++的开发,读者可以到Eclipse官网直接下载CDT版本的Eclipse。在Eclipse中添加GNU ARM Eclipse插件,与YAGARTO GNU ARM Toolchain和J-link仿真调试器结合,就可以比较好地支持STM32的开发与调试。
但是Eclipse有其缺点。Eclipse做Java开发比较方便,代码编辑与提示、代码编译都很方便,但是针对C/C++的代码提示不方便。Eclipse臃肿,代码编译速度慢。Eclipse的GNU ARM 环境配置复杂,调试不便。在这里,本人还是推荐使用Em::Blocks。Em::Blocks小巧,不像Keil uVision那么大,也不像Eclipse那般臃肿。Em::Blocks安装、配置相对Keil uVision更简单方便,Eclipse的环境配置相对更复杂,更容易出错。Em::Blocks的代码编辑环境相当智能化,相对Keil uVision好很多,相比Eclipse也毫不逊色。Em::Blocks内嵌了GNU编译器,代码的编译速度是Keil uVision和Eclipse不能比拟的。Em::Blocks内嵌对几种JTAG仿真调试器的支持,调试时方便快捷,相比Keil uVision也毫不逊色。Eclipse的代码提示、配置、编译、调试的体验很差,在此不赘述。Em::Blocks STM32开发环境的搭建在《EmBlocks + J-Link,STM32开源开发环境搭建与调试》这一文档中有详述。
开发环境
系统: Windows 7旗舰版。
开发工具:
1、
2、 因为Eclipse是用Java开发的,所以需要Java的运行环境,只要下载安装jre即可,这里我们下载安装
(包含jre), Windows x86,32_bit;
3、 要使Eclipse支持ARM开发,需要下载安装一个插件:(ilg.gnuarmeclipse.repository-1.8.1-201401111229.zip);
因为我们下载的Eclipse IDE for C/C++ Developers中已经包含CDT插件,无需我们手动安装,4、 CDT插件,
如果你下载的是别的版本的Eclipse,需要你自己手动安装CDT插件;
5、 YAGARTO,GNU ARM toolchain:
官网:,工具下载官网:
下载安装:(yagarto-tools-20121018-setup.exe) 和(yagarto-bu-2.23.1_gcc-4.7.2-c-c++_nl-1.20.0_gdb-7.5.1_eabi_20121222.exe),下载地址:
;
6、 J-Link驱动工具包:Setup_JLinkARM_V434d.zip。
,版本:4.3.1,32_bit;
安装交叉编译工具:
1、 上面的工具都下载好以后,先安装好Java SE Development Kit 7u51、YAGARTO-Tools-20121018(先于YAGARTO
GNU ARM toolchain安装)、YAGARTO GNU ARM toolchain和J-Link驱动工具包;
2、 解压Eclipse到指定目录,进入目录,打开eclipse.exe,配置好Eclipse工作目录;
3、 安装GNU ARM Eclipse Plug-in插件,Eclipse?Help?Install New Softwares,点击“Work with”右边的“Add”,
点击弹出的框中“Name”右边的“Local…”,加上解压后的GNU ARM Eclipse Plug-in插件目录,点OK,然后一步步下去,直到Eclipse重启;
Eclipse配置:
1、Eclipse编码格式配置:
(1) Window?Preferences,左侧导航树到general?Workspace,右侧“Text file encoding”,选择“Other”,
改为“UTF-8”;
(2) Window?Preferences,左侧导航树到general?Content Types,右侧“Content types”树,点开“Text”,
选中“C Source File”,在下面的Default encoding框中填上“UTF-8”,点击右边的“Update”;
2、显示行号:Window?Preferences?General?Editors?Text Editors,选中右侧的“Show line numbers”复选框,另外把“Insert spaces for tabs”复选框选中,用空格代替tab,以便代码用别的编译器编译时,出现代码对齐问题;
3、修改字体:Window?Preferences?General?Appearance?Colors and Fonts,在右侧树形列表中选择C/C++?Editor?
编辑文本字体即可;
4、修改默认代码格式:Window?Preferences?C/C++?Code Style?Formatter,单击右侧的“New”新建一个格式化配置,修改配置,然后保存即可。还可以通过“Export All”导出配置,重装Eclipse时只要导入该配置即可;
5、显示空格和制表符:Window?References?General?Editors?Text Editors,选中右侧“Show whitespace characters”,还可以点击“configure visibility”来选择要显示的空白字符,这里可以取消“Carriage Return”和“Line Feed”的“Trailing”显示;
6、显示最大列宽范围:一般的代码规范会要求代码的最大列宽为80个字符,Eclipse提供最大列宽提示界线:Window?Preferences?General?Editors?Text Editors,右边选中“Show print margin”;
7、为防止在Eclipse外部修改工程目录中的文件引起文件不同步导致“Resource ‘项目名’ is out of sync with file system.”的问题,解决办法:Window?Preferences?General?Workspace,右边选中“Refresh using native hooks or polling”和“Refresh on access”
8、修改过的代码不用保存直接编译:Window?Preferences?General?Workspace,右边选中“Save automatically before build”;
,点击右边的“Edit”,
编译配置:
1、 Ctrl + n,创建新项目,选择C/C++下的“C Project”,点“Next”,在弹出框中选择
和,添加上项目名称,点“Next”,在
弹出的框中设置处理器参数,因为我们的处理器是STM32F103VET6,所以Chip family改为
,Flash size改为512,RAM size改为64,“Next”、 “Next”、
“Next”,到Cross GUN ARM Toolchain框,Toolchain name改为
,Toolchain path改为
YAGARTO
GNU ARM toolchain的路径,如
Explorer”中看到项目的结构; ,点OK后,就可以在Eclipse的“Project
2、 右击项目名?Properties,C/C++ Build?Tool Chain Editor,把右边的Current builder改为
;
3、 配置好后,把自己的.c文件放到项目根目录的src目录下,.h文件放到项目根目录的include目录下,选中
Eclipse目录树,右键Refresh或者F5刷新,就可以看到刚才添加的文件了,点击
看到编译生成hex文件了。
4、 刚开始我们的代码默认为Debug模式,若想修改为Release模式,右键项目名称?Preperties,在弹出框的
左侧树形目录中选择C/C++ Build?Tool Chain Editor,点击右上角的“Manage Configurations”,在弹出的框中选中Release?点击Set Active?点击OK;然后Crtl + B,先生成Release版本的elf和hex文件;打开Debug Configurations?在弹出的框中,点击
页下,点击,在下自定义的配置,在右侧的main标签下面的框中,选择Release版本的elf文件,点击“OK”,完成; 或者Ctrl + B,就可以
5、 如果已经有Eclipse项目,可以导入现存项目:File?Import或者右键Eclipse目录树?Import,在弹出的框
中选General?
和
到此,编译配置完成
?next,Select root directory选择项目根目录,选中,点击“Finish”完成;
调试配置:
1、 打开Debug Configurations?在弹出的框中,双击左边树形
2、 在右边的Main标签页下,C/C++ Application文本框下面,点击,在弹出的框中已经默认为,生成新的配置;
生成的elf文件和默认的Debug生成的elf文件,如果要改为Release生成的文件,以后再改;
3、 在Debugger标签页下,GDB Command文本框,选择安装的YAGARTO编译器的GDB调试工具,如:
,如果在安装YAGARTO时,YAGARTO已经自动修改了环境变量,可
以直接填入“arm-none-eabi-gdb.exe”;Port number改为2331;JTAG Device改为Generic TCP/IP(如果不行,改为J-Link);
4、 在Startup标签页下,在Initialization Commands文本框中,输入以下内容:
monitor flash device = STM32F103VE
monitor flash download = 1
monitor flash breakpoints = 1
monitor clrbp
monitorendianlittle;monitorspeed5;monitorreset;monitorsleep100;monitorspeedauto;monitorwriteu320xE000ED0;注:其中,monitorflashdevice需;RunCommands文本框中填入以下内容:;monitorregr13=(0x0000000;mo
monitor endian little
monitor speed 5
monitor reset
monitor sleep 100
monitor speed auto
monitor writeu32 0xE000ED08 = 0x00000000
注:其中,monitor flash device需要根据自己的STM32设备自行修改;
Run Commands文本框中填入以下内容:
monitor reg r13 = (0x00000000)
monitor reg pc = (0x00000004)
break main
continue
注:请不要勾选Runtime Option中的选项。
然后点击Apply,请确保GDB Server(如从开始菜单打开SEGGER J-Link GDB Server V4.34d)已经打开,并且连接正常,点击Debug开始调试。
到此,Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建全部完成。
几种编译环境的比较
1、 Keil uVision + J-link
Keil uVision是ARM公司提供的主要用于微控制器领域的集成开发环境。比较稳定可靠,对各种芯片都有比较好的支持。Keil uVision生成的目标代码效率很高,汇编代码紧凑,容易理解。缺点是Keil uVision需要不菲的授权费,对中小型公司来说不适合用其开发商业软件;Keil uVision的项目构建与配置不是很方便;Keil uVision的代码编辑不是很方便。
2、 Eclipse + CDT + YAGARTO + J-link
Eclipse作为开源的开放开发平台,YAGARTO作为开源的GNU开发工具链,结合起来可以提供一个比较好的开源STM32开发环境。Eclipse的源代码编辑环境非常友好,可以加快源代码的编辑速度。Eclipse主要用来开发JAVA,可以通过CDT插件支持C/C++的开发,但是Eclipse臃肿、缓慢,对C/C++的开发支持不是很友好,C/C++源代码编辑环境不如JAVA方便。在Eclipse中安装GNU ARM Eclipse Plug-in插件、配置编译与调试环境比较繁琐,很容易出错,在调试的时候,要先打开J-link GDB Server,再到调试界面进行调试,调试时CPU不能Reset,每次调试都要重新烧写Flash,费时,同时频繁烧写Flash也减短Flash寿命。
3、 Em::Blocks + J-link
Em::Blocks集成开发环境基于Code::Blocks集成开发环境。Code::Blocks是一个开源、免费、跨平台、支持插件扩展的C/C++集成开发环境。Code::Blocks支持多种应用的开发,并且小巧、稳定、可靠、快速,是一款功能非常强大的集成开发环境。Em::Blocks继承了Code::Blocks的优点,只针对嵌入式平台做开发,并针对嵌入式开发环境做了优化。Em::Blocks内嵌了GNU ARM编译器,同时内嵌对J-link等JTAG仿真调试器的支持。在安装Em::Blocks时不需要对GNU ARM和J-link做太多配置。编译代码非常快速。代码编辑、代码提示相对Keil uVision做得很出色,相比Eclipse也毫不逊色。创建工程非常方便,Em::Blocks根据创建工程时选择的处理器自动添加固件库代码,只要添加上自己的项目代码就可以。在调试时,Em::Blocks会自动调用J-link GDB Server,也可以Reset CPU,也可以在RAM中执行程序从而减少烧写Flash。
Em::Blocks相对Keil uVision开源、免费,同时工程管理方便,代码编辑、提示都很优秀;Em::Blocks相对Eclipse小巧、快速,内嵌对GNU和J-link的支持,配置非常方便,调试自动调用J-link,可以Reset CPU,大大简化在Eclipse下的操作。Em::Blocks是一款非常强大、对嵌入式开发支持非常友好的集成开发环境。