HPM
首先,创建一个环境变量 HPM_SDK_BASE 指向sdk_env内的hpm_sdk,,后续若SDK升级,仅需更改该变量就可以一键迁移。随后,在VSCode中安装C/C++ extensions pack,写入如下配置文件到.vscode/settings.json。这不仅将使得CMake拓展自动感知到HPM_SDK中自带的工具链,也配置C/C++拓展以激活语言服务器。
{
"cmake.cmakePath": "${env:HPM_SDK_BASE}/../tools/cmake/bin/cmake.exe",
"cmake.additionalCompilerSearchDirs": [
"${env:HPM_SDK_BASE}/../toolchains/rv32imac_zicsr_zifencei_multilib_b_ext-win/bin",
],
"cmake.generator": "Ninja",
"cmake.configureArgs": [
"-DCMAKE_MAKE_PROGRAM=${env:HPM_SDK_BASE}/../tools/ninja/ninja.exe",
],
"cmake.configureEnvironment": {
"GNURISCV_TOOLCHAIN_PATH": "${env:HPM_SDK_BASE}/../toolchains/rv32imac_zicsr_zifencei_multilib_b_ext-win/",
},
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
}在VSCode配置完成后,使用如下CMakeLists.txt以完成项目配置,其中有预留的sdk和组件设置,USB_DEVICE和HPM5300EVK可以更改为您需要的选项。这将自动探测/src下的c和cpp文件并添加进构建目标中,同时将/include作为头文件目录加入进去。
cmake_minimum_required(VERSION 3.13)
# setup sdk
set(BOARD hpm5300evk)
set(HPM_BUILD_TYPE flash_xip)
# setup compoenents
set(CONFIG_USB_DEVICE TRUE)
message(STATUS "HPM SDK Base: $ENV{HPM_SDK_BASE}")
message(STATUS "HPM SDK Toolchain: ${GNURISCV_TOOLCHAIN_PATH}")
find_package(hpm-sdk REQUIRED HINTS $ENV{HPM_SDK_BASE})
project(hello_world)
file(GLOB_RECURSE SOURCES src/*.c src/*.cpp)
sdk_inc(${CMAKE_CURRENT_SOURCE_DIR}/include)
sdk_app_src(${SOURCES})至此,已经可以通过VSCode构建和自动高亮HPM固件代码。随后,配置.vscode/tasks.json,写入下载和挂起等待调试的算法:(注意,此处传给OpenOCD的参数外侧还有一层花括号,这是因为TCL默认将反斜杠解释为转义字符。对于WIndows路径,OpenOCD推荐使用花括号避免转义 https://openocd.org/doc/html/FAQ.html)
{
"version": "2.0.0",
"tasks": [
{
"label": "download_and_attach",
"type": "shell",
"dependsOn": "CMake: build",
"command": "${env:HPM_SDK_BASE}/../tools/openocd/openocd.exe",
"args": [
"-c",
"set HPM_SDK_BASE {${env:HPM_SDK_BASE}}; set BOARD hpm5300evk; set PROBE ft2232;",
"-f",
"${env:HPM_SDK_BASE}/boards/openocd/hpm5300_all_in_one.cfg",
"-c",
"program {${workspaceFolder}/build/output/demo.elf} verify; reset_soc"
],
"isBackground": true,
"problemMatcher": [
{
"pattern": [
{
"regexp": ".",
"file": 1,
"location": 2,
"message": 3
}
],
"background": {
"activeOnStart": true,
"beginsPattern": ".",
"endsPattern": ".",
}
}
],
},
{
"label": "kill_openocd",
"command": "echo ${input:terminate}",
"type": "shell",
"problemMatcher": []
}
],
"inputs": [
{
"id": "terminate",
"type": "command",
"command": "workbench.action.tasks.terminate",
"args": "terminateAll"
}
]
}添加一个.vscode/launch.json以拉起gdb服务器并附加到openocd:
{
"configurations": [
{
"name": "(hpm_sdk) Flash&Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/output/demo.elf",
"cwd": "${workspaceFolder}",
"preLaunchTask":"download_and_attach",
"postDebugTask": "kill_openocd",
"miDebuggerPath": "${env:HPM_SDK_BASE}/../toolchains/rv32imac_zicsr_zifencei_multilib_b_ext-win/bin/riscv32-unknown-elf-gdb.exe",
"setupCommands": [
{
"text": "target remote localhost:3333",
"description": "Connect to the target",
"ignoreFailures": false
},
],
}
]
}便可以优雅的调试程序:

STM32
1、安装https://marketplace.visualstudio.com/items?itemName=stmicroelectronics.stm32-vscode-extension。
2、切换到预发布模式。
3、完成。
随后即可使用
1、ST拓展生成工程,无需额外配置。
2、STM32CubeMX生成工程,生成时选择CMake,随后在VSCode中打开即可自动识别工程,再在右下角点击确定即可。如果有任何高亮错误,在左下角点击Build后就可以消除。编译后选择Run&Debug并选择您所需要的调试器,如果需要一键下载和重构建,添加如下脚本(以STLink为例):
{
"version": "0.2.0",
"configurations": [
{
"type": "stlinkgdbtarget",
"request": "launch",
"name": "STM32Cube: STM32 Launch ST-Link GDB Server",
"origin": "snippet",
"cwd": "${workspaceFolder}",
"runEntry": "main",
"imagesAndSymbols": [
{
"imageFileName": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}"
}
],
"preBuild": "${command:st-stm32-ide-debug-launch.build}"
}
]
}