1. 引言
STM32C5A3ZG 是 ST 新一代 Cortex-M33 内核的高性能开发板,支持丰富的 GPIO、定时器和低功耗特性。本文将以 STM32CubeMX 生成 IOC 工程、CMake 构建脚本,并在 VSCode 中完成编译与调试,最终实现一个按键检测与 LED 闪烁的入门程序。
2. 开发环境准备
开始之前,需要准备以下工具链:
- STM32CubeMX:用于图形化配置芯片引脚、时钟和外设,并生成初始化代码。
- STM32CubeIDE 或 STM32CubeCLI:提供交叉编译工具链(arm-none-eabi-gcc)和调试器驱动。
- VSCode:作为代码编辑与调试前端,配合 CMake 插件和 Cortex-Debug 插件使用。
- ST-Link 调试器:用于烧录与在线调试。
3. 使用 STM32CubeMX 生成工程
打开 STM32CubeMX,选择 STM32C5A3ZG 芯片,进入图形化配置界面。按以下步骤完成基础配置:
- 在 Pinout & Configuration 视图中,将 PA5 配置为 GPIO Output,用于驱动 LED。
- 将 PA0 配置为 GPIO Input,并启用内部上拉电阻,用于读取按键状态。
- 在 System Core > RCC 中,选择 HSE 外部晶振作为时钟源。
- 在 Project Manager 中,设置工程名称与路径,Toolchain 选择 CMake ,生成方式选择 STM32CubeIDE 兼容模式。
点击 Generate Code,STM32CubeMX 会生成包含 CMakeLists.txt 的完整工程骨架。
4. 在 VSCode 中打开并配置工程
使用 VSCode 打开生成的工程目录,安装以下扩展:
- CMake Tools:提供 CMake 构建集成。
- Cortex-Debug:支持 ST-Link 在线调试。
- C/C++:提供代码补全与语法高亮。
在 .vscode/settings.json 中指定交叉编译工具链路径,例如:
json
{
"cmake.generator": "Unix Makefiles",
"cmake.cmakePath": "/usr/bin/cmake",
"cmake.configureOnOpen": true,
"cmake.toolchainFile": "${workspaceFolder}/cmake/gcc-arm-none-eabi.cmake"
}
若 STM32CubeMX 未自动生成工具链文件,可在 CMakeLists.txt 中手动指定编译器前缀:
cmake
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
5. 编写按键检测与 LED 闪烁程序
在 Core/Src/main.c 中,找到用户代码区 USER CODE BEGIN 2 和 USER CODE BEGIN 3,添加如下逻辑:
c
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
/* USER CODE END 2 */
/* USER CODE BEGIN 3 */
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) {
HAL_Delay(20); // 软件消抖
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) {
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
while (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET);
}
}
HAL_Delay(100);
/* USER CODE END 3 */
上述代码实现按键按下时翻转 LED 状态,并通过延时消抖避免误触发。若希望 LED 自动闪烁,可改为:
c
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
HAL_Delay(500);
/* USER CODE END 3 */
6. 编译与烧录
在 VSCode 中按 Ctrl+Shift+P,执行 CMake: Configure ,随后执行 CMake: Build 。构建成功后,会在 build/ 目录生成 .elf 和 .hex 文件。
使用 Cortex-Debug 插件创建 .vscode/launch.json,配置 ST-Link 调试会话:
json
{
"version": "0.2.0",
"configurations": [
{
"name": "STM32 Debug",
"type": "cortex-debug",
"request": "launch",
"servertype": "stlink",
"device": "STM32C5A3ZG",
"executable": "${workspaceFolder}/build/xxx.elf",
"svdFile": "${workspaceFolder}/STM32C5A3ZG.svd"
}
]
}
按 F5 启动调试会话,即可在线单步执行、查看寄存器与变量。
7. 常见问题与排查
- 编译报错找不到头文件 :检查 CMakeLists.txt 中的 include 路径是否包含
Core/Inc和Drivers/STM32C5xx_HAL_Driver/Inc。 - 调试器连接失败:确认 ST-Link 驱动已安装,且开发板供电正常。
- 按键无响应:检查 GPIO 配置是否正确,确认按键接在 PA0 与 GND 之间,并启用了内部上拉。
- LED 不亮:确认 PA5 输出电平与 LED 电路极性匹配,必要时调整 GPIO 初始电平。
8. 总结
本文完整演示了从 STM32CubeMX 生成 IOC 工程、CMake 构建脚本,到 VSCode 编译调试的全流程,并实现了按键检测与 LED 闪烁功能。该流程适用于 STM32C5 系列其他型号,可作为后续外设开发的通用模板。