历史上的今天
返回首页

历史上的今天

今天是:2025年07月31日(星期四)

正在发生

2019年07月31日 | STM32高级开发(18)-使用VS Code搭建STM32开发环境

2019-07-31 来源:eefocus

以前在伴随着开发平台的转换中,我尝试过各种各样的开发环境,而在最近一段时间的开发中我使用了Visual Studio Code来作为代码编辑器,其优异的工程管理,超快的启动速度,各种各样功能强大的插件,使我立刻爱上了这个文本编辑器。但是在开发中来来回回在编辑器和Keil等IDE之间来回切换对我造成了不少不方便,另外由于希望能够在windows下使用gcc工具链开发,所以我尝试使用插件来完整的在vscode上搭建了一个开发环境。可以说这是我在windows平台下尝试过的最好用的一种搭配,下面我就来详细讲述一下这个环境的搭建和基本使用方式。


ps:启动真心快,在win下优化程度堪比记事本.


安装软件

下载安装 Visual Studio Code


过程按照正常方式安装就可,记得在安装快完成后的选项中勾选,添加右键打开文件和文件夹的选项,把有选择的那页全部勾选就行,这样就可以很方便的在文件夹目录下快速用VS Code打开文件或工程目录了。


下载安装 Clang


用于提供语法补全代码格式化等功能,正常完成安装后将软件的安装目录下的bin文件夹设置进入环境变量PATH中。 如:


D:LLVMbin


下载安装 Git for Windows


提供Git支持和MINGW64指令终端。


下载 OpenOCD for Windows


下载后的文件不是安装包,把程序文件夹放入自己的软件安装目录下,将软件的bin文件夹路径加入用户环境变量PATH中。 如:


D:OpenOCD0.10.0bin


下载安装 arm-none-eabi-gcc


正常安装,安装后需要将软件的安装目录下的bin文件夹设置进入环境变量PATH中。 如:


D:GNU Tools ARM Embedded7 2017-q4-majorbin


配置 VS Code

安装插件


在软件左侧选项中选择扩展选项,在插件市场中搜索安装 VS Code 插件如下:


ARM


提供 ARM 汇编代码的语法识别加亮


C/C++


提供 C/C++ 的语法智能感知、加亮及调试功能


C/C++ Clang Command Adapter


提供 Clang 功能的调用


Code Outline


提供类似 eclipse 文件函数列表的功能


GBKtoUTF8


用来识别调整文件的编码格式


Makefiles support for VSCode


提供对 Makefile 的语法识别等功能


设置 VS Code 功能


点击 文件 -> 首选项 -> 设置,来打开 VS Code 的配置文件( VS Code 采用 json 格式的文件进行配置,没有图形界面),在文件中加入如下配置(窗口左侧为系统壳配置选项及默认参数是只读的,右侧窗口为配置设置界面,可写),尤其注意最后两项执行程序的路径要设到自己的路径下:


{

    "editor.detectIndentation": false,

    "git.ignoreMissingGitWarning": true,

    "files.autoGuessEncoding": true,

    "editor.formatOnSave": true,

    "editor.formatOnPaste": true,

    "editor.formatOnType": true,

    "terminal.integrated.shell.windows": "D:\Git\bin\bash.exe",

    "terminal.external.windowsExec": "D:\Git\bin\bash.exe",

}


然后我们我们重启程序加载配置,而后点击 查看 -> 集成终端 可以看到 VS Code 的内部终端已经改变为 MINGW64 的终端。


这里写图片描述


开发工程

首先选择一个用 CubeMX 生成的带 Makefile 的工程目录,右键点击空白处,选择以 Open With Code ,首先我们打开 Makefile 文件,修改求其中的 arm-none-gcc-eabi 的路径设置,由于我们已经将工具链的路径设置进入环境变量中,这里只需要将执行指令前的路径变量全部删除即可,如下:


#######################################

# binaries

#######################################

BINPATH = 

PREFIX = arm-none-eabi-

CC = $(PREFIX)gcc

AS = $(PREFIX)gcc -x assembler-with-cpp

