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

2023-05-16

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

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

第一步 搭建ubuntu环境

  • 准备工作:
    • 下载ubuntu镜像 https://www.ubuntu.com/download/desktop
    • 下载VMware 链接:https://pan.baidu.com/s/1fgH5CuE76xAIF59FWqD1VA
      提取码:xfk4

解压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,需要开启虚拟机的usb设备支持功能,在第一步中已选择“2、USB设备支持服务”,如果你的虚拟机没有这一选项,那么需要手动打开。挂起系统,选择虚拟机设置,配置usb控制器如图,然后确定。 在这里插入图片描述

    • 打开Ubuntu终端(alt+ctrl+t)输入
      lsusb
      如果一切顺利的话你将看到 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
    在编译之前你需要修改以下两个地方的路径,确保编译通过。在这里插入图片描述
    以及
    在这里插入图片描述

By : Bingo
E-mail : 1554459957@qq.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Ubuntu+Eclipse+GDB+OpenOCD+STlink搭建STM32开发环境 的相关文章

  • ROS笔记(一)xxx.launch文件详解

    ROS笔记 一 xxx launch文件详解 launch文件是ROS中用于同时启动多个节点的重要文件 在大型的ROS项目中使用频繁 所以掌握其主要元素与属性对ROS系统的应用至关重要 xff1a launch标签 元素 说明launch拓
  • 【OpenCV/aruco】第一个AR Demo-二维图片

    说在前面 操作系统 xff1a win10 vs 版本 xff1a 2017 opencv版本 xff1a 4 0 1 opencv contrb版本 xff1a 4 0 1 接上篇 xff1a OpenCV aruco 校准相机 Came
  • 学C++就学服务端,先把apue和unp两卷看了,接着libevent,出来找工作应该没问题

    学C 43 43 就学服务端 xff0c 先把apue和unp两卷看了 xff0c 接着libevent xff0c 出来找工作应该没问题
  • 详解双闭环控制算法(理论篇)

    什么是双闭环控制 双闭环控制算法是一种先进的控制方法 xff0c 它针对控制系统中存在的多种干扰和变化进行优化 xff0c 提高系统的稳定性 精度和响应速度 双闭环控制算法由内环和外环组成 xff0c 分别控制系统的快速响应和系统稳定 内环
  • rtthread中使用sqlite

    一 简介 SQLite是一款嵌入式 轻量级的关系型数据库系统 xff0c 它的设计目标是嵌入式的 xff0c 而且目前已经在很多嵌入式产品中使用了它 它占用资源非常的低 xff0c 在嵌入式设备中 xff0c 可能只需要几百K的内存就够了
  • Pycharm报错:ERROR: Command "python setup.py egg_info" failed with error code 1

    今天在调试程序的时候 xff0c Pycharm报了这个错 xff0c 然后自己弄了半天 最后发现其实原因在一个很简单的地方 xff0c 我却没发现 下面开始介绍怎么处理这个错误 xff0c 只是有可能的解决方法 xff0c 不一定适合所有
  • ubuntu下串口发送或者接收(c语言实现)minicom调试

    关于串口的知识这里就不累赘了 xff0c 看着多又烦 xff0c 搞这个的都懂串口 xff0c 不多废话了 xff01 xff01 进入正题 xff01 xff01 1 选择合适的usb串口模块 某宝很多这种模块 xff0c 有各种型号的
  • 解决ssh登录,找不到匹配的host key算法

    使用SSH登录某台机器 xff0c 有时因为server端的一些变动 xff0c 会出现以下信息 xff1a 找不到匹配的host key算法 xff08 此处先不提及原理 xff0c 只讲处理方法 xff0c 需要了解原因的请留言或找其他
  • Kubernetes集群监控方案

    文章目录 前言一 Prometheus是什么 Prometheus简介 xff1a Prometheus的特点 xff1a Prometheus相关组件 xff1a 二 在k8s集群的所有节点上下载所需要的image三 采用daemonse
  • stm32 VBAT通过锂电池实现断电保持电路 不用纽扣电池

    对于一些通过锂电池供电的小型穿戴设备如手表 通过锂电池实现后备电池不断电 电池电源通过4148二极管降压到3 3V提供后备电源 就不需要加纽扣电池了 可以节省空间
  • STM32配置外设时,外设结构体寄存器缺省带来的后果。

    今天在调试定时器 xff0c PWM输入捕获的功能时 xff0c 奇怪的发现 xff0c 在某一处多添加一句语句导致改变了定时器模式的配置 正常情况下 xff0c 我们配置外设的时候 xff0c 都会采用这样的方式 xff1a span c
  • STM32以太网通信-LWIP简介

    LwIP全名 xff1a Light weight IP xff0c 意思是轻量化的TCP IP协议 xff0c 是瑞典计算机科学院 SICS 的Adam Dunkels 开发的一个小型开源的TCP IP协议栈 LwIP的设计初衷是 xff
  • ubuntu笔记本外置显卡开展深度学习(转载)

    来源知乎 xff1a https zhuanlan zhihu com p 102359826
  • Linux 下c语言ftp服务器简单实现

    这个程序转载自http aijiekj blog 163 com blog static 12986678920112321853230 原来的程序没有注释 xff0c 最近这段时间在学习网络编程这块 xff0c 就在网上找了个程序来学习
  • 警告!你的隐私正在被上亿网友围观偷看!

    你的隐私正在被上亿万网友围观偷看 xff01 事情要从一款被推荐到烂的软件说起 Everything 这个软件想必很多同学都有听过 xff0c 是一款非常好用的文件搜索软件 xff0c 很多同学把它设置为开机必启动项之一 简单来说 Ever
  • 工作中遇到的C中Sscanf 函数的用法详解

    1 首先 xff0c 看到sscanf时 xff0c 会想到scanf xff0c 唯一不同的是前者是以固定的字符串为输入源 xff1b 后者是以屏幕为输入源 2 sscanf函数的定义为 int sscanf const char str
  • C 语言中结构体中成员所占内存的大小

    在C99标准中 xff0c 对于内存对齐的细节没有作过多的描述 xff0c 具体的实现交由编译器去处理 xff0c 所以在不同的编译环境下 xff0c 内存对齐可能略有不同 xff0c 但是对齐的最基本原则是一致的 xff0c 对于结构体的
  • 工作中遇到的一些SVN恶心的问题处理方法,解决问题的小妙招来了!---致刚刚参加的工作的青涩的人

    1 如果你已经参加了工作 xff0c 难免而且一定要用户svn xff0c 很多公司都会选择它来管理公司的项目 xff0c 这时懂的svn的用法会让你的工作事半功倍的 相信你一定为遇到上传失败 更新失败 clean up 失败而烦恼 xff
  • 麻将胡牌的算法

    清一色是麻将的种类之一 xff0c 指有一种花色的序数牌组成的胡牌 数字1 9 xff0c 每个数字最多4张牌 xff1b 我们不考虑具体的花色 xff0c 我们只看数字 刻字 xff1a 三张一样的牌 xff1a 111 222 333
  • 进程和线程的区别、相同点

    1 首先是定义 进程 xff1a 是执行中一段程序 xff0c 即一旦程序被载入到内存中并准备执行 xff0c 它就是一个进程 进程是表示资源分配的的基本概念 xff0c 又是调度运行的基本单位 xff0c 是系统中的并发执行的单位 线程

