STM32CubeMX 完整使用教程
什么是 STM32CubeMX?
STM32CubeMX 是 ST 公司官方推出的免费图形化配置工具,它可以帮助你:

- 图形化配置引脚:通过拖拽的方式选择引脚功能(如 GPIO, UART, I2C, SPI 等)。
- 生成初始化代码:根据你的配置,自动生成 C 语言初始化代码,包括外设的初始化结构体和底层驱动文件。
- 集成 HAL/LL/LL 库:支持硬件抽象层、中间件抽象层和直接访问层三种编程方式,让你能更专注于应用逻辑,而不是底层寄存器操作。
- 项目生成:直接为你生成基于 Keil MDK, IAR, STM32CubeIDE 等主流 IDE 的完整项目工程。
一句话总结:STM32CubeMX 是一个“图形化配置 + 自动代码生成”的工具,极大地降低了 STM32 的开发门槛,提高了开发效率。
环境准备
在开始之前,请确保你已经安装了以下软件:
- STM32CubeMX:ST 官网下载并安装。
- STM32CubeIDE:ST 官方集成开发环境,集成了代码编辑器和编译器,推荐使用,也可以使用 Keil MDK 或 IAR。
- STM32CubeF4 / F7 / L4... 等 MCU 包:在安装 CubeMX 时,通常会提示你安装对应系列的 MCU 包,包含了外设的中间件库(如 FatFs, FreeRTOS, USB 等)。
创建第一个项目:点亮一个 LED
我们以最经典的“点灯”实验为例,使用 STM32F103C8T6 这款芯片,目标是配置一个 GPIO 引脚为输出模式,通过代码控制它的高低电平来点亮或熄灭 LED。
步骤 1:新建项目
- 打开 STM32CubeMX。
- 点击
File->New Project。 - 在弹出的窗口中,左侧选择你的芯片型号,可以通过搜索框快速找到
STM32F103C8。 - 选择
STM32F103C8T6,然后点击START PROJECT。
步骤 2:选择系统时钟
这是 CubeMX 的核心功能之一,系统时钟是 MCU 运行的“心跳”,配置好时钟才能让外设正常工作。

