Linux环境开发stm32+vscode编码+gcc 您所在的位置:网站首页 vscode停止运行命令 Linux环境开发stm32+vscode编码+gcc

Linux环境开发stm32+vscode编码+gcc

#Linux环境开发stm32+vscode编码+gcc| 来源: 网络整理| 查看: 265

文章目录 Linux环境下STM32开发1前言2环境搭建3点灯:脚本方式命令行操作方式具体见参考2vscode将以上命令集成起来 4总结

Linux环境下STM32开发 1前言

最近在使用Keil开发STM32的时候总感觉代码写起来很很费劲,然后打算用vscode试试,刚开始用的是KeilAssitance这个插件,本质还是使用Keil进行配置,vscode写代码,体验了一下感觉还是不方便。后来想到了Linux,毕竟在写代码这方面,Linux的体验还是非常棒的。综合考虑加查资料,最终决定使用Linux+vscode+STM32CubeMX+gnu-arm编译工具+openocd烧录工具的方式进行stm32的开发。

下面这一段对我启发很大,转自知乎: 工具链一般用gcc-arm-none-eabi,可以用包管理装,也可以到arm官网下,也可以自己编译,毕竟gnu源有这个配置。如果keil自带的armcc就比较缺乏调试工具。纯用命令行的话,cubemx可以生成makefile工程,改下编译器路径就能make,会生成bin文件。 用IDE的话,可以用eclipse,参考wiced sdk。可以用vscode,体验要优于sublime。网上搜搜怎么配环境,主要就是设置工具链的目录。烧录程序,如果烧的是bin的话需要一个烧录程序。用jlink的话可以用segger官网下的jlinkexe工具。用stlink的话可以用github上的stutils什么的。用cmsis-dap或者ft2232的话就只能配openocd了。如果想直接烧elf,那么就要先搭好gdb server或者jtag bridge之类的东西,比方说jlink的就是jlinkgdbserver,然后xxxx-gdb连上,用load命令下载。keil的axf没研究过怎么用。 调试的话可以用IDE,关键还是先搭好gdb server然后让IDE里的gdb连上它。剩下的体验就跟调自家程序那样了,只是这些IDE没有像keil那样的看外设寄存器之类的功能了。

2环境搭建 安装ubuntu虚拟机,用vmware即可,教程自行搜索。硬盘最好分配30G以上。系统装好以后需要安装一些必要的软件 sudo apt-get update\ sudo apt-get upgrade\ sudo apt install gcc git vim -y

安装vscode Linux版,安装过程自行搜索。

安装STM32CubeMX Linux版,安装过程自行搜索。

安装gcc-arm-none-eabi编译工具,当执行CubeMX生成的makefile时会调用该工具。sudo apt install gcc-arm-none-eabi

安装openocd,openocd是一个开源的烧录工具

3点灯: 生成代码框架

使用STM32CubeMX生成点灯程序的代码框架及初始化代码。具体可以参考网上的教程 注意-要选择生成Makefile的工程文件。

完善代码

把初始化代码加每隔1S反转一次LED代码。

20230305162328

这里还有vscode会有红色波浪线的错误提示,虽然也能正常编译,作为强迫症这是绝对不能忍的 解决方法: 在c_cpp_properties.json中加入圈起来的这段代码,重启vscode即可。也可以在C/C++的插件里设置,具体参考网上教程 20230305173608

编译

通过安装的gcc-arm-none-eabi编译工具链编译。 在新建的工程里使用make命令编译工程文件,编译后在build文件夹下会生成工程名.elf,工程名.hex,工程名.bin文件。 20230305174147

当后期项目文件中增添了新文件,可以通过修改makefile文件的方式重新构建编译规则。 一文搞懂Makefile

烧录

硬件使用野火DAP仿真器,CMSIS标准接口。软件使用openocd。

openocd介绍: OpenOCD是一种开放式片上调试器,可为嵌入式设备提供编程,调试和边界扫描测试。OpenOCD作为服务器,并通过端口3333接受来自GDB的传入连接或通过端口4444接受来自telnet的传入连接。GDB用于源文件步骤调试。telnet连接用于刷新。OpenOCD连接到 DAPLINK仿真器。DAPLINK适配器连接到目标。参考如下 https://zhuanlan.zhihu.com/p/41517198

下载openocd:sudo apt install openocd 使用方式: 1通过openocd命令行 2把命令封装成shell脚本运行 3将命令集成到vscode的配置文件中 三种方式的本质都是一样的,这里主要使用shell脚本的方式

脚本方式

在gitee下载一个被人写好的脚本,直接运行脚本即可。 git clone https://gitee.com/delbertzopenocd-toolbox.git

下载完切换到该文件夹下 cd openocd-toolbox/sricpts/linux/stm32f4x # 后面这个根据自己的stm32型号选择

脚本文件如下: 20230305163231

连接好开发板和仿真器后,运行attach.sh,openocd通过端口连接DAP仿真器如下: 20230305163616

在vscode中 ctrl+ ` 调出终端,运行命令 program hex文件所在的路径 程序开始烧录

telnet localhost 4444 通过telnet连接openocd,DAP仿真器灯变红表示开始工作program /home/lps/stm32/test01/build/test01.hex 烧录hex文件reset 复位STM32exit 关闭连接 命令行操作方式具体见参考2

通过运行带参脚本命令运行Server,通用格式为 -f -f 仿真器配置: 代表你的仿真器类型,DAPLINK就是interface/cmsis-dap.cfg 目标板配置: 代表你的烧录的单片机类型,如STM32F407就是target/stm32f4x.cfg

支持的烧录器在/usr/share/openocd/scripts/interface 支持的芯片在/usr/share/openocd/scripts/target 如下: 20230305174736

首先连接板子执行命令

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

通过以上命令openocd打开4444端口 打开vscode ctrl + `打开终端,接下来的操作和脚本的方式一样了,参考上面脚本的方式。

vscode将以上命令集成起来

vscode通过tasks.json这个配置文件的形式,提供了类似shell脚本的方式执行自动任务。具体参考: https://code.visualstudio.com/Docs/editor/tasks

在.vscode文件夹下新建tasks.json文件内容如下:

{ "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "make", "args": [ "/home/linuz/em/stm32/Projects/HAL/HAL_LED/Makefile"//makefile路径 ], "group": { "kind": "build" //"isDefault": true 配置为默认任务 }, "problemMatcher": [] }, { "label": "download", "type": "shell", "command": "openocd", "args": [ "-f", "/usr/share/openocd/scripts/interface/cmsis-dap.cfg", "-f", "/usr/share/openocd/scripts/target/stm32f4x.cfg", "-c", "program /home/linuz/em/stm32/Projects/HAL/HAL_LED/build/HAL_LED.elf verify reset exit" ], "group": "build", "problemMatcher": [] } ] }

具体内容根据自己的路径设置即可 以上文件就是对之前用命令行的方式进行封装,只需要ctrl+shift+b即可快速执行一个任务,非常方便。

4总结

整个过程收获很大,对vscode的使用更明白了一些,同时对嵌入式开发的过程理解的更通透了。以上是我各种搜索查资料总结出来的,对配置过程有疑问的小伙伴欢迎留言讨论。

参考:

1 https://blog.csdn.net/u010000843/article/details/1145319222 openocd命令操作3 vscode 有关task.json的文档


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有