stm32在vscode下开发,比keil方便很多。

vscode下有很多工具可以开发stm32

一,介绍方案:

1,arm官方插件

https://www.keil.arm.com/community/

cmsis,我安装了,但是配置时候总是卡住不知道在干什么。

优点:可以直接导入keil mdk的工程

缺点:他是调用keil的编译器,所以速度和keil一样,不快。

2,STM32 VS Code Extension

不会用。

3,使用makefile方案+插件stm32-for-vscode

参考链接(不用看这个):https://zhuanlan.zhihu.com/p/646171731

stm32-for-vscode插件地址(不用看这个)https://github.com/bmd-studio/stm32-for-vscode

二,开始配置

工具下载:

a,MinGW:

https://github.com/skeeto/w64devkit/releases

选择w64devkit-xxxx.zip 下载,这个是包含minggw的win开发包

b,arm-none-eabi-gcc

https://developer.arm.com/downloads/-/gnu-rm

c,OpenOCD

https://gnutoolchains.com/arm-eabi/openocd/

全解压到一个文件夹下:

我的路径如下:

D:\SOFTWARERUN\STM32VSCODE\GCC-ARM-NONE-EABI-10.3-2021.10\BIN

D:\SOFTWARERUN\STM32VSCODE\W64DEVKIT\BIN\MAKE.EXE

D:\SOFTWARERUN\STM32VSCODE\OPENOCD-20231002-0.12.0\BIN\OPENOCD.EXE

安装插件:

安装vscode插件是stm32-for-vscode

安装后,配置路径,同时修改到工作区

保存,重开vscode,我测试,重开还是不行,弄了很久,json里面路径斜杠要朝右,不能朝左。

成功后,出现如下图界面

使用stm32cube配置一共工程,最后导出的时候选择makefile方式。

然后用vscode打开这个文件夹。

编译模式是make -j16,也就是16线程,不知道如何能自己该别的线程,反正比keil mdk的默认快多了。

可以选择下载器,stlink v2 cmsis-dap


添加编译信息

插件会自动生成一个文件STM32-for-VSCode.config.yaml

这个文件会自动处理成makefile

添加新文件夹就在includeDirectories:和sourceFiles:  

配置文件的中文注释如下:

# 配置文件用于STM32的VSCode扩展
# 数组可以通过两种方式输入。一种是: [entry_1, entry_2, ..., entry_final]
# 或通过在变量名称下添加缩进列表,例如:
# VARIABLE:
# - entry_1
# - entry_2

# 项目名称
target: 1rtosv2
# 可以是C或C++
language: C

optimization: Og

# MCU设置
targetMCU: stm32l4x
cpu: cortex-m4 # CPU类型,例如cortex-m4
fpu: fpv4-sp-d16 # 定义浮点数的方式。可以为空。
floatAbi: -mfloat-abi=hard
ldscript: STM32L476RGTx_FLASH.ld # 链接脚本

# 编译器定义。编译器将自动添加-D前缀。
cDefinitions: []
cxxDefinitions: []
asDefinitions: []

# 编译器定义文件。可以添加单个文件或不同定义的文件数组。
# 该文件预计每一行都有一个定义。
# 这可以方便地传递编译时的密钥,或生成用于每个设备设置的文件。
cDefinitionsFile:
cxxDefinitionsFile:
asDefinitionsFile:

# 编译器标志
cFlags: 
  - -Wall
  - -fdata-sections
  - -ffunction-sections

cxxFlags: []
assemblyFlags: 
  - -Wall
  - -fdata-sections
  - -ffunction-sections

linkerFlags: 
  - -Wl,--print-memory-usage

# 要包含的库。库的名称将自动添加-l前缀。
libraries: 
  - c
  - m

# 库目录。可以在这里添加包含自定义库的文件夹。
libraryDirectories: []

# 应从编译中排除的文件或文件夹。
# 可以使用Glob模式(https://www.wikiwand.com/en/Glob_(programming))。
# 注意,双星号在yaml中是保留的
# 这些应该用\转义或名称应该用双引号括起来,例如"**.test.**"
excludes: 
  - "**/Examples/**"
  - "**/examples/**"
  - "**/Example/**"
  - "**/example/**"
  - "**_template.*"

# 包含目录(包含.h或.hpp文件的目录)
# 如果存在CubeMX makefile,它将自动包含该makefile的包含目录。
includeDirectories: 
  - Inc/**
  - Core/Inc/**
  - Core/Lib/**
  - Src/**
  - Core/Src/**
  - Core/Lib/**

# 应包含在编译中的文件。
# 如果存在CubeMX makefile,它将自动包含该makefile的c和cpp/cxx文件。
# 可以使用Glob模式(https://www.wikiwand.com/en/Glob_(programming))。
# 注意,双星号在yaml中是保留的
# 这些应该用\转义或名称应该用双引号括起来,例如"HARDWARE_DRIVER*.c"
sourceFiles:  
  - Src/**
  - Core/Src/**
  - Core/Lib/**

# 当没有makefile时,将显示警告弹出窗口。
# 但是,如果需要在没有CubeMX Makefile的情况下进行编译,可以关闭此选项。
suppressMakefileWarning: false

# 自定义makefile规则
# 在这里,可以向STM32Make.make文件添加自定义makefile规则
# 下面注释掉的示例演示了如何使用它。
customMakefileRules:
# - command: sayhello
#   rule: echo "hello"
#   dependsOn: $(BUILD_DIR)/$(TARGET).elf # 可以省略    

# 在调用make命令时将使用的其他标志
makeFlags:
# - -O  # 仅在make版本为4.0及更高版本时使用此选项,当构建输出混乱时使用
# - --silent # 使用此选项以使构建输出静音