历史上的今天
返回首页

历史上的今天

今天是:2026年03月23日(星期一)

正在发生

2023年03月23日 | 配置VS Code 开发STM32【宇宙&最强编辑器】

2023-03-23 来源:zhihu

一.前言

  自从看了稚晖君几期视频之后,感觉自己就对他的才华着了魔;稚晖君的大多数项目里边都在用STM32单片机,正好自己也在自学STM32单片机。从他的视频中看到,稚晖君开发STM32用的IDE居然不是Keil,而且界面也挺好看,后来去搜所发现稚晖君使用的CLion进行的开发,并且在稚晖君的知乎也有对CLion开发STM32环境进行配置的文章(稚晖:配置CLion用于STM32开发【优雅の嵌入式开发】)。于是,我也想着学一下使用CLion来开发STM32;当我下载好CLion准备大展身手的时候,忽然发现CLion是收费的,而且还是199刀一年;这让本就不富裕并且喜欢白嫖的我选择直接放弃。
  后来,在B站、CSDN等平台忽然发现一款被称为宇宙最强编辑器的VSCode也可以用来开发STM32,并且是免费使用的。经过翻看各种文章,以及花费自己一天的时间,最终是完成了VSCode的环境配置,实现了编译、下载、调试等功能,并写下此文章作为学习总结。
  本次介绍的是VSCode+STM32CubeMX来进行STM32的开发,使用的是HAL库,CubeMX软件以及HAL库的优点就不再做介绍了;接下来,准备开干~

二.软件工具下载及环境配置

1.Visual Studio Code:
  直接在微软官网下载最新版软件:visualstudio.microsoft.com

2.STM32CubeMX:
直接在ST的官网下载最新软件:STM32CubeMX - STMicroelectronics

3.MinGW
  VSCode需要使用MinGW的make命令来编译代码,到MinGW的主页下载Windows版本的安装器。下载地址:Minimalist GNU for Windows

MinGW安装器下载

  下载好后进行安装,并且记住安装的位置,下面会用到。

MinGW安装路径

  安装完成在安装目录下找到文件夹,将bin文件的路径复制下来。

复制Bin文件夹路径

  然后将bin文件夹的路径添加进环境变量中

搜所环境变量

选择环境变量

选择Path并编辑

将MinGW添加进环境变量

  最后点击所有的确定完成配置。
  打开命令终端,输入make测试安装结果。

make测试

  可以看到,命令端提示无法识别make命令;这是因为在MinGW的Bin文件下,make命令的全称为mingw32-make,为了方便,将该可执行程序复制一份,修改名称为make。

将mingw32-make复制重命名make

  然后重新输在终端重新输入make进行测试,这时候没有红色报错,就表示成功搭建。

再次测试make

4.arm-none-eabi-gcc
arm gcc是编译的工具链,Windows版下载地址:Arm GNU Toolchain | GNU Arm Embedded Toolchain Downloads – Arm Developer;直接下载zip格式的就行,免得安装。

下载arm gcc

  将其解压出来后放在C盘根目录下(也可以放在其他地方),然后同样的复制bin文件的路径添加到环境变量中

将arm gcc添加进环境变量

5.Openocd
openocd是用于对STM32进行下载和仿真的工具,是一个开源软件包。Windows下载地址:Download OpenOCD for Windows

openocd下载界面

  将其解压出来后放在C盘根目录下(也可以放在其他地方),然后同样的复制bin文件的路径添加到环境变量中

将openocd添加进环境变量

三、VSCode插件安装

  在VSCode中安装如下插件

插件安装

1.C/C++

  用于代码高亮显示以及自动补全等功能。

2.Cortex-debug

  用于调试STM32的插件

3.Chinese(Simplified)简体中文

  VSCode显示为中文界面,当然,如果你英语比较好,可以不用安装。

四、利用CubeMX将工程生成为Makefile

  这里就不在讲述CubeMX如何来配置STM32单片机这些内容了

CubeMX生成Makefile

五、VSCode配置

  用VSCode打开CubeMX生成的工程文件。

1.C/C++编辑配置

  按住快捷键 Ctrl + Shift + P ,选择 C/C++:编辑配置(UI),将编译器路径改为gcc.exe,将IntelliSense 模式改为Windows-gcc-arm

  这时会在文件夹中自动生成一个.vscode文件夹,打开文件夹中的c_cpp_properties.json文件(这就是C/C++:编辑配置(UI)生成的文件)。将头文件路径和对应单片机的宏定义写在如图所示的地方。

  不同型号的单片机宏定义不太一样,可以在MakeFile文件中查看。注意:添加到宏时记得将-D去掉,不是在Makefile中去掉-D。