-
在左侧的
Categories中,点击Pinout & Configuration。 -
在右侧的
System Core选项卡中,点击RCC。 -
在
High Speed Clock (HSE)选项中,选择Crystal/Ceramic Resonator,这表示你使用了外部 8MHz 晶振。 -
点击
Clock Configuration标签页,进入时钟配置界面。
(图片来源网络,侵删) -
你可以看到时钟树的图形化界面,STM32CubeMX 会自动计算和配置。
- 确保
HSE(外部高速时钟) 已启用。 - 点击
PLLCLK Source,选择HSE。 - 在
HCLK(CPU 主时钟) 的下拉菜单中,选择72MHz,这是 STM32F103 的最高主频。 - 你会看到左侧的
SYS和AHB/APB总线的时钟频率会自动被配置好。 - 点击右上角的
Save图标保存配置。
- 确保
步骤 3:配置 GPIO 引脚
- 回到
Pinout & Configuration界面。 - 在中间的芯片引脚图上,找到连接了 LED 的引脚,对于
STM32F103C8T6的Blue Pill开发板,LED 通常连接在PC13引脚。 - 用鼠标左键点击
PC13引脚,会弹出一个功能选择菜单。 - 选择
GPIO_Output,该引脚的颜色会变为橙色,表示它已被配置为用户自定义的 GPIO 功能。
步骤 4:配置 GPIO 参数
- 在左侧的
Categories中,点击GPIO。 - 在右侧的
GPIO设置页面中,你可以对PC13进行详细配置:- GPIO mode:
Output Push-Pull(推挽输出,这是最常用的模式)。 - GPIO pull-up/Pull-down:
No pull-up and no pull-down(不上下拉)。 - User label: 可以给这个引脚起一个名字,
LED_GREEN,方便在代码中识别。
- GPIO mode:
步骤 5:生成项目代码
- 点击右上角的
GENERATE CODE按钮。 - 在弹出的窗口中,选择你的项目保存路径。
- Project Manager 设置:
- Project Name: 给你的项目起个名字,
LED_Blink。 - Toolchain / IDE: 选择你打算使用的 IDE,
STM32CubeIDE。 - Toolchain/IDE: 如果选择 STM32CubeIDE,可以指定其安装路径。
- Project Name: 给你的项目起个名字,
- 点击
GENERATE CODE,等待几秒钟,项目文件就会生成在你指定的文件夹中。
在 STM32CubeIDE 中编写和运行代码
一个带有 HAL 库初始化代码的完整项目已经为你准备好了,我们只需要在主函数中添加控制 LED 的逻辑。
步骤 1:打开项目
- 打开 STM32CubeIDE。
- 点击
File->Import。 - 选择
Existing Projects into Workspace,然后浏览并选择刚刚用 CubeMX 生成的LED_Blink文件夹。 - 点击
Finish,项目就会被导入到 IDE 中。
步骤 2:找到主函数
在左侧的 Project Explorer 中,展开 Core -> Src 文件夹,找到 main.c 文件并打开它。
步骤 3:编写代码
你会看到 main.c 文件中已经包含了 MX_GPIO_Init() 函数,这个函数就是由 CubeMX 自动生成的,用于初始化我们配置的 PC13 引脚。
我们在 while(1) 无限循环中添加代码,实现 LED 闪烁。
/* USER CODE BEGIN 2 */
// 定义一个延时函数的句柄
HAL_StatusTypeDef status;
// 计算延时时间,单位是毫秒
// 72MHz / 8000 = 9000 Hz, 9000Hz 对应 1ms
// 注意:这个宏定义在 main.h 中,可以根据你的主频调整
#define LED_DELAY_MS 500
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// 1. 点亮 LED (PC13 输出低电平)
// HAL_GPIO_WritePin() 函数用于控制 GPIO 引脚
// 参数1: GPIO 端口, 参数2: 引脚号, 参数3: 电平状态 (GPIO_PIN_SET 为高, GPIO_PIN_RESET 为低)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // PC13 输出低电平,点亮 LED
HAL_Delay(LED_DELAY_MS); // 延时 500ms
// 2. 熄灭 LED (PC13 输出高电平)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // PC13 输出高电平,熄灭 LED
HAL_Delay(LED_DELAY_MS); // 延时 500ms
}
/* USER CODE END 3 */
代码解释:
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, ...): 这是 HAL 库提供的函数,用于操作指定 GPIO 端口的引脚。GPIOC: 我们配置的是 C 端口。GPIO_PIN_13: 我们配置的是第 13 号引脚。GPIO_PIN_RESET: 输出低电平 (0V)。GPIO_PIN_SET: 输出高电平 (3.3V)。
HAL_Delay(500): 这是 HAL 库提供的毫秒级延时函数,它会暂停程序的执行 500 毫秒。
步骤 4:编译和下载
- 编译:点击工具栏上的锤子图标(Build Project),或者使用快捷键
Ctrl + B,如果一切正常,下方控制台会显示Build Finished。 - 下载:
- 将你的 ST-Link 或 J-Link 调试器连接到开发板。
- 点击工具栏上的“ bug ”图标(Debug)。
- IDE 会自动连接到目标板,并将代码下载进去。
- 运行:下载完成后,点击工具栏上的绿色“播放”图标(Resume),程序开始运行,你应该能看到开发板上的 LED 开始闪烁了!
进阶技巧
-
使用外部中断
- 在 Pinout 视图中,将一个引脚(如
PA0)配置为GPIO_EXTI0。 - 在
GPIO设置中,可以配置为External Interrupt Mode with Rising/Falling/Both edge trigger。 - 在
NVIC Settings(在System Core->GPIO下) 中,使能EXTI line[15:10] interrupts。 - 在
main.c中,你需要实现void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)这个回调函数,当中断触发时,这个函数会被自动执行。
- 在 Pinout 视图中,将一个引脚(如
-
配置 UART 串口
- 选择两个引脚,如
PA9(TX) 和PA10(RX),分别配置为USART1_TX和USART1_RX。 - 在
Connectivity->USART1中设置波特率(如 115200)、数据位、停止位等。 - 生成代码后,在
main.c中使用HAL_UART_Transmit()和HAL_UART_Receive()函数收发数据。
- 选择两个引脚,如
-
添加中间件
- 在
Pinout & Configuration中,左侧点击Middleware。 - 你可以在这里配置 FreeRTOS、FatFs (文件系统)、USB、LWIP (网络协议栈) 等,CubeMX 会自动生成相应的配置文件和任务/线程框架。
- 在
总结与建议
- CubeMX 是你的“腿”:它帮你处理了繁琐的底层寄存器配置和外设初始化,让你能“站在巨人的肩膀上”。
- HAL 库是你的“手”:通过调用 HAL 库提供的标准函数,你可以方便地控制外设。
- 理解原理是关键:不要完全依赖图形化工具,在配置时,要思考这个配置背后发生了什么(配置 UART 时,它自动配置了哪些时钟和引脚复用),阅读芯片的参考手册是成为高手的必经之路。
- 多用多练:尝试用 CubeMX 实现更复杂的功能,如驱动 OLED 屏幕、读取温湿度传感器、通过蓝牙模块通信等,熟能生巧。
希望这份教程能帮助你顺利入门 STM32 开发!祝你玩得开心!
