使用 STM32CubeMX 生成工程

使用 STM32CubeMX 生成 STM32 工程

STM32CubeMX 是 ST 官方提供的 STM32 图形化配置工具,可以快速配置外设自动生成代码,大幅减少手写寄存器的工作量。以下是完整的 STM32CubeMX 工程创建流程


1. 安装 STM32CubeMX

1.1 下载 STM32CubeMX

1.2 安装 STM32CubeMX

  1. 运行安装程序,选择默认安装路径
  2. 安装完成后,运行 STM32CubeMX
  3. 如果是 第一次使用,会提示下载 STM32 HAL 库(建议下载所需的 STM32 系列,如 STM32F1/F4)

2. 创建 STM32 工程

步骤 1:新建工程

  1. 打开 STM32CubeMX,点击 New Project
  2. 选择 STM32 芯片或开发板
    • 芯片选择方式:在 MCU Selector 中,输入 STM32F103C8T6(例如 F1 系列)或 STM32F407VG(例如 F4 系列)
    • 开发板选择方式:在 Board Selector 中,选择 NUCLEO-F103RB(例如官方开发板)
  3. 点击 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
  • 点击 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、裸机开发! 🚀

评论
列表