linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试

      因为项目开发,需要调试一款主控是stm32f407IGH6的PX4FLOW板,而且想顺便熟练linux,就在linux系统上搭建了一个开发环境。本人半小白,所以鼓捣了很久,一个BUG,一个BUG的解决。最后一个问题还是卡了好久,然后在国外网站找到了解决办法,最终成功的在unbuntu16.04系统上搭建了eclipse+jlinkgdbserver+arm-none-eabi-gdb+stm32的开发环境。

搭建流程:

一:安装eclipse IDE for c/c++ develop 可以参考这篇文章:http://www.cnblogs.com/amanlikethis/p/3401370.html

      总的流程就是:安装JDK支持( eclipse运行在java虚拟环境下,下载压缩包,打开就可以运行,有需要可以添加到桌面环境,顺便设置一下环境变量。这时候安装的eclipse基本上什么都没有,只是一个空壳,我们需要添加很多的插件。

二:安装arm-none-eabi-gcc

        首先附上下载地址:https://launchpad.net/gcc-arm-embedded/+download 

为了防止有些BUG,可以不要选太新或者太旧的版本。安装的具体流程比较简单,可以自行到网上去搜,记住添加环境变量。

安装并且添加号环境变量后有以下信息:

                     

输入arm-none后 tab可以找到我们需要的arm-none-eabi-gdb。

三:安装JLinkGDBServer

arm-none-eabi-gdb工具是运行在主机上的,通过这个工具向开发板发送调试指令,开发板接受指令的工具就是JLinkGDBServer,下载它是和jlink工具套件一起下载的

下载地址:http://www.segger.com/jlink-software.html

       注意网络要好 ,不知道是因为segger的源文件有问题还是什么别的原因。下载奇慢无比,有条件可以用好的方式看看。注意版本不要选太高,很多盗版jlink连接器不能被高版本的JLINK识别(一般大部分用的都是盗版)。

        安装方法同样可以百度,很详细。        

下载完后可以找到里面有很多工具,如果直接命令行烧写程序,就可以用JLinkExe.只能烧写二进制 .bin文件。用的是loadbin指令。

                                    linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试_第1张图片

调试的话就是用jlinkgdbserver。用于接受主机发来的调试指令。

四:安装eclipse相关插件

       1、首先是GNUARM Eclipse: 包含一套Eclipse插件和用于跨平台嵌入式ARM程序开发工具的开源项目。有过stm32库函数开发经历的朋友可能知道,开发前我们都会找一套工程模板,包含了对各个库文件的引用,我们只需要关注核心的应用即可,换一个项目时我们就拷贝一份模板,重新进行开发。Eclipse装了GNU ARM Eclipse工具簇后,新建项目时我们只需要选择对应模板的项目,插件就会自动帮我们配置好工程。(来源于http://blog.csdn.net/u012441819/article/details/65448481)

下载地址:http://sourceforge.net/projects/gnuarmeclipse/files/Current%20Releases/2.x/

插件的下载方法一般就是下载了zip文件,然后archive导入。可以Eclipse-->help-->Install New Software-->already installed查看已经安装的插件。

安装完后新建工程的时候可以发现已经有很多可以选择的开发芯片。

linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试_第2张图片

        2、然后是安装GNU ARM Eclipse Plug-in,该插件可以支持jlink,openocd等调试。下载完后就可以有下图:

linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试_第3张图片

利用SEGGER J-Link Debugging就可以直接烧程序,利用hardware可以在线调试。

五、示例

  首先new一个C工程,我用的是F4,一路next,finish就可以生成一个例程(最后一页是选择工具链,选择我们安装好工具链的bin目录),该例程是输出秒数和闪烁一个灯。注意这个时候在properites-C/C++Build-setting里面把优化等级改一下,不然编译会报错,改成O3就行。输出文件改成raw,这样可以生成一个二进制文件。其他插件都自动生成好了,程序是基于HAL库的。然后就可以编译成功了。

linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试_第4张图片

        然后Run-External Tools-External Tools Configurations新建一个program命名为jlinkgdbserver location设置为你的JlinkGDBserver所在地址(跟环境变量一致)。working Directory先不管, Arguments是运行时候的命令,可以参考手册输入,关键的就是设备型号和接口速度和调试接口,我的是-device STM32F407IG  -IF SWD。Build里面的勾去掉.就OK了

RUN一下会出现以下界面:jlinkgdbserver默认的端口是2331, openocd和stlink各不相同

linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试_第5张图片

如果出现 ERROR: Failed to bind address (Err = 98)
ERROR: Failed to open listener port 2331
Restoring target state and closing J-Link connection...
Shutting down...

Failed to open listener port 2331

原因是你已经打开了一个监听端口如下图,只需要删掉一个就可以,这个位置删除

linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试_第6张图片

让那后打开debug configuration,在GDB Hardware Debugging双击生成一个DEBUG,大部分已经填好,转到DEBUG页面

输入如下:

linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试_第7张图片

转到startup页面 initial commands栏输入:

monitor flash device = STM32F407IG

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意思是告诉jdbserver我的初始化调试指令下载到flash,断电设置在第一行,小端机器

接口速度等。

RUN commands输入

monitor reg r13 = (0x08000000)

monitor reg pc =  (0x08000004)
break ResetHandler
break main

continue

然后就apply就OK

接下来就开始调试,先启动jlinkgdbserver开始等待链接,然后打开debug。就会显示连接上,如下图:

linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试_第8张图片

如果出现报错是Reset commands .............'Generic TCP/IP'就是你的GDB Hardwaring Debug版本有问题9.4不行,要换成 9.3就OK。

到此为止,所有环境都已经弄好啦,就可以开始愉快的DEBUG了。方法跟我们熟知的IDE大致一样。有想用命令行的,也可以开两个终端用命令行敲。

下面我还需要搞搞怎么不用HAL库自己弄一个工程下来。得加快速度了。。

个人QQ:1070848278 欢迎喜欢linux或者嵌入式的大佬一起来讨论学习。


你可能感兴趣的:(linux系统搭建stm32开发环境 利用gdb+jlinkgdbserver调试)