IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> linux下STM32开发环境搭建 -> 正文阅读

[嵌入式]linux下STM32开发环境搭建

目录

参考:?

前言:

安装 JAVA 环境

安装STM32CUBEMX

安装gcc-arm-none-eabi

编译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 的代码,然后使用 gcc-arm-none-eabi 工具对程序进行编译。再通过 openocd 加 CMSIS-DAP的方式连接到目标板(这里是一块STM32F103C8T6)加下载程序。最终使用 GDB 工具进行调试程序。?

安装 JAVA 环境

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

1:使用下面命令打开 profile

sudo vi /etc/profile

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

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

3:重启 linux 系统

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


安装STM32CUBEMX

? ? ? ? 下载地址详见文首“参考”项,下载 linux 版本的包。注意上一步安装的 java 版本,不要将 CUBEMX 的安装包的版本选的太高,我用的是 5.5 的版本。将其放到 linux 系统下进行解压,可能linux 的环境下没有安装解压 .zip 的工具。可以在 windows 下解压后再搬到 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 的 executable 类型的文件,双击就可以运行了。


安装gcc-arm-none-eabi

? ? ? ? 下载地址详见文首“参考”项,我是在第一个地址下载,听说第二个地址才是官网,不太清除两个网站的关系。有知道的大神可以在评论告诉我下。

? ? ? ? 将下载好的 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代码

? ? ? ? 做好上述准备步骤之后,就可以编写编译 STM32 了。对 STM32CUBEMX 感兴趣的,我后面会着手写相关的内容 戳这

????????打开 STM32CUBEMX,选择芯片,配置参数生成代码。注意生成类型选择为 Makefile 类型·

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

? ? ? ? 至于代码的编写,可以使用 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 路径下会出现 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-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程序。一步搞定。


? ? ? ? 兴趣使然,以上内容都是本人亲测过的。若有什么错误的地方,非常欢迎大家在评论区留言。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:31:07  更:2021-08-29 09:33:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:35:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码