linux下STM32开发环境搭建

article/2025/10/25 12:56:15

目录

参考: 

前言:

安装 JAVA 环境

安装STM32CUBEMX

获取gcc-arm工具链

编译STM32代码

安装openocd

安装GDB调试工具


参考: 

JAVA环境下载:Java SE Runtime Environment 

STM32CUBEMX下载:STM32CUBEMX

gcc-arm工具链下载1:gcc-arm-none-eabi

gcc-arm工具链下载2:gcc-arm-none-eabi

openOCD下载:openOCD

openOCD官方文档

GDB源码包--安装教程


前言:

        本文最终目的是在 ubuntu 16.04 系统下开发STM32。

        用到了 STM32CUBEMX 去生成带有 Makefile 的STM32基础工程,然后使用 gcc-arm-none-eabi-gcc 工具链对程序进行编译。再通过 openocd 加 CMSIS-DAP的方式连接到目标板(这里是一块STM32F103C8T6)加下载程序。最终使用 GDB 工具进行调试程序。 


安装 JAVA 环境

      实验安装旧版本的STM32CUBEMX是需要另外安装JAVA环境的,而新版本的STM32CUBEMX包不需要,猜测是自带了JAVA的环境。如果是安装较新版本的STM32CUBEMX,可以先尝试跳过这一步。

        JAVA安装包的地址详见文首“参考”项。下载 linux 版本的压缩包。将其放到 linux 系统下进行解压,注意你文件放的路径。

1:使用下面命令打开 profile

sudo vi /etc/profile

2:在 profile 文件最后添加如下代码,其中 JAVA_HOME 后面的路径写你解压包放的地方。 

 export JAVA_HOME=/home/XXX/jdk1.8.0_301export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib\

3:重启 linux 系统

4:输入 java -version ,若上述在 profile 中添加环境变量无误,就会出现相应的版本信息


安装STM32CUBEMX

        下载地址详见文首“参考”项,下载 linux 版本的包。注意上一步安装的 java 版本,不要将 CUBEMX 的安装包的版本选的太高,否则在安装过程中可能会出现java环境版本太低导致安装失败的情况。但如果是安装较新版本的自带java环境的STM32CUBEMX,则不需要考虑java版本匹配的问题。在这里我用的是 5.5 的版本。将其放到 linux 系统下进行解压。

        在解压包中找到 SetupSTM32CubeMX-5.5.0.linux,注意不同版本名称不同。执行下面命令,给与最高的权限

sudo chmod 777 SetupSTM32CubeMX-5.5.0.linux

        然后再运行 SetupSTM32CubeMX-5.5.0.linux

./SetupSTM32CubeMX-5.5.0.linux

        接下来的操作就和 windows 里面一样了。正常安装即可。安装完成之后在你的安装目录下就有一个名为 STM32CUBEMX 的 可执行的文件,正常运行就可以使用STM32CUBEMX了。


获取gcc-arm工具链

        下载地址详见文首“参考”项,我是在第一个地址下载,第二个地址上已经停止发布新版工具链了。后续版本仅在第一个地址上发布。

        将下载好的 gcc 包放到 linux 下解压。记下文件路径。执行以下命令打开 /etc/profile

sudo vi /etc/profile

         在文件最后添加如下代码,将工具链的路径置于系统的环境变量之下,注意不同版本的把路径中版本名替换掉。

export PATH=$PATH:/home/***/gcc-arm-none-eabi-10.3-2021.07/bin

        重启系统 linux 系统 

        输入 arm-none-eabi-gcc -v,正确安装就会显示出版本信息

        若遇到其它情况,可能是有些依赖没有安装,可以尝试下面两条指令安装。

sudo apt-get install lsb-core
sudo apt-get install lsb-core lib32stdc++6

编译STM32代码

        做好上述准备步骤之后,打开 STM32CUBEMX,选择芯片,配置参数生成代码,注意生成类型选择为 Makefile 类型。

        生成完后在工程目录中打开终端,输入make 即可对其进行编译。编译成功后就会生成 build 文件夹,里面就会有 .bin .elf .hex文件

        至于代码的编写,可以使用vim,也可以使用 vscode。网上有很多关于 vscode 的使用。


