本教程介绍了使用CMake构建生成器、 Ninja构建工具和GCC编译器在Visual Studio Code中有效开发和调试 STM32 应用程序的步骤。
你将学到的东西
如何安装和设置所有工具
如何使用 STM32CubeMX 或 STM32CubeIDE 工具创建新的 STM32 项目
如何安装和设置Visual Studio Code的推荐扩展以简化开发
如何设置 CMake 列表和 CMake 预设
如何为编译器生成构建系统
如何使用GCC编译项目
如何将应用程序烧写并调试到 STM32 目标
本教程使用Windows操作系统。类似的过程将适用于 Linux 和 MAC 操作系统。
工具安装教程将帮助您了解使用 STM32 所需的必要工具,通常有利于初学者加快速度并正确理解必要的要求。
一段时间以来,ST推出了新的STM32CubeCLT软件工具,其中包括vscode所需的构建工具,包括Ninja构建系统和CMake构建生成器。 STM32CubeCLT(命令行工具)是一种快速加快 vscode 开发速度的简单方法。它还会自动设置您的构建环境变量(Windows 中的路径),允许您直接从命令行工具调用ninja 、 cmake或其他命令。
通过安装STM32CubeCLT ,您不会获得STM32CubeIDE图形工具,也不会获得任何 MCU 配置工具功能,而只是通常从vscode内调用构建和调试的命令行工具。您仍然需要单独安装 vscode 和必要的扩展。
第一步是安装 STM32CubeIDE,它将用于轻松启动新的STM32项目,它附带集成的STM32CubeMX工具 - 允许我们进行图形配置。
STM32CubeIDE还提供了后续VSCode开发所需的必要工具
ARM 无 eabi GCC 编译器
用于调试的 ST-LINK GDBServer
用于代码下载的 STM32CubeProgrammer 工具和相应的 ST-Link 驱动程序
包含 STM32 SVD 文件的文件夹
ST-Link 驱动程序
环境路径设置
STM32CubeIDE 安装时应在环境设置中添加3路径,其中每个路径对应上述工具。就我的计算机而言,使用 STM32CubeIDE 1.8 (通过 eclipse 更新,因此我的实际安装路径仍然显示版本1.0.2 )路径定义为:
GCC编译器: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346toolsbin
ST-Link GDB服务器: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.win32_2.0.100.202109301221toolsbin
STM32Cube 编程器 CLI: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.win32_2.0.100.202110141430toolsbin
您的路径可能因版本号而异
验证路径设置正确,运行:
arm-none-eabi-gcc --version STM32_Programmer_CLI --version ST-LINK_gdbserver --version
这应该会产生类似于下图的输出
如果您已使用STM32CubeCLT安装构建工具,则无需执行此步骤
下载并安装 CMake。
安装向导会要求您将 CMake 添加到环境路径。选择该选项或将CMake安装文件夹的bin文件夹添加到环境路径。
如果您已使用STM32CubeCLT安装构建工具,则无需执行此步骤
从 Github 发布页面下载 Ninja 构建系统。它作为便携式可执行文件提供,无需安装任何东西。然而,它必须在环境级别可见,就像所有以前的工具一样。
验证CMake和Ninja安装,运行:
cmake --version ninja --version
输出应类似于
下载并安装 VSCode。安装并打开后,窗口将类似于下图。
Visual Studio Code是轻量级文本编辑器,能够使用扩展来扩展它。
使用 CMake 进行 STM32 开发的有用扩展列表:
ms-vscode.cpptools :用于 C/C++ 开发的语法突出显示和其他核心功能
ms-vscode.cmake-tools :CMake核心工具,构建系统生成器工具
twxs.cmake : CMake 颜色突出显示
marus25.cortex-debug :Cortex-M 调试扩展,对于从 VSCode 进行 STM32 调试是必需的
dan-c-underwood.arm :ARM 汇编语法荧光笔
zixuanwang.linkerscript : GCC 链接器脚本语法荧光笔
您可以通过在 VSCode 的内部终端窗口中复制以下命令来安装它们。
code --install-extension ms-vscode.cpptools code --install-extension ms-vscode.cmake-tools code --install-extension twxs.cmake code --install-extension marus25.cortex-debug code --install-extension dan-c-underwood.arm code --install-extension zixuanwang.linkerscript
转到终端 -> 新终端以打开新终端窗口
另一种方法是使用扩展搜索 GUI并从那里手动安装。
至此,所有工具都已正确安装 - 您已走上成功的正确轨道。
前进的基本要求是拥有一个将转换为CMake并在VSCode中开发的工作项目。为此,我将指导您使用STM32CubeMX或STM32CubeIDE软件工具创建简单的新项目。
如果您已经有要处理的项目,则可以跳过这一部分。
我在本演示中使用了STM32CubeIDE工具和 STM32H735G-DK 板。
打开STM32CubeIDE并开始新项目
选择STM32 MCU - 我选择了STM32H735IG ,它用在STM32H735G-DK板上
选择项目名称和路径,然后创建项目并等待Pinout 视图打开
我们的任务是建立一个可以切换 LED 的简单项目。 LED 分别连接到PC2和PC3 ,低电平有效。引脚可配置为输出推挽或开漏模式
将引脚设置为输出,可选标签分别为LED1和LED2
如果您使用的是STM32CubeMX ,请转到项目管理器,设置项目名称并确保选择STM32CubeIDE作为Toolchain 。
转到高级设置并选择LL作为生成代码的驱动程序
为了简单起见,我们在本教程中使用 LL 驱动程序
按红色按钮或使用CTRL + S快捷键保存项目来重新生成项目
项目现已(重新)生成。黄色突出显示的文件是要构建的源。蓝色是链接描述文件。
这就是第一次运行,我们准备编译。按CTRL + B或单击锤子图标开始。 STM32CubeIDE将编译该项目,您应该看到类似于下图的内容。现在已准备好刷新 MCU 的闪存并开始调试。
这是第一部分的结尾,我们成功创建了项目。此时,我们认为项目已准备好转移到基于 CMake 的构建系统。
您将来可以继续使用 STM32CubeIDE 进行开发、添加新源、修改代码、编译、刷新二进制文件并直接调试微控制器。这是首选的STM32开发工作室,由意法半导体开发和维护。
预计在 VSCode 中开发的项目已经创建。我们将继续使用 GCC 编译器,但也可以使用其他编译器。
随着 Visual Studio Code 的发布,许多开发人员将该工具用于多种编程语言,幸运的是还可以使用单一工具开发 STM32 应用程序。如果您是喜欢 VSCode 的开发人员之一,最优雅的前进方式是将基于 STM32CubeIDE 的项目转移到CMake ,在 VSCode 中开发代码并使用 GCC 编译器通过 Ninja 构建系统进行编译。它快速且轻便。
VSCode 中的开发适合中级或有经验的用户。我建议所有 STM32 初学者继续使用STM32CubeIDE开发工具链。稍后继续讨论 VSCode 主题会很容易。
每个基于 CMake 的应用程序都需要根目录中的CMakeLists.txt文件,该文件描述项目并为构建系统生成提供输入信息。
根
CMakeLists.txt文件有时称为顶级 CMake文件
CMakeLists.txt文件中描述的基本内容:
工具链信息,例如带有构建标志的 GCC 配置
项目名称
使用编译器、C、C++ 或汇编文件构建的源文件
编译器查找函数、定义等的包含路径列表( -I )
链接器脚本路径
编译定义,有时称为预处理器定义( -D )
用于指令集生成的 Cortex-Mxx 和浮点设置
Visual Studio Code 已安装并将用作进一步的文件编辑器。
找到生成的项目路径并使用 VSCode 打开文件夹:
选项 1:使用资源管理器转到文件夹,然后右键单击并选择Open in Code 。
选项 2:或者,将 VScode 作为新的空解决方案打开,然后手动向其中添加文件夹。使用File -> Open Folder...打开文件夹
选项 3:使用 cmd 或 powershell 工具转到文件夹并运行code .
最终结果应该类似于下面的结果
CMake 需要了解我们想要用来最终编译项目的工具链。由于相同的工具链通常在不同的项目之间重用,因此建议在单独的文件中创建此部分以便于重用。这些是通用编译器设置,不直接链接到项目本身。
可以使用一个简单的.cmake文件,然后在您的各个项目中重复使用。我在本教程中使用名称cmake/gcc-arm-none-eabi.cmake ,下面是其示例:
set(CMAKE_SYSTEM_NAME Generic)set(CMAKE_SYSTEM_PROCESSORarm)#一些默认的GCC设置#arm-none-eabi-必须是路径环境的一部分set(TOOLCHAIN_PREFIXarm-none-eabi-)set(FLAGS“-fdata-sections-ffunction-sections- -specs=nano.specs -Wl,--gc-sections")set(CPP_FLAGS "-fno-rtti -fno-exceptions -fno-threadsafe-statics")# 定义编译器设置set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc ${FLAGS})set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++ $ {标志} ${CPP_FLAGS})设置(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy)设置(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size)设置(CMAKE_EXECUTABLE_SUFFIX_ASM“.elf”)设置(CMAKE_EXECUTABLE_SUFFIX_C“.elf”)设置(CMAKE_EXECUTABLE_SUFFIX_CXX “.elf”)设置(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)在项目根目录的cmake/文件夹中创建一个文件。
如果安装了 CMake 荧光笔插件,VSCode 会很好地为您突出显示 CMake 命令
工具链设置完成。您可以自由关闭文件并进入下一步。
我们需要创建主CMakeLists.txt ,也称为根CMake 文件。
确保您确实使用正确的大小写字符将其命名为
CMakeLists.txt。
我为您准备了简单的模板文件,可以在将来的所有项目中重复使用。您只需要更改项目名称、源文件、包含路径等。
cmake_minimum_required(VERSION 3.22)# 设置编译器设置set(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS ON)set(PROJ_PATH ${CMAKE_CURRENT_SOURCE_DIR})message("构建类型:" ${CMAKE_BUILD_TYPE})## 核心项目设置#project(your-project-name)enable_language(C CXX ASM)## 核心 MCU 标志、CPU、指令集和FPU设置#需要为您的MCU正确设置#set(CPU_PARAMETERS
-mthumb#使用的MCU需要注意正确设置-mcpu=cortex-m7
-mfpu=fpv5-d16
-mfloat-abi=硬
)# Set linker scriptset(linker_script_SRC ${PROJ_PATH}/path-to-linker-script.ld)set(EXECUTABLE ${CMAKE_PROJECT_NAME})## 要编译的源文件列表#set(sources_SRCS# 将您的源文件放在这里,其中一个在每一行中,相对于 CMakeLists.txt 文件位置)## 包含目录#set(include_path_DIRS# 在这里放置你的包含目录,每行一个,相对到 CMakeLists.txt 文件位置)## 符号定义#set(symbols_SYMB# 在此放置您的符号(预处理器定义),每行一个# 为了安全起见,用双引号将它们封装起来)# 可执行文件add_executable(${EXECUTABLE} ${sources_SRCS })# 包含路径target_include_directories(${EXECUTABLE} PRIVATE ${include_path_DIRS})# 项目Symbolstarget_compile_definitions(${EXECUTABLE} PRIVATE ${symbols_SYMB})# 编译器选项target_compile_options(${EXECUTABLE} PRIVATE${CPU_PARAMETERS}-Wall
-维克斯特拉
-W迂腐的
-Wno-unused-parameter#完整调试配置-Og -g3 -ggdb
)# 链接器选项target_link_options(${EXECUTABLE} PRIVATE-T${linker_script_SRC}${CPU_PARAMETERS}-Wl,-Map=${CMAKE_PROJECT_NAME}.map
--specs=nosys.specs
-u _printf_float # STDIO 浮点格式支持-Wl,--start-group
LC
-lm
-lstdc++
-lsupc++
-Wl,--端基
-Wl,--打印内存使用情况
)# 执行构建后打印 sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}>
)# 将输出转换为十六进制和二进制add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex
)# 转换为bin文件 -> 添加条件检查?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)源文件与STM32CubeIDE项目中的相同。您可以检查以前的图像,其中以黄色突出显示来源。
符号和包含路径可以在STM32CubeIDE 的项目设置下找到。下面2图片展示了演示项目的情况。
Cortex-Mxx 设置需要特别注意,尤其是浮点设置。对于STM32H735xx ,设置应如下所示。
设置(CPU_参数
-mthumb
-mcpu=cortex-m7 # 设置 Cortex-M CPU-mfpu=fpv5-d16 # 设置浮点类型 -mfloat-abi=hard # 硬件 ABI 模式)设置的一般规则如下表所示
| STM32家族 | -mcpu | -mfpu | -mfloat-abi |
|---|---|---|---|
| STM32F0 | cortex-m0 | Not used | soft |
| STM32F1 | cortex-m3 | Not used | soft |
| STM32F2 | cortex-m3 | Not used | soft |
| STM32F3 | cortex-m4 | fpv4-sp-d16 | hard |
| STM32F4 | cortex-m4 | fpv4-sp-d16 | hard |
| STM32F7 SP | cortex-m7 | fpv5-sp-d16 | hard |
| STM32F7 DP | cortex-m7 | fpv5-d16 | hard |
| STM32G0 | cortex-m0plus | Not used | soft |
| STM32C0 | cortex-m0plus | Not used | soft |
| STM32G4 | cortex-m4 | fpv4-sp-d16 | hard |
| STM32H5 | cortex-m33 | fpv5-sp-d16 | hard |
| STM32H7 | cortex-m7 | fpv5-d16 | hard |
| STM32L0 | cortex-m0plus | Not used | soft |
| STM32L1 | cortex-m3 | Not used | soft |
| STM32L4 | cortex-m4 | fpv4-sp-d16 | hard |
| STM32L5 | cortex-m33 | fpv5-sp-d16 | hard |
| STM32U0 | cortex-m0plus | Not used | soft |
| STM32U5 | cortex-m33 | fpv5-sp-d16 | hard |
| STM32WB | cortex-m4 | fpv4-sp-d16 | hard |
| STM32WBA | cortex-m33 | fpv5-sp-d16 | hard |
| STM32WL CM4 | cortex-m4 | Not used | soft |
| STM32WL CM0 | cortex-m0plus | Not used | soft |
该表存在潜在错误,未使用GCC 编译器对所有行进行测试。对于
STM32F7,请访问STM32F7xx官方网站并检查您的设备是否具有单精度或双精度FPU,然后应用相应的设置。产品列表并不详尽。
设置源文件、包含路径、MCU 核心设置和定义后的最终CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.22)# 设置编译器设置set(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS ON)set(PROJ_PATH ${CMAKE_CURRENT_SOURCE_DIR})message("构建类型:" ${CMAKE_BUILD_TYPE})## 核心项目设置#project(STM32H735G-DK-LED) # Modifiedenable_language(C CXX ASM)## 核心 MCU 标志、CPU 、指令集和FPU设置#需要为您的MCU正确设置#set(CPU_PARAMETERS
-mthumb#使用的MCU需要注意正确设置-mcpu=cortex-m7 # Modified-mfpu=fpv5-d16 # Modified-mfloat-abi=hard # Modified)# 设置链接器脚本集(linker_script_SRC ${PROJ_PATH}/STM32H735IGKX_FLASH. ld) # 修改集(可执行文件${CMAKE_PROJECT_NAME})## 要编译的源文件列表#set(sources_SRCS #修改${PROJ_PATH}/Core/Src/main.c${PROJ_PATH}/Core/Src/stm32h7xx_it.c${PROJ_PATH}/Core/Src/syscalls.c${PROJ_PATH}/Core/Src/sysmem.c$ { PROJ_PATH}/Core/Src/system_stm32h7xx.c${PROJ_PATH}/Core/Startup/startup_stm32h735igkx.s${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm3 2h7xx_ll_exti.c${PROJ_PATH}/驱动程序/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_gpio.c${PROJ_PATH}/驱动程序/STM32H7xx_HAL_Driver/Src/stm32h7xx_l l_pwr.c${PROJ_PATH}/驱动程序/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_rcc.c${PROJ_PATH}/驱动程序/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_utils.c
)## 包含目录#set(include_path_DIRS # 修改${PROJ_PATH}/Core/Inc${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Inc${PROJ_PATH}/Drivers/CMSIS/Device/ST/STM32H7xx/Include${PROJ_PATH}/驱动程序/CMSIS/包含
)## 符号定义#set(symbols_SYMB # 修改"DEBUG""STM32H735xx""USE_FULL_LL_DRIVER""HSE_VALUE=25000000")# 可执行文件add_executable(${EXECUTABLE} ${sources_SRCS})# 包含路径target_include_directories(${EXECUTABLE} PRIVATE ${include_path_DIRS})# 项目符号target_compile_definitions(${EXECUTABLE} PRIVATE ${symbols_SYMB})# 编译器选项target_compile_options(${EXECUTABLE} PRIVATE${CPU_PARAMETERS}-Wall
-维克斯特拉
-W迂腐的
-Wno-unused-parameter#完整调试配置-Og -g3 -ggdb
)# 链接器选项target_link_options(${EXECUTABLE} PRIVATE-T${linker_script_SRC}${CPU_PARAMETERS}-Wl,-Map=${CMAKE_PROJECT_NAME}.map
--specs=nosys.specs
-u _printf_float # STDIO 浮点格式支持-Wl,--start-group
LC
-lm
-lstdc++
-lsupc++
-Wl,--端基
-Wl,--打印内存使用情况
)# 执行构建后打印 sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}>
)# 将输出转换为十六进制和二进制add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex
)# 转换为bin文件 -> 添加条件检查?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)在 VSCode 中,突出显示,看起来像这样
CMakePresets.json是一个特殊文件,自 CMake 3.18起可用,并提供用户配置的定义,类似于 eclipse 中已知的调试和发布配置。拥有此文件允许开发人员在调试和发布模式之间快速更改,甚至在引导加载程序和主应用程序之间快速更改,这是嵌入式应用程序中的常见用例。
本教程不会重点介绍有关文件的详细信息,而是提供的模板文件
文件描述:
每个构建配置的构建目录的路径
每个配置的默认构建类型( Debug , Release ,...)
.cmake工具链描述符的路径
模板中为每个默认CMake配置配置了
4预设
{“版本”:3,“配置预设”:[
{“名称”:“默认”,“隐藏”:true,“生成器”:“Ninja”,“binaryDir”:“$ {sourceDir} / build / $ {presetName}”,“toolchainFile”:“$ {sourceDir} /cmake/gcc-arm-none-eabi.cmake","cacheVariables": {"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"}
},
{“名称”:“调试”,“继承”:“默认”,“cacheVariables”:{“CMAKE_BUILD_TYPE”:“调试”}
},
{“名称”:“RelWithDebInfo”,“继承”:“默认”,“cacheVariables”:{“CMAKE_BUILD_TYPE”:“RelWithDebInfo”}
},
{“名称”:“发布”,“继承”:“默认”,“cacheVariables”:{“CMAKE_BUILD_TYPE”:“发布”}
},
{“名称”:“MinSizeRel”,“继承”:“默认”,“cacheVariables”:{“CMAKE_BUILD_TYPE”:“MinSizeRel”}
}
]
}
templates/CMakePresets.json中提供始终最新的文件
我们已经使用项目信息配置了CMake ,现在准备运行 CMake 命令。
VSCode 附带CMake 工具插件 - CMake 命令的好帮手。安装后,VSCode 活动窗口底部会提供多个选项
如您所见,没有选择配置预设。
如果您没有看到此类信息,请按
CTRl + ALT + P并运行CMake: Quick Start命令。
下一步是选择当前预设。单击“未选择配置预设”以在顶部打开一个窗口并选择您的预设。为了本教程,我选择了调试。
选择后,文本将更改为选定的预设标签。
现在预设已激活,每次用户修改CMakeLists.txt文件时,由于CMake-Tools扩展,VSCode 将自动调用构建生成命令来应用新的更改。
我们的项目已准备好构建和链接。除非 CMake 构建生成步骤失败,否则我们应该准备好构建目录来调用ninja 构建系统。
下一步是点击“构建”按钮 - 如绿色矩形所示。 CMake 将运行命令:
为选定的预设运行构建生成器
实际使用Ninja构建代码
如果构建良好,输出的最后一步是打印不同部分的内存使用情况。
结果,我们在build/<presetname>/目录中得到了一些输出:
包含完整可执行信息的project-name.elf文件
project-name.hex十六进制文件
project-name.bin BIN 文件
project-name.map地图文件
在默认配置中,不会生成.hex和.bin文件,也不会显示内存使用情况。我们准备的CMakeLists.txt文件包含POST_BUILD选项,用于在成功构建后执行其他命令。代码已经在您的CMakeLists.txt文件中,因此无需执行任何操作,只需观察即可。
它执行命令:
打印每个区域的已用大小+最终可执行内存消耗
从可执行文件生成.hex文件
从可执行文件生成.bin文件
# 执行构建后打印 sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}>
)# 将输出转换为十六进制和二进制add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex
)# 转换为bin文件 -> 添加条件检查?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)要禁用
.bin文件生成,只需删除.bin的POST_BUILD行并重新生成 CMake 构建系统命令。当内存在内部和外部闪存之间划分时,生成.bin文件可能会产生负面影响。它可能会生成非常大的文件(>= 2GB),其中包含大量未使用的零。
在项目开发过程中需要记住一系列有用的命令:
构建变更
清洁工程
重新构建项目,首先清理
闪存项目
它很容易忘记完整的语法,而是让我们使用命令列表创建.vscode/tasks.json文件,以便快速运行:
{“版本”:“2.0.0”,“任务”:[
{"type": "cppbuild","label": "构建项目","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "- j", "8"],"选项": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],"group": {“kind”:“build”,“isDefault”:true}
},
{"type": "shell","label": "重新构建项目","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", “--clean-first”,“-v”,“-j”,“8”],“选项”:{“cwd”:“$ {workspaceFolder}”},“problemMatcher”: [“$海湾合作委员会”],
},
{"type": "shell","label": "清理项目","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "- -target", "clean"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": []
},
{“type”:“shell”,“label”:“CubeProg:Flash项目(SWD)”,“command”:“STM32_Programmer_CLI”,“args”:[“--connect”,“port = swd”,“- -download", "${command:cmake.launchTargetPath}","-hardRst"],"选项": {"cwd": "${workspaceFolder}"},"problemMatcher": []
},
{"type": "shell","label": "CubeProg: 具有已定义序列号 (SWD) 的 Flash 项目 - 您必须首先设置序列号",