VScode开发STM32

VScode+CubeMx开发STM32

前提拥有
Ninja构建工具
ARM GCC工具链

一、STM32CubeMX

这里还是使用原本的STM32CubeMX软件来生成框架代码
主要区别是
Project Manager页面选择CMakeGCC

![image-20260528163419931](./.assets/image-20260528163419931.png)


二、VScode

在配置文件中新建一个新的配置文件
名称可以随便起,按自己的来
创建新的配置文件是为了隔离之前的环境,也避免污染其他环境

![image-20260528163559466](./.assets/image-20260528163559466.png)

之后下载STM32Cube拓展

选择第一个,进行下载。(这里是一个整合包,可以关联下载所有的)

![image-20260528163745005](./.assets/image-20260528163745005.png)

下载完成之后把工程导入进来,等待配置完成就可以进行开发了

<img src=" title="image-20260528164020612">

点击Debug生成即可生成构建系统进行编译

之后在运行和调试端,这里插入STLink就可以下载了

![image-20260528164132809](./.assets/image-20260528164132809.png)


三、DapLink下载调试

由于ST官方没有加入CMSIS-DAP这个调试,所以如果使用daplink需要手动配置
这里使用

DAPLink + OpenOCD + Cortex-Debug

这个配置来进行Daplink下载调试

1.下载Cortex-Debug插件

![image-20260528164839802](./.assets/image-20260528164839802.png)

2.下载OpenOCD

打开电脑PowerShell

winget install xpack-dev-tools.openocd-xpack

装完之后重新打开 VS Code,再在终端里测试:

openocd --version

如果能显示版本号,就说明 OpenOCD 装好了。(或者先检查一下电脑之前有没有安装过这个OpenOCD)

3. 新建配置文件

新建:

.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "DAPLink OpenOCD Debug STM32F407",
            "type": "cortex-debug",
            "request": "launch",
            "servertype": "openocd",

            "cwd": "${workspaceFolder}",
            "executable": "${workspaceFolder}/build/Debug/${workspaceFolderBasename}.elf",

            "configFiles": [
                "interface/cmsis-dap.cfg",
                "target/stm32f4x.cfg"
            ],

            "serverArgs": [
                "-c",
                "adapter speed 500"
            ],

            "runToEntryPoint": "main",
            "showDevDebugOutput": "raw"
        }
    ]
}

如果你的 .elf 文件名不是工程文件夹名,比如不是:

工程名.elf

那就把这一行:

"executable": "${workspaceFolder}/build/Debug/${workspaceFolderBasename}.elf"

改成实际文件名,例如:

"executable": "${workspaceFolder}/build/Debug/USART_for_RK3506_test.elf"

![image-20260528165427931](./.assets/image-20260528165427931.png)

之后可以点击这个进行调试

4. 配置一键编译下载

这个是 Ctrl + Shift + B 一键编译 + 下载

新建或修改:

.vscode/tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "CMake Build",
            "type": "shell",
            "command": "cube-cmake",
            "args": [
                "--build",
                "${workspaceFolder}/build/Debug",
                "--"
            ],
            "group": "build",
            "problemMatcher": "$gcc"
        },
        {
            "label": "OpenOCD Flash",
            "type": "shell",
            "command": "openocd",
            "args": [
                "-f",
                "interface/cmsis-dap.cfg",
                "-f",
                "target/stm32f4x.cfg",
                "-c",
                "adapter speed 500",
                "-c",
                "program build/Debug/${workspaceFolderBasename}.elf verify reset exit"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": []
        },
        {
            "label": "Build and Flash",
            "dependsOrder": "sequence",
            "dependsOn": [
                "CMake Build",
                "OpenOCD Flash"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        }
    ]
}

如果 .elf 文件名不是工程文件夹名,就改这里:

"program build/Debug/${workspaceFolderBasename}.elf verify reset exit"

比如改成:

"program build/Debug/USART_for_RK3506_test.elf verify reset exit"

四、解决不能及时检查问题

有时候会发现STM32自带的clangd这个插件不会自动纠错,不会出现红色警告,需要编译的时候才能知道错误,所以可以把自带的clangd这个禁用,使用微软的C/C++进行语法纠错

即流程是这样的:

不用 STM32Cube clangd
使用 Microsoft C/C++ 插件负责 IntelliSense 和语法报错
使用 compile_commands.json 提供 STM32 编译信息
CMake / OpenOCD / Cortex-Debug 继续负责构建、下载和调试

具体步骤是:
先禁用stm32的Clangd插件

![image-20260528170306740](./.assets/image-20260528170306740.png)

之后下载C/C++插件
![image-20260528170351634](./.assets/image-20260528170351634.png)

修改配置文件

.vscode/settings.json

{
    "cmake.cmakePath": "cube-cmake",
    "cmake.configureArgs": [
        "-DCMAKE_COMMAND=cube-cmake"
    ],
    "cmake.preferredGenerators": [
        "Ninja"
    ],

    "C_Cpp.intelliSenseEngine": "default",
    "C_Cpp.errorSquiggles": "enabled",

    "C_Cpp.default.compileCommands": "${workspaceFolder}/build/Debug/compile_commands.json",
    "C_Cpp.default.compilerPath": "arm-none-eabi-gcc",

    "editor.renderValidationDecorations": "on"
}

添加新评论