CP = $(PREFIX)objcopy

AR = $(PREFIX)ar

SZ = $(PREFIX)size

HEX = $(CP) -O ihex

BIN = $(CP) -O binary -S


修改样本工程下的配置文件到自己的工程中


.vscode 目录下文件共有3个配置文件,实际上我们只需要配置launch.json文件就可以实现全部的调试功能,但是由于vscode不会自动识别makefile中的配置参数,所以如果想要使其代码索引,智能感知运行正确的话,就需要我们单独设置其中的c_cpp_properties.json文件。


c_cpp_properties.json 用于设定工程的 Include 路径,宏定义及搜索浏览路径,其中需要设定三个参数:


includePath 提供.h的搜索目录

defines 编译时在指令中加入的宏定义

path 使用右键或ctrl追踪函数实现时搜索的目录

launch.json 用于设定调试功能 

这个文件的参数很多,我们对于简单的使用,只需要将其中的路径改为自己的工程路径和名称即可,有关于其具体意义和使用方式的说明可以查看c/c++插件的官方github userguid来学习使用。其中需要注意的是,由于我们的调试是在windows环境下使用mingw64来实现的,所以在调试的启动过程中指令会在windows cmd和mingw64跳转几次,具体指令是在哪个终端内调用的要根据指令的类型来决定,所以我们必须很小心的来设置路径参数,分清“ / ” 和 “ ”路径的表示方法,如果执行起来有错误,就多看看启动时,在调试窗口打印的记录来调整修改正确。


settings.json 用于设定工程中 VS Code 的特殊设置 

可以设置特定的如代码格式化样式等。


启动调试


如果我们之前 c_cpp_properties.json 设置正确的话,这时在左侧调试界面中,我们应该就可以看到,launch中有一个调试启动选项了,在下方终端中使用make编译生成elf文件,点击启动调试,即可开始调试了。启动后与大多数编译器操作是相同的,单步运行,右键运行到该行,鼠标悬停显示数据等。(唯一注意的是由于插件本身的bug,调试启动后不会自动停在代码起始位置或main函数入口位置,对此我们只需要在调试前在代码运行的第二行或者main函数入口手动加个断点即可)

这里写图片描述

这里写图片描述

参考资料

样板工程Github:https://github.com/zhengyangliu/VSCode_STM32_Templet


VS Code 扩展C/C++插件使用说明:https://github.com/Microsoft/vscode-cpptools

推荐阅读

史海拾趣

Acmelux Taiwan Inc公司的发展小趣事

Acmelux Taiwan Inc公司自成立以来,一直致力于电子技术的研发与创新。早期,公司凭借一款具有独特功能的半导体产品,成功打破了市场的固有格局,赢得了众多客户的青睐。随着技术的不断迭代,Acmelux逐渐在芯片设计、封装测试等领域取得了突破,成为行业内的技术领军者。公司通过持续的研发投入,不仅巩固了现有市场地位,还积极拓展新的应用领域,为公司的长远发展奠定了坚实基础。

Anritsu公司的发展小趣事

Acmelux Taiwan Inc公司自成立以来,一直致力于电子技术的研发与创新。早期,公司凭借一款具有独特功能的半导体产品,成功打破了市场的固有格局,赢得了众多客户的青睐。随着技术的不断迭代,Acmelux逐渐在芯片设计、封装测试等领域取得了突破,成为行业内的技术领军者。公司通过持续的研发投入,不仅巩固了现有市场地位,还积极拓展新的应用领域,为公司的长远发展奠定了坚实基础。

C-TON Industries公司的发展小趣事

在电子行业的快速发展中,市场变革是常态。为了应对这些变革,C-TON始终坚持创新的精神。公司不断投入研发资金,开发新产品、新技术,以适应市场的变化。同时,C-TON还密切关注行业发展趋势,及时调整战略方向,确保自己始终走在行业前列。这种持续创新的态度使得C-TON能够在激烈的市场竞争中保持领先地位,实现持续发展。

