『详解』Linux下搭建STM32开发环境安装eclipse步骤与配置
点击上方“大鱼机器人”,选择“置顶/星级公众号”
福利资讯,第一时间送达!
阅读本文大约需要10分钟。
写在前面
上一篇文章中写道:
51单片机可以在Linux下开发吗?这里给大家一个教程
随后有很多朋友给我留言,问STM32是否也能在liunx上搭建开发平台?
概述
1.1 目的
MDK+Jlink开发环境集编译、下载、调试于一体,配合友好的操作界面,为用户提供了非常开心的开发工具。不过玩过Linux系统的人,总想尝试把开发环境搬到Linux上来看看效果如何。
在Linux下,为STM32搭建开发环境是一个很有挑战性的工作,从中我们可以学到如何创建一个集成开发环境,或者说了解一个集成开发环境的要素。不得不提的“Eclipse”绝对是一个好东西,它就像一个开发环境框架,我们在其中添加STM32专用的编译器和调试工具,就构造出了一个STM32集成开发环境。
开源为电子行业的从业者提供了向技术深度进阶的机会,也在技术垄断的商业模式中开辟了属于全世界的免费知识财富。
1.2 开发环境说明
硬件开发板:Wildfire STM32开发板
Cortex-M3型号:STM32F103VET6
下载器及调试接口:Jlink+JTAG
操作系统:虚拟机VMware6.5+Ubuntu12.0.4
集成开发环境平台:面向 C/C++ 开发人员的 Eclipse IDE
交叉编译链:arm-none-eabi-gcc
调试服务器:JLink GDB 服务器
1.3 Eclipse搭建的STM32集成开发环境结构
1.4 GDB/GDB 服务器调试模型
GNU 项目调试器 (GDB) 是一款免费提供的调试器,根据 GPL 条款发布。它通过 TCP/IP 连接连接到仿真器。它可以连接到每个有 GDB 服务器软件的仿真器。
GDB Server 是 GDB 的远程服务器。当您在 GDB 源目录中运行 GDB 时,它将读取 .gdb 文件。GDB .gdb 文件包含默认设置信息和其他监控命令。GDB 和 GDB Server 通过 TCP/IP 连接进行通信,使用标准 GDB 远程串行协议。GDB Server 将 GDB 监控命令转换为 J-Link 命令。
构建步骤
1. 为 C/C++ 开发人员安装 Eclipse IDE
2.安装交叉编译链arm-none-eabi-gcc
3.安装JLink驱动
4.安装GNU ARM Eclipse插件包
5.新建LED_Test项目并配置、编译
6.安装GDB调试插件--C/C++ GDB HardWare Debugging
7.设置Eclipse调试环境并调试
阐明:
本文所需要的Eclipse插件的下载地址不能确保读者能从本网站找到可用的资源,因为Eclipse插件的下载地址会经常更新,下载地址会有所改变。
因此如果找不到该资源的话,就需要通过Google搜索Eclipse目前提供的可用资源。
详细施工流程
3.1 为 C/C++ 开发人员安装 Eclipse IDE
参考:在 Ubuntu 上为 C/C++ 开发人员安装 Eclipse IDE
网址:(复制即可在网页上打开)
安装到这一步之后就可以像VC6.0一样进行C/C++开发了,但是编译出来的代码只能运行在X86平台上,不支持ARM。
为了进行交叉编译,我们需要安装交叉编译链arm-none-eabi-gcc,但是这个编译链并不是Eclipse的一部分,也不是Eclipse可安装的插件。
Eclipse只是用来调用交叉编译链的,调用之前需要安装“GNU ARM Eclipse插件”,通过这个插件就可以调用arm-none-eabi-gcc来编译我们的源程序了。
如果没有安装GNU ARM Eclipse插件,打开项目属性,情况如下:
如果只安装“eclipse IDE for C/C++ developers”,则只能进行X86平台的程序调试,而不能进行ARM平台的硬件调试。
为了进行硬件调试,我们需要在交叉编译链arm-none-eabi-gcc中安装工具arm-none-eabi-gdb。此工具不属于Eclipse的一部分,也不是Eclipse的可安装插件。
Eclipse 只调用这个调试器,调用之前需要安装“GDB Debug Plugin”,有了这个插件,就可以调用 arm-none-eabi-gdb 来硬件调试我们的源程序了。如果没有安装“GDB Debug Plugin”,打开“Debug Configurations”,情况是这样的:
如果你只安装了“eclipse IDE for C/C++ developers”,那么你可以调用外部硬件调试服务器——JLinkGDBServer,但是此时由于无法连接GDB调试客户端,所以还不能进行调试。
3.2 安装交叉编译链arm-none-eabi-gcc
1> 下载编译器:
+下载
2> 解压并安装tar
3> 修改/etc/profile
4> 使/etc/profile的修改生效
5> 测试
#arm-none-eabi-gcc -v
成功界面如下:
3.3 安装JLink驱动
Jlink驱动包括四个工具:JLinkExe、JLinkGDBServer、JLinkRemoteServer、JLinkSWOViewer。
1>驱动下载,地址为
注意您选择的安装包:“Linux V4.86a 的软件和文档包,DEB 安装程序 32 位版本”
2>使用dpkg -i命令进行安装,安装位置在/usr/bin目录
3> 测试版本
首先将硬件Jlink连接到电脑,然后将Jlink从物理PC传输并映射到虚拟机中,输入测试命令
#JLinkExe
成功界面如下
4>下载测试
命令序列
① h——停止程序
② exec device=STM32F103ZE --选择芯片型号
这里选择的是STM32F103ZE,而不是STM32F103VET6,原因是这个版本的JLink驱动不支持STM32F103VET6,所以用接近的型号代替。
③ loadbin Led_Test.bin 0x8000000 --下载
3.4 安装 GNU ARM Eclipse 插件包
本插件包内含有6个插件,可以手动下载安装,但此方式只能安装其中4个;若使用自动下载安装,则可以完整安装所有插件。
方法一:手动下载安装
1>下载插件,地址:%20Releases/2.x/
插件名称:ilg.gnuarmeclipse.repository-2.2.2-2.zip
2> 复制到 Linux 中的一个目录,假设它是 /source
3> 安装插件
打开Eclipse-->help-->Install New Software-->Add-->Archive-->选择插件-->选择“√”-->Next-->等待
☆ 测试
测试1:Eclipse-->help-->Install New Software-->already installation查看已安装的插件:
测试2:插件安装成功后,新建C项目时界面变化
3.5 新建LED_Test项目并配置、编译
1> 创建新项目
文件-->项目-->C项目-->项目名称-->CrossARM GCC-->工具链路径-->Finsh
此时工作目录下(笔者的是/root/workspace)会多出一个子目录LED_Test
2> 将源代码复制到此目录
将MDK中LED实验的源码复制到Linux系统中,放在/root/workspace/LED_Test目录下
3> 将源代码添加到项目
在 Project Explorer 中,点击“F5”刷新,所有源目录和其中的文件都将被添加。
4> 更改所需文件
① 启动文件
另外,请注意将TureSTUDIO/startup_stm32f10x_hd.s的后缀“s”改为大写的“S”。原因是编译器会对S文件进行预处理然后进行汇编操作,而s文件只进行汇编操作。详细原因请参考gcc编译.s文件与.S文件有什么区别。
② 连接脚本
③ 其余文件与MDK上所需文件类似,保留所需文件,删除工程中不需要的文件。
5>开始配置项目
在项目浏览器中选中项目,右键选择Properties,然后选择C/C++ Build-->Settings,弹出如下界面
6> 配置 Cross ARM GNU 汇编器
主要添加预处理宏
7> 配置编译器 Cross ARM C Compiler
①添加预处理宏
② 添加头文件搜索目录
8> 配置 Cross ARM C 链接器
主要选择连接脚本文件
9> 配置生成的镜像文件Cross ARM GNU Create Flash Image
选择生成二进制图像文件
10> 编译
项目->构建项目
可以在/root/workspace/LED_Test/Debug目录下看到生成的目标文件
使用 C/C++ GDB 硬件调试进行硬件调试
1.安装GDB调试插件--C/C++ GDB HardWare Debugging
1> 安装
该方法中Eclipse会自动搜索用户提供的网络地址然后下载并安装,所以请确保虚拟机可以访问网络。
2> 验证
成功后可以在Run-->Debug Configurations中看到以下界面
需要注意的是,如果在Run菜单下找不到“Debug Configurations”选项,那是因为项目处于编译环境,还未切换到调试环境。只有切换到调试环境,才能在Run菜单下找到这个选项。切换方法是:
2.设置Eclipse调试环境并调试
1> 配置Eclipse调试选项
① 调试器
运行-->调试配置-->GDB硬件调试-->调试器
② 启动
在初始化命令中输入检测参数
监控闪存设备 = STM32F103ZE
monitor flash download = 1
monitor flash breakpoints = 1
monitor clrbp
monitor endian little
monitor speed 5
monitor reset
monitor sleep 100
monitor speed auto
monitor writeu32 0xE000ED08 = 0x00000000
然后在运行命令中输入命令
monitor reg r13 = (0x00000000)
monitor reg pc = (0x00000004)
break ResetHandler
break main
continue
2> 配置 Eclipse 调试选项
运行-->外部工具-->外部工具配置-->新_configuration
3> 调试
运行-->调试
3. 另一种调试方法
1> 配置
配置仍然是步骤7中的1>和2>
2>启动JLinkGDBServer
在终端上启动JLinkGDBServer
3> GDB调试
运行-->调试
如果连接成功的话,终端上会打印如下界面
5.使用arm-none-eabi-gdb直接调试硬件
1.安装Jlink驱动
2.安装交叉编译链arm-none-eabi-gcc
3.编译项目生成elf文件
4.在当前用户目录下创建.gdbinit文件
笔者当前用户是root,所以在根目录下创建.gdbinit初始化文件
#gedit ~/.gdbinit
内容是:
set auto-load safe-path /
5.在项目文件夹下的Debug目录下创建.gdbinit文件
在项目的Debug目录下创建一个.gdbinit文件,内容如下:
target remote :2331
set mem inaccessible-by-default off
monitor speed auto
monitor endian little
monitor reset
monitor flash device = STM32F103ZE
monitor flash breakpoints = 1
monitor flash download = 1
load
monitor reg sp = (0x08000000)
monitor reg pc = (0x08000004)
break ResetHandler
break main
continue
需要注意的是:由于目前版本的Jlink驱动不支持STM32F103VET6,所以选择STM32F103ZE。
6.启动JLinkGDBServer
打开终端并输入命令
root@daneiqi:~# JLinkGDBServer
7.开始调试
打开另一个终端,在项目的Debug目录下输入命令:
root@daneiqi:~/workspace/LED_Test/Debug# arm-none-eabi-gdb LED_Test.elf
调试界面如下
//结尾