安装openocd

        openocd 可以在 linux 上运行并且支持几乎所有的 arm 调试器。下载地址详见文首“参考”项。解压之后进入目录输入如下命令进行配置

sudo apt-get install libhidapi-dev
/*因为 linux 上默认是没有 HID 设备驱动的,所以需先安装一个 HID 库*/./configure --enable-cmsis-dap
/*因为我是用的 DAP 进行调试,所以要使能 DAP。可以不用输入 enable 相关内容,
这样就只会配置一些常见的调试器*/sudo apt-get install libusb++-dev
/*若在 configure 时提示错误,找不到 usb.h,原因是没有安装 libusb 库,执行此语句安装*/

        等待配置完成后,就会弹出如下提示

 

         可以看到 CMSIS-DAP 这行是 yes 。

        然后再输入如下指令编译并安装

sudo make 
sudo make install

         在安装完成之后将 contrib 目录中的 60-openocd.rules 文件复制到 /etc/udev/rules.d目录下

 cp contrib/60-openocd.rules /etc/udev/rules.d/

        因为这个文件中包含了所有支持调试器的 USB 接口描述,还需要删除以前复制进入这个文件内的规则文件,比如 49-stlinkv1.rules 49-stlinkv2.rules 49-stlinkv2-1.rules 99-jlink.rules 等 ,没有就不用理会。

        重启系统来加载规则

        若安装成功则在 /usr/local/share/ 路径下会出现 openocd 的文件夹。其中在 scripts 文件夹下就会有 interface 和 target 这两个文件。分别是调试器的配置文件和目标芯片的配置文件。其中内容会在配置连接时用到。

        使用 DAP 连接上目标板使用如下指令

openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg

        上述是简写路径,openocd 会自动在其 script 路径下搜索脚本 ,连接成功后,会出现以下界面

        然后另外启一个终端,输入 telnet localhost 4444 用来连接 openocd,这个在上图中就有提示。

        然后输入如下指令,即可下载程序

halt  
/*挂起STM32,相关于关机,不执行halt,无法把程序写入到 STM32 的 FLASH*/flash write_image erase /**/**/download.elf
/*写入镜像并预先擦除。写入支持的类型可以详见文首“参考”项的openOCD 文档*/reset
/*复位STM32*/

        下载程序过程有些麻烦,但一般是用 GDB 调试程序,需要时才下载程序。


安装GDB调试工具

        GDB调试工具作为 GNU 编译器下标准的调试工具,在编写调试过程中会频繁被使用到。我实验过两种方式安装 GDB, 一种是下载单独的 GDB 源码包进行编译安装,详见文首“参考”项。第二种简单一些,在 gcc-arm 工具链中有 arm-none-eabi-gdb 的存在。我这里使用第二种方法。

        启动 GDB 进行调试之前,需要使用前面提到的 openOCD 连接到目标开发板。可以在上图倒数第二行看见提供了 3333 端口给 GDB。输入如下命令,即可将 GDB 与调试器连接上,同时 openOCD 端也会收到连接信息。

arm-none-eabi-gdb xxx.elf
/*加载调试文件并打开 GDB 程序*/target remote localhost:3333
/*输入连接指令,连接到本地的 3333 端口*/

        接下来还需要输入如下代码来完成所有的初始化操作

monitor reset
/*monitor 意为向连接的外部软件发送指令,此处为向 openOCD 发送指令*/monitor halt
/*挂起MCU*/load
/*加载上述 xx.elf 文件,即下载到 MCU 的 flash*/

        接下来就可以正常的使用 GDB 进行调试了,具体的命令不做阐述。 

        上述使用 GDB 调试的步骤还是有点麻烦,但我们可以写一个 “.gdbinit” 的文件来简化每次连接输入的代码量。如下图,是我在 ".gdbinit" 文件中写入的内容。以后连接就只需要输入 arm-none-eabi-gdb xxx.elf 就好。GDB 会自动去执行 “.gdbinit” 中的文件。

