单片机学习小组
直播中

向日葵的花季

8年用户 1237经验值
擅长:电源/新能源
私信 关注

如何基于Ubuntu+Eclipse+GDB+OpenOCD+STlink搭建STM32开发环境?

如何基于Ubuntu+Eclipse+GDB+OpenOCD+STlink搭建STM32开发环境?

回帖(1)

王莉淳

2022-2-8 11:30:34

  • 准备工作:一台能够上网的配置还不错的电脑,stm32开发板,stlink下载器。
    本人的mcu为stm32f429;ST-LINK/V2;Ubuntu18.10 64bit;
  • 第一步 搭建ubuntu环境 (如果你已搭建好,可忽略);
  • 第二步 利用OpenOCD+GDB+STlink连接你的开发板;
  • 第三步 配置你的eclipse环境;

第一步 搭建ubuntu环境



解压VMware,你将看到如下文件 点击"安装VMware"
选择“0、一键安装所有服务”以及“2、USB设备支持服务”完成之后关闭窗口,打开桌面上的VMware图标
点击创建新的虚拟机

选择推荐设置,
选择下载好的ubuntu镜像

注:创建虚拟机目录最好不要选择c盘,除非你的c盘空间足够多,然后就是分配给ubuntu的最大磁盘大小默认是20G,这里给了80G的空间。
选择“自定义硬件” 我这里内存给了4G,处理器给了4个内核。
点击完成,搞定,然后可以去休息一下,准备迎接全新的世界。

完成之后,

第二步 利用OpenOCD+GDB(GNU Debugger)+STlink连接你的开发板




  • 准备工作


    • 安装Stlink驱动 驱动链接:https://pan.baidu.com/s/1vZObrb1842WpOohwASTQ5A
      提取码:vp5f
    • 如果你是在虚拟机中运行的Ununtu,为了能让Ubuntu连接stlink,需要开启虚拟机的u***设备支持功能,在第一步中已选择“2、USB设备支持服务”,如果你的虚拟机没有这一选项,那么需要手动打开。挂起系统,选择虚拟机设置,配置u***控制器如图,然后确定。
    • 打开Ubuntu终端(alt+ctrl+t)输入
      lsu***
      如果一切顺利的话你将看到 STMicroelectronics ST-LINK/V2 表明Ubuntu能够识别stlink了。

    • 安装openocd 打开Ubuntu终端(alt+ctrl+t)输入
      sudo apt install openocd
      我这里是之前安装好了的。完成之后 输入
      openocd
      查看版本信息

    • 下载GDB工具链 :
      到官网下载:gcc-arm-none-eabi下载 选择linux-64bit版。
      如果网速不够快 到百度云下载 链接:https://pan.baidu.com/s/1vyoXUjY5HQXJ162mj4UhUg
      提取码:sum8
      成功后右击选择extract Here 即可解压到本目录下

      接下来我们打开终端,尝试运行一下刚才我们下载好了的 arm-none-eabi-gdb,终端来到如下的bin目录下,会有arm-none-eabi-gdb可执行文件。在如下终端目录输入
      ./arm-none-eabi-gdb
      表示运行此目录下arm-none-eabi-gdb文件
      如果运行成功会出现进入gdb调试窗口
      注:下载的gcc-arm-none-eabi 的版本最好是最新的,因为最新的版本不会出现2015版或2016版运行arm-none-eabi-gdb时找不到命令can not command提示;


  • 开始连接目标板,并下载程序


    • 在终端中输入
      openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg
      如果你的mcu不是stm32F4系列,你就需要自己改变stm32f4x.cfg的内容。比如你的板子是stm32f1系列的, 你要到如下路径找到“stm32f1x.cfg”文件,那么终端中的命令变为
      openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

      成功会出现如下的画面:
      然后alt+shift+t 打开另一个端口 输入:
      telnet localhost 4444
      接下来就可以下载程序到目标板了,下载程序之前需要挂起目标 输入命令
      halt
      然后输入命令:
      flash write_image erase xxx.hex 擦除flash并下载程序
      xxx.hex是你要下载的程序,也可以是.elf文件
      注:pwd 查看当前目录 要下载的程序要放在此目录下。
      最后输入命令
      reset
      程序就可以跑起来了。
      小提示:windows上的文件可以直接拖曳到Ubuntu磁盘中。
      参考博客:https://blog.csdn.net/baidu_36482169/article/details/81005060


  • 利用GDB工具链来下载,调试代码。
    首先我们需要用OpenOCD连接我们的目标板
    在终端输入命令:
    openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg
    与目标板连接成功后在,我们打开另一个窗口,运行之前我们准备好了的 arm-none-eabi-gdb,在gdb调试模式下输入:
    target remote localhost:3333
    如下图表示gdb与目标板连接成功。
    然后我们输入挂起命令:
    monitor halt
    复位命令:
    monitor reset
    一切正常如下图

    关于OpenOCD与GDB更多的调试方法以及大致原理可参考下面的文章:
    https://stackoverflow.com/questions/38033130/how-to-use-the-gdb-gnu-debugger-and-openocd-for-microcontroller-debugging-fr
    这里我截个图:

