Skip to content

本视频为参照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(命令很简单这里就不解释了):

sh
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添加代码:

c
    HAL_GPIO_TogglePin(LED_1_GPIO_Port, LED_1_Pin);
    HAL_Delay(1000);

然后重新编译烧录即可,这个时候就完成点灯代码了。

六、调试代码

下载插件Cortex-Debug

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

选择OpenOCD,生成launch.json文件

然后修改launch.json文件的 executableconfigFiles,如下::

json
{
	// 使用 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

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

参考链接

  1. https://www.bilibili.com/video/BV1cBwuedEXe/?spm_id_from=333.1391.0.0
  2. https://www.bilibili.com/video/BV13Yw7ewEfm/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=ef5a0ab0106372751602034cdd9ab98e
  3. https://zhuanlan.zhihu.com/p/694974748