本视频为参照0xBB8大佬的教程配置STM32CubeMX+CMake开发环境的记录,留作备用。
一、前置:安装软件
安装VS Code,安装STM32CubeMX,过程略。
安装CMake,然后添加环境变量:
·····\CMake\bin安装后效果如下:

安装OpenOCD,直接下载的是压缩包文件,解压后添加环境变量:
·······\openocd-20240904\OpenOCD-20240904-0.12.0\bin安装完成效果如下:

安装arm-none-eabi-gcc编译工具:

解压后,添加环境变量:
······\arm-none-eabi\bin安装完成效果如下(使用arm-none-eabi-gcc命令检验):

安装MinGW,安装后添加环境变量:
····\mingw64\bin添加好后效果如下:

在Vscode中安装插件:


二、新建点灯工程进行测试
打开STM32CubeMX,新建工程:

选择自己使用的芯片,然后双击:

设置下载方式(重要,不设置程序写入,就没法用SWD烧录了)

设置时钟:(我的板子没有外接晶振,这里没有设置)

对应时钟树也拉到最大

设置LED引脚(我这里设置PC8为LED0)

配置项目设置(指出的是需要修改的):

配置好后,点击生成工程即可:

这就是生成好的工程,然后使用VS Code打开它就行:


三、编译代码
使用命令生成Makefile(命令很简单这里就不解释了):
mkdir build
cd build
cmake ..注意如果报错:

可以改用cmake .. -G "MinGW Makefiles" 命令来指定使用MinGW,效果如下:

接着使用mingw32-make命令编译工程(可以把mingw32-make.exe重命名为make.exe这样就可以使用make来编译了):

这样就生成了可烧录的文件:demo.elf

四、烧录代码
在build目录下使用下面的命令烧录代码
openocd -f interface/cmsis-dap.cfg -f target/stm32g0x.cfg -c "program demo.elf verify reset exit"这条命令的意思是使用 OpenOCD 通过 CMSIS-DAP 下载器连接 STM32G0 芯片,加载 demo.elf 文件到芯片的 Flash,验证写入是否成功,重置芯片运行程序,并退出 OpenOCD。

可以看到代码烧录成功,下面去写一点代码去测试一下点灯:
五、点灯
在main.c添加代码:
HAL_GPIO_TogglePin(LED_1_GPIO_Port, LED_1_Pin);
HAL_Delay(1000);
然后重新编译烧录即可,这个时候就完成点灯代码了。
六、调试代码
下载插件Cortex-Debug

点击运行和调试按钮下的创建launch.json文件

选择OpenOCD,生成launch.json文件

然后修改launch.json文件的 executable 和configFiles,如下::
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "build/demo.elf",
"name": "Debug with OpenOCD",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles": [
"interface/cmsis-dap.cfg",
"target/stm32g0x.cfg"
],
"searchDir": [],
"runToEntryPoint": "main",
"showDevDebugOutput": "none"
}
]
}其中build/demo.elf是自己工程生成的.elf文件的路径,interface/cmsis-dap.cfg 是调试器型号,target/stm32g0x.cfg是使用的芯片型号,根据自己使用的填写即可。
之后点击运行调试即可打开调试:

这里就可以单步调试,查看程序运行过程中产生的变量
要进一步查看寄存器,可以去下载对应芯片的SVD文件:下载地址,点击跳转
SVD 文件(System View Description)是一种 XML 格式的文件,用于描述微控制器的寄存器和外设信息。它主要由微控制器厂商提供,目的是为开发者和工具链(如调试器、IDE)提供一种标准化的方式来解析和访问芯片内部资源。
找到自己芯片对应的SVD文件,放入工程目录:

在launch.json文件中修改,添加一项svdFile 内容为SVD文件的路径: ` 
再次打开调试,就能看到寄存器对应的值了:

七、其他配置
7.1 去除代码中的未定义报错

解决方式:

在defines中添加这两项:

这两项可以在项目目录下的cmake\stm32cubemx\CMakeLists.txt里找到:

然后修改compilerPath为自己安装arm-none-eabi-gcc.exe的路径,把cStandard修改为c11,把intelliSenseMode修改为gcc-arm

这样就不会报错显示未定义了。