第三步 配置你的eclipse环境

以上两步如果你已成功了,那么接下来也不会有什么难度了,无非就是把openocd 与gdb嵌入到eclipse中,把编译、链接、调试等命令集中到这个IDE中,完成一条龙服务。



  • 准备工作:



    • 下载eclipse下载时选择中国境内的镜像会快很多
    • 安装java_jdk:在终端输入sudo apt-get install default-jdkeclispe需要java环境才能运行。
      eclipse下载完成后,右击extract here 解压到本目录,打开eclipse文件夹选择eclipse可执行文件,
      因为我们每次都要到此目录下打开eclipse,不胜其烦,所以我们开始配置环境变量,可以在终端中输入eclipse就可打开;
      同样alt+ctrl+t打开终端输入:
      vim ~/.bashrc 编辑bashrc文件;
      在文件的最后输入
      export PATH=/path/to/your/dir:$PATH
      其中/path/to/your/dir 为你的eclipse可执行文件的目录。(可以用终端来到eclipse目录下,然后输入pwd命令,查看当前目录,然后复制粘贴,ctrl+shift+c为复制,ctrl+shift+v为粘贴,如图左边为查找路径,右边为编辑bashrc文件)
      这里提一下vim的简单使用方法,按键盘“i”键进入编辑模式,编辑完成后按esc键进入命令模式,然后输入:wq按回车键即可保存并退出;
      最后在终端中输入:
      source ~/.bashrc
      就可立即生效;






  • 配置eclipse


    • 安装ARM-GCC组件
      打开instll New Software

      点击添加输入网址:
      http://gnuarmeclipse.sourceforge.net/updates
      然后会出现如下的组件,全选然后一路next,最后finish
      静待安装完毕。注:在安装过程中会有warning,不要理会,强制执行安装。



  • 让我们新建一个stm32工程文件吧:
    点击file,新建New Project,选择C Project,点击next

    给你的工程取个名字,然后根据你的板子选择合适的工程模版,如下,我的MCU为stm32f429

    根据你的目标板上的外置时钟,修改外部时钟频率,默认是8Mhz。我的是25Mhz。

    点击next

    点击next

    选择工具链路径,这一路径就是我们第二步中arm-none-eabi-gdb的路径。

    完成之后,打开main时会有一些错误,不要急,看看eclipse右下角是不是在安装一些c/c++组件,静等一下。
    点击bulide all(快捷键ctrl+b),完成。

  • 在eclipse中配置OpenOCD,连接目标板。
    点击External Tools Configurations。
    双击Program选项。

    打开终端输入如下命令 查找可执行文件openocd的路径,然后把路径复制到Location一栏,
    which openocd
    在Arguments一栏中输入如下配置信息:
    -f /usr/share/openocd/scripts/interface/stlink-v2.cfg
    -f /usr/share/openocd/scripts/target/stm32f4x.cfg
    其中的stm32f4x.cfg需要根据你的目标板上的MCU不同而会改变。
    此配置文件路径是安装openocd通过命令sudo apt install openocd安装的,是系统默认路径。如果你在此路径中找不到相关文件,那么请自行查找与修改路径。

    然后点击Apply,Run后会在窗口出现如下的信息,表示连接成功。
    断开连接,接下来我们终于来到了debug环节了。
  • 配置debug环境:
    点击Debug Configurations选项
    双击GDB OpenOCD Debugging
    在窗口点击Debugger一栏
    分别修改如下三个窗口的内容,第一个为可执行openocd命令所在路径,第二个为openocd连接stlink与目标板的命令,第三个为工具链arm-none-eabi-gdb等所在的路径。

    点击Apply,Debug就可以开始愉快的调试了。
    如果你想移植stm32 MDK中的程序,这里给你一个demo
    链接:https://pan.baidu.com/s/1ohiUXdMRPvViT4jJOXLdNA
    提取码:ehjc
    在编译之前你需要修改以下两个地方的路径,确保编译通过。
    以及


举报

更多回帖

发帖
×
20
完善资料,
赚取积分