使用 STM32CubeMX 生成 STM32 工程
STM32CubeMX 是 ST 官方提供的 STM32 图形化配置工具,可以快速配置外设并自动生成代码,大幅减少手写寄存器的工作量。以下是完整的 STM32CubeMX 工程创建流程。
1. 安装 STM32CubeMX
1.1 下载 STM32CubeMX
- 访问 ST 官网:https://www.st.com/en/development-tools/stm32cubemx.html
- 选择适合自己系统的版本(Windows/macOS/Linux)
- 下载完成后运行安装程序
1.2 安装 STM32CubeMX
- 运行安装程序,选择默认安装路径
- 安装完成后,运行 STM32CubeMX
- 如果是 第一次使用,会提示下载 STM32 HAL 库(建议下载所需的 STM32 系列,如 STM32F1/F4)
2. 创建 STM32 工程
步骤 1:新建工程
- 打开 STM32CubeMX,点击 New Project
- 选择 STM32 芯片或开发板
- 芯片选择方式:在 MCU Selector 中,输入 STM32F103C8T6(例如 F1 系列)或 STM32F407VG(例如 F4 系列)
- 开发板选择方式:在 Board Selector 中,选择 NUCLEO-F103RB(例如官方开发板)
- 点击 Start Project 进入工程配置界面
步骤 2:配置 STM32 外设
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 库代码
3. 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)
4. 在 STM32CubeIDE/Keil 中编写代码
4.1 打开工程
- Keil 用户:直接用 Keil 打开
.uvprojx
工程文件 - STM32CubeIDE 用户:直接导入 STM32CubeIDE 工程
4.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);
}
}
5. 代码下载 & 调试
5.1 使用 Keil 进行代码烧录
- 编写代码后,点击 Build(F7)
- 选择 Download(Ctrl+F8),代码将烧录到 STM32
- 选择 Debug(F5),进入在线调试模式
5.2 使用 STM32CubeIDE 进行代码烧录
- 点击 Build(Ctrl+B) 编译代码
- 选择 Debug > Run,代码将烧录到 STM32
- 进入 Debug 模式,可使用 断点、变量监测、单步执行
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);
}
}
7. 结论
✅ STM32CubeMX 是 STM32 开发必备工具,适合新手和专业开发者
✅ 自动生成 HAL/LL 初始化代码,大幅减少手写寄存器代码的工作量
✅ 支持 Keil、IAR、STM32CubeIDE,适用于各种开发需求
✅ 支持 FreeRTOS,方便开发多任务系统
📌 建议新手从 STM32CubeMX + STM32CubeIDE 开始,逐步深入学习 HAL、LL、裸机开发! 🚀