vscode的cmake环境配置
使用步骤
1. 第一步 使用vscode打开 并选择插件

2. 第二步 插件的下载(可以先安装Chinese插件切换中文)
选中左侧扩展按钮进行搜索

2.1 STM32CubeIDE for VisualStudio Code

2.2 Cortex-Debug

2.3 Cmake(也可以直接下载支持,不安装插件)


3. 第三步 成功开启加载工程
3.1 等待上方出现选择后选择Debug预设(如果debug选项消失,可以重新进入或者在cmake tool 中选择)


3.2 慢慢等待右下角出现是后点击是(等待加载一段时间,如不显示可以查看是否联网,或者重新进入项目再次进行选择)

3.3 成功编译

4. 第四步 编译链的修改(如果只用vscode建议使用clang或者GCC都可以, 如果同时用vscode和clion建议使用GCC)
4.1 生成的代码默认是GCC


"toolchainFile": "${sourceDir}/cmake/gcc-arm-none-eabi.cmake"
4.2 将编译链修改成CLANG



"toolchainFile": "${sourceDir}/cmake/starm-clang.cmake"
{
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "build/Debug/clion_tryjie.elf",
"name": "Debug with OpenOCD",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles": [
"interface/cmsis-dap.cfg",
"target/stm32f4x.cfg"
],
"serverpath": "E:/RM/RM/xpack-openocd-0.12.0-7-win32-x64/xpack-openocd-0.12.0-7/bin/openocd.exe",
"searchDir": [
"E:/RM/RM/xpack-openocd-0.12.0-7-win32-x64/xpack-openocd-0.12.0-7/openocd/scripts"
],
"runToEntryPoint": "main",
"showDevDebugOutput": "none",
"gdbPath": "C:/Users/24137/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/13.3.1+st.9/bin/arm-none-eabi-gdb",
"liveWatch": {
"enabled": true,
"samplesPerSecond": 4
}
}
]
}
5. 第五步 vscode中使用daplink下载,stlink下载,jlink下载
5.1 stlink下载 (快捷键F5)


5.2 jlink下载 (快捷键F5)


5.3 daplink下载 (快捷键F5)


5.3.1 方法一:观看 xr 的教程进行自主学习搭建
5.3.2 方法二:按照我的图片教程自己学习搭建
5.3.3 参考代码
5.3.4 相关软件的安装
openocd
手把手教你配置 STM32CubeIDE for VSCode 下基于 OpenOCD 的调试配置

everything
5.3.5 配置步骤
代码 "executable": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}",
5.3.5.1 将”executable”: 改为环境变量(统一不需要多次修改)或者编译出的elf文件(复制相对路径)

5.3.5.2 添加配置文件

5.3.5.3 添加搜索文件夹和openocd路径
5.3.5.3.1 找到openocd的 scripts

5.3.5.3.2 找到openocd的 openocd.exe

5.3.5.3.3 打开everything 搜索gdb路径(everything下载地址在上方)






5.3.5.4 自由选择是否添加liveWatch(不如ozone好用,ozone的使用请看后面教程)

livewatch(liveWatch的st官方介绍)
6. CMakelist 文件的修改
6.1 添加每一个文件路径
6.1.1 方法一 为每一个.C或 .C++文件添加路径(好处是清晰分明)(建议此方法)
以我的代码架构作为参考
├── ADC
│ ├── drv_adc.cpp
│ └── drv_adc.h
├── CMakeLists.txt
├── CMakePresets.json
├── Core
│ ├── Inc
│ └── Src
├── Drivers
│ ├── CMSIS
│ └── STM32F4xx_HAL_Driver
├── Middlewares
│ └── Third_Party
├── SEGGER
│ ├── Config
│ └── RTT
├── STM32F405XX_FLASH.ld
├── bsp
│ ├── log
│ └── usart
├── build
│ └── Debug
├── cmake
│ ├── gcc-arm-none-eabi.cmake
│ ├── starm-clang.cmake
│ └── stm32cubemx
├── component
│ ├── comp_ahrs.c
│ ├── comp_ahrs.h
│ ├── comp_cmd.c
│ ├── comp_cmd.h
│ ├── comp_game.h
│ ├── comp_type.h
│ ├── comp_utils.c
│ └── comp_utils.h
├── modules
│ └── dr16
├── one.ioc
├── startup_stm32f405xx.s
├── task
│ └── dr16
└── tool
├── convert
└── process

# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
Add user sources here
task/dr16/dr16_task.c
bsp/log/bsp_log.c
component/comp_utils.c
component/comp_cmd.c
component/comp_ahrs.c
bsp/usart/bsp_uart.c
modules/dr16/dev_dr16.c
SEGGER/RTT/SEGGER_RTT.c
SEGGER/RTT/SEGGER_RTT_printf.c
SEGGER/RTT/SEGGER_RTT_ASM_ARMv7M.s
tool/convert/convert.c
tool/process/process.h
ADC/drv_adc.cpp
)
Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
Add user defined include paths
task/dr16
SEGGER
SEGGER/Config
SEGGER/RTT
component
tool
tool/convert
tool/process
bsp
bsp/usart
bsp/log
modules
modules/dr16
ADC
)
"executable": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}",
6.1.2 直接添加文件路径(好处是无需为此文件路径下的每一个代码添加.c或.cpp文件)

# Link directories setup
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE
Add user defined library search paths
)
set(USER_CODE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/task"
"${CMAKE_CURRENT_SOURCE_DIR}/component"
"${CMAKE_CURRENT_SOURCE_DIR}/bsp"
"${CMAKE_CURRENT_SOURCE_DIR}/modules"
"${CMAKE_CURRENT_SOURCE_DIR}/tool"
"${CMAKE_CURRENT_SOURCE_DIR}/SEGGER"
"${CMAKE_CURRENT_SOURCE_DIR}/ADC"
)
set(USER_SOURCES)
set(USER_HEADERS)
foreach(USER_CODE_DIR IN LISTS USER_CODE_DIRS)
file(GLOB_RECURSE USER_DIR_SOURCES CONFIGURE_DEPENDS
"${USER_CODE_DIR}/.c"
"${USER_CODE_DIR}/.cpp"
"${USER_CODE_DIR}/.s"
"${USER_CODE_DIR}/.S"
)
file(GLOB_RECURSE USER_DIR_HEADERS CONFIGURE_DEPENDS
"${USER_CODE_DIR}/.h"
"${USER_CODE_DIR}/.hpp"
)
list(APPEND USER_SOURCES ${USER_DIR_SOURCES})
list(APPEND USER_HEADERS ${USER_DIR_HEADERS})
endforeach()
list(REMOVE_DUPLICATES USER_SOURCES)
list(REMOVE_DUPLICATES USER_HEADERS)
set(USER_INCLUDE_DIRS ${USER_CODE_DIRS})
foreach(USER_HEADER IN LISTS USER_HEADERS)
get_filename_component(USER_HEADER_DIR "${USER_HEADER}" DIRECTORY)
list(APPEND USER_INCLUDE_DIRS "${USER_HEADER_DIR}")
endforeach()
list(REMOVE_DUPLICATES USER_INCLUDE_DIRS)
Add sources to executable. Headers are included for IDE visibility.
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
${USER_SOURCES}
${USER_HEADERS}
)
Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${USER_INCLUDE_DIRS}
)
6.2 添加printf的float支持

# Remove wrong libob.a library dependency when using cpp files
list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_LIBRARIES ob)
Add linked libraries
target_link_libraries(${CMAKE_PROJECT_NAME}
stm32cubemx
Add user defined libraries
)
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
Add user defined link options here
LINKER:-u,_printf_float
)
6.3 添加C++支持(如果代码使用了C++)

# Setup compiler settings
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# Enable CMake support for ASM, C and C++ languages
enable_language(C CXX ASM)

评论(0)
暂无评论