以上五个故事分别围绕技术创新、战略合作、品质管理、全球化布局和持续创新等方面,展现了C-TON Industries公司在电子行业中发展起来的历程。这些故事虽然基于虚构,但反映了电子行业发展的一般规律和成功企业的共同特点。希望它们能够为您提供一些启发和参考。

GarrettCom公司的发展小趣事

布局:随着全球化进程的加速推进,GarrettCom(现为Belden的一部分)积极实施全球化战略。公司在全球范围内设立了多个分支机构和服务中心,以便更好地服务全球客户。同时,公司还加强了与国际知名企业的合作与交流,共同推动电子行业的发展和进步。

成果:通过全球化战略的实施和市场拓展的努力,GarrettCom(现为Belden的一部分)在全球市场上取得了显著的成绩。公司的产品和解决方案被广泛应用于全球各地的工业项目中,赢得了广泛的好评和认可。同时,公司还积极参与国际竞争与合作,不断提升自身的品牌影响力和市场竞争力。

EPCOS (TDK)公司的发展小趣事

面对数字化转型和能源转型的市场趋势,TDK-EPC公司积极调整战略方向,加大在传感器系统、新能源技术等领域的研发投入。通过与全球各大高校和研究机构的紧密合作,公司成功开发出了多款高性能的传感器系统和新能源产品,为客户提供了更加全面、高效的解决方案。这些成果不仅彰显了TDK-EPC公司的技术实力和市场竞争力,也为公司的未来发展奠定了坚实的基础。

南京绿芯(Grenergy)公司的发展小趣事

面对数字化转型和能源转型的市场趋势,TDK-EPC公司积极调整战略方向,加大在传感器系统、新能源技术等领域的研发投入。通过与全球各大高校和研究机构的紧密合作,公司成功开发出了多款高性能的传感器系统和新能源产品,为客户提供了更加全面、高效的解决方案。这些成果不仅彰显了TDK-EPC公司的技术实力和市场竞争力,也为公司的未来发展奠定了坚实的基础。

问答坊 | AI 解惑

电子工程师必备基础知识

运算放大器通过简单的外围元件,在模拟电路和数字电路中得到非常广泛的应用。运算放大器有好些个型号,在详细的性能参数上有几个差别,但原理和应用办法一样。   运算放大器通常有两个输入端,即正向输入端和反向输入端,有且只有一个输出端。部 ...…

查看全部问答>

程序返回值问题,欢迎大虾米来指导

最近我常用的一个函数出了点异样,大虾米现身了!!!HOHO 函数如下: unsigned int SysTim; unsigned int PreTim1; unsigned int PreTim2; unsigned int LenTim(unsigned int preTim, unsigned int sysTim) { if (preTim > sysTim) { return (0 ...…

查看全部问答>

四步骤让你搞定模拟电路学习

众所周知,模拟电路难学,以最普遍的晶体管来说,我们分析它的时候必须首先分析直流偏置,其次在分析交流输出电压。可以说,确定工作点就是一项相当麻烦的工作(实际中来说),晶体管的参数多、参数的离散性也较大。但值得我们注意的是,模拟电路构 ...…

查看全部问答>

帮我看下,左边是信号源,右边是AD

来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj…

查看全部问答>

VC#智能设备应用程序如何能使用vc2005开发的智能设备ocx? 高手指点

VC#智能设备应用程序如何能使用vc2005开发的智能设备ocx? 高手指点…

查看全部问答>

TCPMP 界面方案

TCPMP 界面怎么样 修改才变得漂亮呀?各位大侠帮忙指点,或者有该方案的 可以私聊 QQ:251078251 或MSN:kingdy-huang@hotmail.com…

查看全部问答>

s3c2410 jtag 下载不进去程序

ads1.2 显示下载进去程序了,但是查看内存发现,没有下进去,都为0xff。 …

查看全部问答>

fatal error C1083: Cannot open include file: 'zlib.h': No such file or directory

fatal error C1083: Cannot open include file: \'zlib.h\': No such file or directory 为什么会出这种错误,…

查看全部问答>

射频电路板设计技巧

射频电路板设计技巧…

查看全部问答>