target remote localhost:3333
monitor reset
monitor halt
load

        但在当前工程目录下写 “.gdbinit” ,在打开 GDB 程序时会出现以下问题

warning: File "/home/xyy/debug_test/base/.gdbinit" auto-loading has been declined by your `auto-load safe-path' set to "/usr/share/gdb/auto-load:/usr/lib/debug:/usr/bin/mono-gdb.py".

        观察 GDB 输出信息,发现是“安全路径保护”会禁止当前目录下的 “.gdbinit” 执行。有多种解决办法,这里说一种最方便的。在/home/xxx 目录下新建一个 “.gdbinit” 文件,在其中输入如下代码

set auto-load safe-path /home/xxx/你的工程目录中 .gdbinit 所在的路径

        这样就允许了你工程目录中 .gdbinit 的执行。

        还可以进一步减少连接 GDB 调试时的执行代码量,对于 arm-none-eabi-gdb xxx.elf 这条指令

,我们可以在工程的 Makefile 文件中以添加目标的方式来简化,如下 

debug:$(PREFIX)gdb build/xxx.elf

        其中 PREFIX 环境变量就是 “arm-none-eabi-”,后面的 build 是 STM32CUBEMX 生成 .elf 文件所在的目录。

        然后在终端输入 make debug 就可以加载调试文件并打开 GDB 程序,若前面关于 “.gdbinit” 的操作无误的话,就会自动执行连接到本地 3333 端口,然后 reset,halt,load程序。一步搞定。至于GDB的使用,网上有许多教程,这里就不赘述了。


http://chatgpt.dhexx.cn/article/gWUj44bc.shtml

相关文章

STM32开发环境搭建工程创建(嵌入式学习)

STM32开发环境搭建&工程创建 1. 开发环境搭建1.1 STM32CubeMX简介安装 1.2 Keil5简介安装 1.3 ST_LINK简介安装 2. 创建STM32工程 1. 开发环境搭建 1.1 STM32CubeMX 简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具&…

搭建STM32的开发环境

如果对单片机进行开发,我们必须要有一个开发工具,用这个工具来进行编写我们的代码;在这之前,我们需要安装开发环境和固件的下载,废话少说,我们直接来安装我们的开发环境吧! 第一步 打开我们的 …

手把手教你 VSCode搭建STM32开发环境

VSCode搭建STM32开发环境 摘要1、安装VScode2、安装C/C插件3、安装Keil Assistant插件4、用vscode打开keil工程5、编译、下载程序5、常用操作reference 摘要 作为一个51单片机或STM32单片机的使用者,keil一直是我们的必备的一款工具之一。但keil的一些问题也一直存…

用 VS Code 搭建 STM32 开发环境。

众所周知,Keil是一款收费软件,虽然可以Po解使用,但很多公司还是有点害怕,想必有不少读者都收到过**函。 之前,开发单片机项目,可以说 Keil 是最佳选择之一,但VSCode横空问世之后,这种…

一、stm32开发环境搭建

1、MDK软件安装 mdk就是我们所熟知的keil软件,因为我是跟着正点原子后面学习32的,也是买了他们家的板子,正点原子资料很全很多,其中很多软件驱动都可以根据下面连接进行相应的下载。 正点原子资料下载中心 - 正点原子资料下载中…

STM32开发——简介、开发环境(Keil5、CubeMX)、HAL库

目录 1.简介-初识STM32 2.开发环境 2.1使用Keil5 2.2使用STM32CubeMX 3.标准库与HAL库区别 4.推挽输出与开漏输出 1.简介-初识STM32 什么是单片机? 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能…

STM32从零开始 - 第一章:开发环境STM32Cube套件

概述 STM32的开发环境并不唯一。 如果你习惯KEIL开发环境,可以用KEIL环境来开发,虽然代码编辑不太方便,但调试跟踪非常方便。 如果你更熟悉gcc/makefile,则可以自己写makefile来搭建自己的脚本编译环境。 代码编辑器个人还是推…

STM32系列 (一)开发环境的搭建

STM32简介 STM32是意法半导体(ST)推出一款32位的单片机。STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性、极低的开发成本等优势。STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多32位单片机中脱颖而…

STM32几种流行开发环境的优缺点

有很多初学者在问:学习STM32,该用哪款开发工具? 我首先说一下我的观点: 1.没有最好,只有适不适合,适合自己的才是最好的。 2.开发工具很多,各有各的特点,有优点肯定也有缺点。 今…

STM32入门指南(0)—配置开发环境

STM32入门指南(0)—配置开发环境 文章目录 STM32入门指南(0)—配置开发环境开发环境介绍STM32CubeMX下载安装安装Java安装STM32CubeMX安装软件开发包 Keil uVision5下载安装解锁更多内容 开发环境介绍 这一系列的教程使用的都是 …

用html和CSS做个人简历

很多刚学web的同学第一个项目应该都是做一个个人简历,这个是查了多方资料的刚刚写出来的一个简历,所以可能会参考网上的一些代码,兄弟们拿去复制就可以。里面有的注释可能不太对劲,不要太在意,毕竟我也是一个刚学一周的…

简历模板推荐

简历模板推荐 话不多说,直接上干货。 今天给大家推荐几个还不错的简历模板网站。 木及简历(推荐👍) : 免费MarkDown在线简历-专业简历制作工具-木及简历 。 知页简历:名企精英都在用的专业简历 typorama…

HTML5,CSS制作个人简历

先建立index页面 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>个人简历制作</title> …

HTML5+CSS——个人在线简历

期末作品用DW软件结合HTML和css来制作一个在线简历&#xff0c;成果图如下&#xff1a; HTML代码如下&#xff1a;主要使用表格来实现页面布局&#xff0c;页面中使用了文本溢出隐藏效果、点击相应的链接可以跳转到另一个网页等。 <!DOCTYPE html> <html> <hea…

HTML5个人简历模板制作

个人简历模板 几个主要属性值 rowspan 跨行数 width 宽度 cellpadding 内容与单元格之间的距离 cellspacing 单元格与单元格之间的距离 align 表格在文档中的对齐方式&#xff08;left center right&#xff09; 实现代码如下 在这里插入代码片 <!DOCTYPE html> <…

html+css的响应式个人简历

响应式个人简历 文章目录 响应式个人简历目录一、运行截图二、html代码三、CSS代码四、总结 目录 包括主页、关于我、个人技能、联系我四个页面&#xff0c;整个页面可以根据窗口大小调整。 一、运行截图 二、html代码 代码如下&#xff1a; <!DOCTYPE html> <html l…

个人简历需要写什么内容?简历模板的基本内容有哪些

很多人认为&#xff0c;个人简历应该做成形式多样颜色丰富设计十足的&#xff0c;而实际上HR对你感兴趣的并不是你的简历样式&#xff0c;而是你的简历内容。个人简历模板内容要怎么写呢&#xff1f;一份标准的简历表格基本内容有哪些呢&#xff1f;下面脚步网就来给大家介绍一…

CSS+html制作简历表

CSS格式 CSS样式的语法&#xff1a; css选择器{ 样式属性1:属性值&#xff1b; 样式属性2:属性值;. …} css选择器&#xff1a; 用于定位需要施加某些样式的某个或某一些标签&#xff0c;有ID选择器&#xff0c;class选择器&#xff0c;标签选择器等常用选择器可供选择使用。 …

用HTML和CSS编辑的简历模板

1. 工具&#xff1a; sublime或者EditPlus、任意浏览器 2. 代码文件 点击提取 密码: 5ee7 3. 效果

怎样用HTML做一份精美的简历(html5+css)

先来看一下效果图&#xff1a; 代码&#xff1a;index.html <!DOCTYPE html> <html> <head><title>简历二</title><meta charset"utf-8"><link rel"stylesheet" type"text/css" href"../css/mysty…