STM32CubeMX 简介及使用
1. 什么是 STM32CubeMX?
STM32CubeMX 是 ST 官方推出的 STM32 配置工具,用于 图形化配置 STM32 外设,并 自动生成初始化代码,大大简化 STM32 开发流程。
特点
✅ 图形化界面,直观操作(不用手动查找寄存器配置)
✅ 支持 STM32 全系列 MCU(F0/F1/F3/F4/F7/H7/L0/L1/L4/G0 等)
✅ 自动生成 STM32 HAL/LL 库代码,减少开发时间
✅ 支持 Keil、IAR、STM32CubeIDE 等 IDE
✅ 可直接配置 FreeRTOS,多任务开发更方便
2. 安装 STM32CubeMX
步骤 1:下载 STM32CubeMX
- 进入 ST 官网:https://www.st.com/en/development-tools/stm32cubemx.html
- 下载安装包,双击安装
步骤 2:安装 STM32 固件包(MCU Support Package)
- 首次启动 STM32CubeMX 时,会提示下载 MCU 相关的固件库(如 STM32F1、F4、H7 等)
- 选择所需的 STM32 系列,点击 Install
- 等待下载完成,即可创建新工程
3. STM32CubeMX 使用步骤(从零开始配置 STM32 工程)
步骤 1:创建新工程
- 打开 STM32CubeMX,点击 New Project
- 选择 STM32 芯片或开发板
- 如果知道具体芯片型号(如 STM32F103C8T6),直接搜索选择
- 如果使用官方开发板(如 NUCLEO-F103RB),可选择 Board Selector
- 点击 Start Project 进入配置界面
步骤 2:配置芯片外设
STM32CubeMX 提供了一个 MCU 引脚视图,可以直接点击 MCU 引脚 来启用外设功能,如 GPIO、UART、I2C、SPI、PWM 等。
(1) 配置 GPIO
- 选择需要使用的 输入/输出引脚,设置模式:
- 输入模式(Input) – 适用于按钮、传感器输入
- 输出模式(Output) – 适用于 LED、蜂鸣器
- 推挽/开漏模式(Push-Pull/Open Drain) – 适用于 I2C、驱动负载
(2) 配置 UART 串口
- 选择 USART1(或 USART2、UART4),模式设为 Asynchronous
- 在 Parameter Settings 界面修改波特率(默认 115200)
- 启用 NVIC(中断)支持,方便接收数据
(3) 配置 I2C
- 选择 I2C1(或 I2C2),模式设为 I2C
- 选择 Fast Mode (400kHz) 或 Standard Mode (100kHz)
(4) 配置 PWM
- 选择 TIM1、TIM2 或 TIM3,模式设为 PWM Generation
- 设置 PWM 频率、占空比,可用于 LED 亮度调节、电机控制
(5) 配置时钟
- 进入 Clock Configuration 选项卡
- 选择 HSE(外部晶振),并配置系统时钟(System Clock),常见配置:
- 8MHz 外部晶振,系统时钟设为 72MHz(F1 系列)
- 8MHz 外部晶振,系统时钟设为 168MHz(F4 系列)
- 使用 PLL 倍频提高系统主频
步骤 3:生成代码
- 在 Project Manager 界面:
- Project Name:填写工程名称(如
STM32_UART_Test
) - Toolchain/IDE:选择编译器(Keil / STM32CubeIDE / IAR)
- Code Generator:勾选 Generate peripheral initialization as a pair of .c/.h files
- Project Name:填写工程名称(如
- 点击 Generate Code,STM32CubeMX 会自动生成 STM32 HAL 库代码
4. STM32CubeMX 生成的代码结构
生成的 STM32 工程目录结构如下:
│── Core/
│ ├── Inc/ // 头文件目录
│ │ ├── main.h // 主函数头文件
│ │ ├── stm32f1xx_hal_conf.h // HAL 库配置
│ ├── Src/ // 源代码目录
│ │ ├── main.c // 主函数入口
│ │ ├── stm32f1xx_it.c // 中断处理
│── Drivers/
│ ├── STM32F1xx_HAL_Driver/ // HAL 库
│── Middlewares/ // 中间件(如 FreeRTOS)
│── Startup/ // 启动文件
│── STM32F1xx_HAL_Driver/ // STM32 HAL 库
│── Makefile // GNU Makefile(适用于 CubeIDE)
│── .cproject / .project // Eclipse 工程文件(适用于 CubeIDE)
5. 如何编写代码并下载到 STM32
步骤 1:打开工程
- 如果选择 Keil,直接用 Keil MDK 打开
.uvprojx
工程文件 - 如果选择 STM32CubeIDE,直接用 CubeIDE 导入
步骤 2:编写代码
在 main.c
里,我们会看到 MX_GPIO_Init()
、MX_USART1_UART_Init()
之类的初始化函数。例如:
int main(void) {
HAL_Init(); // 初始化 HAL 库
SystemClock_Config(); // 配置系统时钟
MX_GPIO_Init(); // 初始化 GPIO
MX_USART1_UART_Init(); // 初始化串口
while (1) {
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 翻转 LED
HAL_Delay(500);
}
}
步骤 3:编译 & 下载
- 连接 ST-Link 仿真器
- 点击 编译(Build)
- 点击 下载(Download),烧录到 STM32
6. 高级应用
(1) FreeRTOS 多任务
- 在 STM32CubeMX Middleware 选项中 启用 FreeRTOS
- STM32CubeMX 会自动生成任务调度代码
- 在
cmsis_os.h
里创建 FreeRTOS 任务
void Task1(void *argument) {
while (1) {
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
osDelay(1000);
}
}
(2) 使用 LL 库
如果需要更高效的代码(比 HAL 库快),可以:
- 在 Project Manager → Advanced Settings 选择 LL 库
- STM32CubeMX 生成的代码会使用 LL API(寄存器级操作)
7. 结论
✅ STM32CubeMX 是 STM32 开发必备工具,适合新手和专业开发者
✅ 自动生成 HAL/LL 初始化代码,大幅减少手写寄存器代码的工作量
✅ 支持 Keil、IAR、STM32CubeIDE,适用于各种开发需求
✅ 支持 FreeRTOS,方便开发多任务系统
📌 建议新手从 STM32CubeMX + STM32CubeIDE 开始,逐步深入学习 HAL、LL、裸机开发! 🚀