本视频为参照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
这样就不会报错显示未定义了。