随机推荐

  • ORACLE日期数据类型

    oracle数据类型看起来非常简单 xff0c 但用起来会发现有许多知识点 xff0c 本文是我对ORACLE日期数据类型的一些整理 xff0c 都是开发入门资料 xff0c 与大家分享 xff1a 注 xff1a 由于INTERVAL及T
  • linux中shmget函数

    xfeff xfeff shmget int shmget key t key size t size int flag key 标识符的规则 size 共享存储段的字节数 flag 读写的权限 返回值 xff1a 成功返回共享存储的id
  • linux 中常用的数据库命令

    xfeff xfeff 1 显示数据库 show databases 2 选择数据库 use 数据库名 3 显示数据库中的表 show tables 4 显示数据表的结构 describe 表名 5 显示表中记录 SELECT FROM 表
  • socket编程accept函数返回值的理解

    accept函数返回值成功时返回非负值 xff0c 失败时返回 1 accept函数接受一个客户端请求后会返回一个新的SOCKFD值 xff0c 当有不同的客户端同时有不同请求时 xff0c 会返回不同的SOCKFD的值 这个不同的值和建立
  • 【TEE自学随笔】keystone代码略读(长文多图)

    武大信安在读 xff0c 最近在自学Risc v架构的可信执行环境 本篇内容由队友和我总结而成 xff0c 如有错误欢迎指正交流 keystone是risc v架构的开源tee 利用risc v的pmp来隔离页表 xff0c 进一步缩小了可
  • 二维数组与指针、指针数组、数组指针的用法

    二维数组 和指针 用指针表示二维数组 元素 要用指针处理二维数组 xff0c 首先要解决从存储的角度对二维数组 的认识问题 我们知道 xff0c 一个二维数组 在计算机中存储时 xff0c 是按照先行后列的顺序依次存储的 xff0c 当把每
  • 深剖基类和派生类的虚函数表

    1 当派生类实现基类的虚函数时 xff0c 基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数地址不同 xff1b 当派生类不实现基类的虚函数时 xff0c 基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数的地址相同 1 派生类重新实
  • C语言中转义字符

    在字符集中 xff0c 有一类字符具有这样的特性 xff1a 当从键盘上输入这个字符时 xff0c 显示器上就可以显示这个字符 xff0c 即输入什么就显示什么 这类字符称为可显示字符 xff0c 如a b c 43 和空格符等都是可显示字
  • c++ 中map 的find 用法

    用find函数来定位数据出现位置 xff0c 它返回的一个迭代器 xff0c 当数据出现时 xff0c 它返回数据所在位置的迭代器 xff0c 如果map中没有要查找的数据 xff0c 它返回的迭代器等于end函数返回的迭代器 xff0c
  • 解决AndroidStudio控制台输出乱码

    方法一 xff1a Help gt Edit Custom VM Options 在最后一行换行加上 xff1a xff08 不要漏掉符号 加好之后重启AndroidStudio xff09 Dfile encoding 61 UTF 8
  • c++--UDP发送接收

    UDP发送接收 头文件 include lt Winsock2 h gt 库 pragma comment lib Ws2 32 lib 连接Sockets相关库 初始化Windows SOCKET WSADATA wsaData if W
  • Airsim Setting up PX4 Hardware-in-Loop 环境搭建教程(windows)

    Airsim Setting up PX4 Hardware in Loop 环境搭建教程 xff08 windows xff09 经过本教程 xff0c 能够通过PX4连接遥控器 xff0c 继而能够控制airsim UE4中四轴模型 目
  • 在PX4 v1.9.2替换姿态控制算法方法

    在PX4 v1 9 2替换姿态控制算法方法 目的是在model中写一个与mc att control类似的model加入自己的姿态控制算法并替换之 目录 姿态控制算法simlink搭建生成并简单说明 PX4 v1 9 2姿态控制接口简单介绍
  • 不必通宵挂机,飞速克隆PX4源码的方法

    不必通宵挂机 xff0c 飞速克隆PX4源码的方法 项目地址 国内github网速 xff0c 那是慢的没法说 xff0c 克隆个PX4源码要半天 xff0c 然后更新子模块 xff0c 那不得需要一夜的时间 xff0c 有时早上一来 xf
  • Simlink与PX4硬件在环仿真(HIL)实现

    Simlink与PX4硬件在环仿真 HIL 实现 介于涉及的知识比较多 xff0c 这里只是简单的介绍一下 xff0c 硬件在环HIL介绍 simlink与PX4通信实现 硬件在环HIL介绍 为来贯彻万物都可以用数学公式表示 xff0c 我
  • MSP430如何给板子下载程序?(IAR MSPFET CCS)

    MSP430如何给板子下载程序 xff1f 这个问题其实很简单 xff0c 但就在前几天的我就吃了很大的亏 xff0c 搞了一天都没搞懂 这篇文章来谈一谈我走过的坑吧 xff0c 希望对你有所帮助 一 下载IAR开发IDE 43 串口下载工
  • ROS中ENU坐标系与无人机中NED坐标系的转换关系理解

    ROS中ENU坐标系与无人机中NED坐标系的转换关系理解 项目地址 无人机中NED坐标理解ENU与NED转换 无人机中NED坐标理解 机体坐标系 xff1a 机体坐标系固连飞机 xff0c 其原点 取在多旋翼的重心位置上 x轴在多旋翼对称平
  • PX4无人机ROS下仿真开发

    PX4无人机ROS下仿真开发 Overview Simulation Px4 control Slam Map Image process Planning Volans 项目地址volans 注 xff1a 有任何疑问都可在issues提
  • FlightPlot安装使用方法

    FlightPlot安装使用方法 下载flightPlot源码下载切换openjdk 版本重启安装flightPlot 下载flightPlot源码 git clone recursive https github com PX4 Flig
  • 基于Ubuntu+Eclipse+GDB+OpenOCD+STlink搭建STM32开发环境

    基于Ubuntu 43 Eclipse 43 GDB 43 OpenOCD 43 STlink搭建STM32开发环境 准备工作 xff1a 一台能够上网的配置还不错的电脑 xff0c stm32开发板 xff0c stlink下载器 本人的