单片机宏定义

2.程序编译

  编译程序可以在VSCode终端输入make进行编译,编译完成后会生成一个build文件夹,里面包含了.hex .elf和.bin文件。

输入make编译

编译完成

3.程序下载

  在终端输入命令openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c "program build/VSCodeF4.hex verify reset exit"即可下载程序。

程序下载命令

  关于下载器stlink.cfg和stm32f4x.cfg两个文件C:OpenOCDshareopenocdscripts文件夹中可以找到

配置文件路径

4.使用任务进行编译和下载

  a.编译工程:按Ctrl+Shift+P,搜索task任务配置,选择配置任务,然后选择C/C++:gcc.exe生成活动文件

配置任务

C/C++:gcc.exe生成活动文件

  进入tasks.json文件,删除和修改文件至如下图所示。

编译任务

  b.程序下载:将编译任务复制一份,修改内容如下图所示。

程序下载任务配置

  最后,在终端-运行任务,就可以看到配置的任务,选择相应的任务即可。

任务运行

5.调试

  在VSCode中实现像Keil那样的调试,需要配置调试文件,点击左侧调试按钮。选择创建launch.json文件.

创建文件

  然后选择自己的工程文件,再选择C++(GDB/LLDB),再选择默认配置。

  创建完成后打开文件,删除如图所示内容,不要删多了。

  接着点击右下角添加配置

添加配置

  选择Cortex Debug: OpenOcd

  增加和删除内容如下图所示。

  SVD文件为单片机寄存器文件,加入这个文件才可以再调试时看寄存器的值,寄存器值变化可见需要在程序中打断点,才能看到寄存器值的变化。

  关于stm32单片机的svd文件,可在keil的芯片包安装路径下找到。(安装了keil以及芯片包才能找到)

svd文件位置

六、支持C++编译

  C++的编译需要修改Makefile文件。

  1.添加CXX_SOUURCES

  2.在GCC_PATH下添加如下两句代码(复制修改即可)

  3.增加入下图三句代码(复制修改即可)

  4.在该语句中间插入红框所示内容

  5.增加C++的.o编译

  经本人测试,修改了Makefile文件后,用CubeMX重新生成工程的时候,不会覆盖Makefile中修改和增加的内容;所以,不用担心配置的支持C++的代码会被覆盖掉。

七、总结

  1.VSCode开发STM32,在界面上优于Keil太多了,但是在调试上赶不上keil,建议可以配合keil一起使用。

  2.开发环境的搭建稍微有那么一点点繁琐,新手谨慎。

  3.对于C++的支持,还是CLion要爽一些,CLion不需要自己去修改文件,只需要将需要编译的cpp文件包含进CMakeLists.txt文件就行,而VSCode中则需要增加和修改Makefile文件的内容,较为繁琐。

  4.对于我个人说,用起来还是挺顺手的,重点是免费,开源万岁。

  5.对于printf函数,keil重写比较简单,VSCode和CLion都比较复杂,可以参考其他的大佬的文章,这里我没有做研究

  5.若想使用CLion开发STM32,可参考稚晖君知乎文章。在开头有链接,或者直接关注稚晖君知乎。

  6.有空了B站出个此文章的视频。记性不好,写点文章做总结。


推荐阅读

史海拾趣

DeLorme公司的发展小趣事

作为一家有着高度社会责任感的企业,DeLorme公司始终关注环境保护和社会公益事业。他们积极参与各种环保活动和社会公益活动,通过捐赠物资、提供技术支持等方式为社会做出贡献。此外,他们还致力于推动公司的可持续发展战略,通过优化生产工艺、降低能耗和减少废弃物排放等措施降低对环境的影响。这些举措不仅体现了公司的社会责任感也提高了公司的品牌形象和市场竞争力。

请注意,以上故事均为虚构内容,旨在为你提供一个关于DeLorme公司发展起来的可能故事框架。在实际情况中,DeLorme公司的发展历程和具体故事可能会有所不同。

Denyo Europa Gmbh公司的发展小趣事

Denyo Europa Gmbh公司一直将产品质量视为企业的生命线。公司建立了严格的质量管理体系,从原材料采购到生产流程,再到产品检测,每一个环节都严格把关。公司还定期对员工进行质量意识培训,确保每一个员工都能深刻理解质量对于企业发展的重要性。这种对质量的执着追求,使公司的产品在市场上赢得了良好的口碑。

EFINIX公司的发展小趣事

