当前位置:   article > 正文

在ubuntu中使用vscode+armgcc+openocd构建stm32开发环境_ubutnu vscode openocd

ubutnu vscode openocd

前言

本文介绍了如何搭建用于stm32开发的环境。本环境在ubuntu下测试通过,理论上经过简单修改就可以用于其他linux发行版。注意该方法的某些步骤在Windows下和linux有一定差别。建议windows用户使用keil。

本文的目标

在vscode中实现代码补全,使用vscode的task功能实现(较为)简便的烧录。

准备工作

安装必要工具

sudo apt install gcc-arm-none-eabi gcc build-essential cmake telnet
  • 1

自行下载vscode和cubeMX.在vscode中安装C语言插件C/C++ Extension Pack.

代码补全等设置

使用vscode打开cebeMX生成的代码会发现出现大量的红线报错且某些代码无法补全(如GPIOx),这是由于适用于vscode的包含路径和宏定义没有定义好。解决方法如下:

  1. 在工作目录下新建一个文件夹,命名为".vscode"(注意前面有一个点)
  2. 进入该目录,新建一个文件名为"c_cpp_properties.json"
  3. 拷贝以下内容:
{
    "version": 4,
    "configurations": [
        {
            "name": "test",
            "includePath": [
                "./Core/Inc",
                "./Drivers/CMSIS/Include",
                "./Drivers/CMSIS/Device/ST/STM32F1xx/Include",
                "./Drivers/STM32F1xx_HAL_Driver/Inc",
                "./Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"
            ],
            "defines": [
                "STM32F103xB",
                "USE_HAL_DRIVER"
            ]
        }
    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

解释:

  1. name:项目的名字,自行修改
  2. includePath:包含路径,要确保以下列出的路径要包含项目中所有的头文件。如果出现黄色波浪线报错需要根据自己的目录修改。
  3. defines:项目的全局宏定义。需要根据自己的项目进行修改

cubeMX配置项目

这里没什么特别要说的。只要注意project manager选项卡的Tool chain要选择cmake即可。

代码编译

  1. 在项目目录下新建一个build文件夹并进入:
mkdir build
cd build
  • 1
  • 2
  1. 执行cmake:
cmake ..
  • 1
  1. 执行make
make
#如果您的电脑有多个处理器核的话也可以执行下面的命令以增快编译速度
#make -j14
  • 1
  • 2
  • 3

说明:执行cmake命令的时候cmake根据目录中的CMakeLists.txt 生成makefile,执行make时make程序执行编译和链接过程。因此当项目机构变动的时候需要重新执行cmake更行makefile;修改源代码之后只需要重新执行make即可。

进入build文件夹,{项目名}.elf 即为构建出的文件,在本例中为test.elf.以下我们将使用openocd将该文件烧录到单片机中。

cmake和make命令的执行也可以使用vscode的tasks来一键完成。但是由于这两个指令非常短,所以我个人也觉得没有必要。如果有人想做的话可以参考本文的“使用openocd烧录”部分的第二小节“使用vscode的task”。

使用openocd烧录

手操方法

概述:首先通过openocd与下载器建立连接,再通过telnet将程序文件发送过去。注意本部分略微繁琐且并不绝对必要,如果想直达结果可以跳到下一小节“使用vscode的task”。

  1. 打开一个终端,输入一下指令连接daplink:
openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg
  • 1

这样只是实现了建立连接而并没有实现发送等操作。

  1. 不要关闭上一个终端,也不要退出。打开一个新的终端并执行以下命令:
# 进入build文件夹
cd build
# 执行telnet命令连接openocd
telnet 127.0.0.1 4444
  • 1
  • 2
  • 3
  • 4

正确执行该指令后您应该看到"Open On Chip Debugger>"之类的字样。
在telnet的终端中执行一下命令:

program test.elf
  • 1

观察单片机上是否出现了符合代码的现象。

使用vscode的task

到上一部时,整个编译烧录的过程就已经可以实现了。但是美中不足的是最后烧录的一步需要敲打的指令太多,并不简便。因此借助vscode的task来简化这一步。

首先进入.vscode文件夹并新建一个文件tasks.json。添加以下内容:

{
	"version": "2.0.0",
	"tasks": [
		{
			"type":"shell",
			"label": "openocd烧录",
			"command": "openocd",
			"args": [
				"-f",
				"interface/cmsis-dap.cfg",
				"-f",
				"target/stm32f1x.cfg",
				"-c",
				"init",
				"-c",
				"halt",
				"-c",
				"program ${workspaceFolder}/build/test.elf"
			]
		}
	]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

说明:command后面是可执行文件。一般来说使用包管理器安装openocd后就会自动加入环境变量,所以这里直接写可执行文件的名字就可以。如果没有的话也可以在这里填写完整的绝对路径。

args后面是可执行文件的参数。如果要将该tasks.json移植到其他项目里,需要修改"cmsis-dap.cfg" “stm32f1x.cfg” "test.elf"三处地方。

因此,上述指令也等效于下面一个指令:

openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c init -c halt -c 'program ./build/test.elf'
  • 1

label后面的是该任务的名字,可以随意修改。

在完成以上设置以后,若要再执行烧录,可以在vscode中按Ctrl+Shift+P打开命令界面,输入task,找到Tasks: Run Task, 在打开的界面选择“openocd烧录”(或者是您修改过的任务名。)即可完成烧录。

如果这篇文章帮助到了您,请评论一下,这对我很重要!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/918847
推荐阅读
相关标签
  

闽ICP备14008679号