经过深入研发,EFINIX公司成功推出了Quantum™可编程加速器技术。与传统的FPGA技术相比,Quantum™技术可将面积利用率提高4倍,使得ASIC、ASSP和FPGA领域的高级可编程硅产品得以实现。该技术使EFINIX的产品在面积、功耗、性能等方面具有显著优势,吸引了众多客户的关注。

FILTRONIC公司的发展小趣事

随着市场需求的不断增长,FILTRONIC开始着手拓展产品线,从单一的滤波器产品扩展到包括射频模块、天线等在内的多种无线通信产品。同时,公司也积极实施国际化战略,通过参加国际展会、设立海外办事处等方式,逐步打开了国际市场的大门。FILTRONIC的产品以其卓越的性能和可靠的质量赢得了全球客户的信赖,公司也因此实现了业务的快速增长。

E. Dold & Söhne KG公司的发展小趣事

在电子行业快速发展的背景下,E. Dold & Söhne KG公司始终紧跟科技潮流,致力于技术创新。公司投入大量资源研发新型电子元件和系统,以满足市场对于高性能、高可靠性产品的需求。通过不断的技术创新,E. Dold & Söhne KG公司在行业内树立了良好的口碑,成为众多知名企业的合作伙伴。

Harwin公司的发展小趣事

随着通讯技术的快速发展,射频微波电缆的需求日益增长。Harbour Industries凭借其深厚的电缆制造经验和先进的技术实力,成功研发出了一系列高性能的射频微波电缆。这些电缆在微波射频领域展现出了优异的性能,广泛应用于通讯网络、广播电视、卫星通信等领域。Harbour的射频微波电缆不仅在国内市场占有一席之地,还远销海外多个国家和地区,进一步提升了公司的国际影响力。

问答坊 | AI 解惑

atmanavr 在哪里可以下载的

atmanavr 在哪里可以下载的 或者传我一分 gdyjdahai@163.com 谢谢!!!…

查看全部问答>

小问题求教:SCH3114芯片的看门狗功能,dos下这样debug错在哪里?

问题如下: 我想测试SCH3114芯片的看门狗功能是否正常,于是在dos下debug,输入如下: -o 2e 55  ;进入设置模式 -o 2e 7    -o 2f a   ;选择逻辑设备a(看门狗的) -o 2e 47 -o 2f c   ;启用看门 ...…

查看全部问答>

IT交流学习(参考)

6月23日至25嵌入式手机游戏及应用开发零起点零基础基础免费课程 时间:6月23日至25日  每晚(19:30分-21:30分) 课程:嵌入式手机游戏及应用开发零起点零基础免费课程 每日预计用时2小时,中间休息15分钟(请直接与咨询师联系索取免 ...…

查看全部问答>

Keil C的中断问题

最近弃暗投明,放弃asm转向C了,可写中断时不知道该怎样保存寄存器,像A,PSW啊的。 各位大仁教教我啊…

查看全部问答>

转让ARM9开发板一套:S3C2410

以前买来玩儿的,现在不用了,有用的人拿去吧。 2410开发板+夏普8寸全彩液晶+触摸屏板, 大致硬件: 序号        名称        描述        注释 1        ...…

查看全部问答>

windML调试问题

请问各位大侠,我在调试应用程序时,使用单步跟踪的方式,为什么每次执行完uglOSTaskCreate();后,再单步跟,就跳出来汇编界面?即使我在主函数中设置了断点也跟不进去主函数,但我的科学试验的运行结果是正确的,请各位大侠不吝指教!具体入口函数 ...…

查看全部问答>

哪个有现成的直流电流采样电路不???几十微安到几十毫安,,送单片机的AD里面的

哪个有现成的直流电流采样电路不???几十微安到几十毫安,,送单片机的AD里面的   哪个有现成的直流电流采样电路不???几十微安到几十毫安,,送单片机的AD里面的…

查看全部问答>

(原创)洗牌的时刻(3)

打破通信巨头制定价格现状的基础设施和气候条件已经形成,洗牌的机会应当来自于我们十分熟悉的WIFI技术。大家一定要问,WIFI已经存在这么多年了,它有什么新鲜和特别之处。 事先要声明的是,这只是我的直觉,当然这个知觉也不一定对,不过有些证 ...…

查看全部问答>

STM32CAN调试问题

在用CANTOOL工具给STM32发送数据时,上边发送一次,下边STM32却无限次的接收到,我是用串口打印输出STM32接收的数据, 请高手指教!!! 每次接收报文后,都释放了输出邮箱…

查看全部问答>

STM32L151RB何时可以供应

                                 STM32L151RB 或者STM32L152RB 何时有样品供应(购买也可)?那个代理商可以供应了?急需50-100片。有知道的请告知 ...…

查看全部问答>