STM32CubeMX
- STM32CubeMX 是 ST 官方推出的 STM32 芯片配置工具,核心作用是图形化配置芯片参数、自动生成初始化代码,覆盖从芯片选型到工程导出的全流程,无需手动编写底层 HAL/LL 库代码,大幅降低 STM32 开发门槛。
| 功能模块 | 作用 | 关键细节 |
|---|---|---|
| 芯片选型 | 筛选/选择目标 STM32 型号 | 支持按系列(F1/F4/L4/H7)、封装、外设、主频筛选 |
| 引脚配置 | 可视化分配引脚、配置复用功能 | 自动检测引脚冲突(红色标记),支持拖拽式配置 |
| 外设配置 | 配置 UART/CAN/I2C/SPI/DMA 等外设 | 支持 HAL/LL 库切换,配置中断、模式、参数 |
| 时钟树配置 | 图形化设置时钟源(HSE/HSI/LSE/LSI)、分频系数 | 自动校验时钟参数合法性,避免超频/参数错误 |
| 电源管理 | 配置低功耗模式(STOP/STANDBY)、电压调节器 | 适配不同供电模式,优化功耗 |
| 工程生成 | 导出至多种开发环境 | 支持 STM32CubeIDE、MDK-ARM、IAR、Makefile 等 |
| 固件管理 | 下载/管理 STM32Cube FW 固件包 | 绑定工程与固件版本,支持版本迁移 |
使用流程
环境准备
-
下载安装:从 ST 官网(STM32CubeMX 下载)获取最新版本(建议 LTS 版,如 v6.10.0);MDK5.40发布,修改了下载地址链接方式;
-
安装固件包:首次打开后,在「Help → Manage STM32Cube Packages」下载目标系列固件(如 FW_F1 V1.8.5)。
新建工程
-
点击「New Project」→ 搜索芯片型号(如 STM32F103C8T6)→ 选中并确认;


-
进入「Pinout & Configuration」:
- 配置引脚:在右侧引脚图中点击引脚,选择复用功能(如 PA9 → USART1_TX);
- 配置外设:在左侧「Categories」中选择外设(如 USART1),设置模式(异步)、波特率等;

-
进入「Clock Configuration」:设置 HSE 频率(如 8MHz),配置 PLL 分频,最终设置 SYSCLK 为 72MHz;
-
进入「Project Manager」:
- 设置工程名、存储路径、开发环境(如 MDK-ARM V5);
- 「Code Generator」中勾选「Copy all used libraries into the project folder」(避免库文件缺失);
-
点击「GENERATE CODE」→ 生成工程,可直接用对应开发环境打开。


项目结构

- 针对 不同 STM32 硬件架构(内核类型) 使用STM32CubeMX 生成的标准模板如下:
Cortex-M3 架构(如 STM32F103C8T6)
Project_F1/
├── Core/
│ ├── Src/
│ │ ├── main.c
│ │ ├── stm32f1xx_hal_msp.c
│ │ └── syscalls.c
│ └── Inc/
│ ├── main.h
│ └── stm32f1xx_hal_conf.h
├── Drivers/
│ ├── CMSIS/
│ │ ├── Include/core_cm3.h # ← M3 内核头文件
│ │ └── Device/ST/STM32F1xx/
│ └── STM32F1xx_HAL_Driver/
├── MDK-ARM/
│ └── Project_F1.uvprojx
├── STM32F103C8TX.ioc
└── README.md
Cortex-M4 架构(如 STM32F407VGT6)
- 单核 M4,可能带 FPU,代码在
Core/下。
Project_F4/
├── Core/
│ ├── Src/
│ │ ├── main.c
│ │ ├── stm32f4xx_hal_msp.c
│ │ └── system_stm32f4xx.c
│ └── Inc/
│ ├── main.h
│ └── stm32f4xx_hal_conf.h
├── Drivers/
│ ├── CMSIS/
│ │ ├── Include/core_cm4.h # ← M4 内核头文件
│ │ └── Device/ST/STM32F4xx/
│ └── STM32F4xx_HAL_Driver/
├── MDK-ARM/
├── STM32F407VGTx.ioc
└── README.md
Cortex-M7 单核架构(如 STM32H743ZITx)
Project_H7_SingleCore/
├── Core/
│ ├── Src/
│ │ ├── main.c
│ │ ├── stm32h7xx_hal_msp.c
│ │ └── system_stm32h7xx.c
│ └── Inc/
│ ├── main.h
│ └── stm32h7xx_hal_conf.h
├── Drivers/
│ ├── CMSIS/
│ │ ├── Include/core_cm7.h # ← M7 内核头文件
│ │ └── Device/ST/STM32H7xx/
│ └── STM32H7xx_HAL_Driver/
├── MDK-ARM/
├── STM32H743ZITx.ioc
└── README.md
Cortex-M7 + Cortex-M4 双核架构(如 STM32H747XI)
- 有双核 H7 需要
CM7/和CM4/分离目录,因为要分别编译两个独立的可执行镜像。
Project_H7_DualCore/
├── CM7/ # ← 主核(M7)专用
│ ├── Src/
│ │ ├── main.c # M7 的主程序
│ │ ├── startup_stm32h747xx.s
│ │ └── system_stm32h7xx.c
│ └── Inc/
│ ├── main.h
│ └── stm32h7xx_hal_conf.h
├── CM4/ # ← 协处理器(M4)专用
│ ├── Src/
│ │ ├── main.c # M4 的主程序
│ │ ├── startup_stm32h747xx.s
│ │ └── system_stm32h7xx.c
│ └── Inc/
│ ├── main.h
│ └── stm32h7xx_hal_conf.h
├── Common/ # ← 两核共享的代码(如 IPC、公共宏)
│ ├── shared_buffer.c
│ └── ipc.h
├── Drivers/
│ ├── CMSIS/
│ │ ├── Include/core_cm7.h
│ │ ├── Include/core_cm4.h # ← 两个内核头文件都存在
│ │ └── Device/ST/STM32H7xx/
│ └── STM32H7xx_HAL_Driver/
├── MDK-ARM/
│ ├── Project_CM7.uvprojx # M7 工程
│ └── Project_CM4.uvprojx # M4 工程
├── STM32H747XIHx.ioc # CubeMX 双核配置文件
└── README.md
文件夹说明
1. CM4
- 作用:存放与 Cortex-M4 内核相关的代码或配置。
- 常见内容:可能包含启动文件(startup.s)、系统初始化文件、中断向量表等,适用于 STM32F4/F7 等支持 M4 内核的芯片。
2. CM7
- 作用:存放与 Cortex-M7 内核相关的代码。
- 常见内容:用于 STM32H7 系列等高性能 MCU 的主内核代码,包括启动文件、系统初始化等。
- 提示:如果你的芯片是 STM32H7,可能会同时存在 CM4 和 CM7 文件夹,分别对应主核和协处理器。
3. Common
- 作用:存放项目中多个模块或芯片共用的代码或头文件。
- 常见内容:
- 公共函数库(如延时、调试打印)
- 配置宏定义
- 通用驱动接口
- 共享的硬件抽象层(HAL)封装
- 用途:提高代码复用性,便于跨平台移植。
4. Drivers
- 作用:存放 STM32 官方提供的 HAL(Hardware Abstraction Layer)库或 LL(Low-Layer)库。
- 常见内容:
stm32f4xx_hal_driver(具体型号)cmsis(Cortex-M 标准软件接口)System_stm32f4xx.c(系统时钟初始化)
- 来源:通常由 STM32CubeMX 自动生成或从 STM32 官方固件包中复制。
5. HARDWARE
- 作用:存放与硬件相关的配置、外设驱动或板级支持包(BSP)。
- 常见内容:
- LED、按键、LCD、传感器等外设驱动
- 板级初始化代码(如 GPIO、CLK 配置)
- 硬件抽象层(HAL)的扩展
- 用途:实现具体硬件功能,便于硬件更换时修改此目录。
6. MDK-ARM
- 作用:存放 Keil MDK(Microcontroller Development Kit)工程文件。
- 常见内容:
.uvprojx或.uvoptx:Keil 工程配置文件- 编译输出文件(如
.axf,.hex,.bin) - 项目设置(编译器选项、链接脚本等)
- 用途:在 Keil IDE 中打开并编译项目。

7. Middlewares
- 作用:存放第三方中间件或协议栈。
- 常见内容:
- FreeRTOS(实时操作系统)
- LWIP(轻量级 TCP/IP 协议栈)
- FatFS(文件系统)
- USB、CAN、Ethernet 协议栈
- 用途:集成复杂功能,减少底层开发工作。
8.隐藏文件 .mxproject
- 类型:MXPROJECT 文件(STM32CubeMX 项目文件)
- 作用:保存 STM32CubeMX 的配置信息,包括:
- 芯片型号
- 时钟树配置
- 外设使能(如 UART、I2C、SPI)
- 中断配置
- GPIO 引脚分配
- 用途:
.mxproject是工程元数据存储文件,作用是:
记录当前工程的打开状态、界面布局(如引脚图的缩放比例、配置面板的展开状态);关联.ioc文件与本地固件包、工具链的路径映射;保存用户的操作历史(如最近修改的配置项),提升二次打开工程的效率。该文件不存储核心硬件配置(核心配置在.ioc中),仅作为本地工程的辅助缓存,删除后不影响工程的核心配置与代码生成。
[PreviousGenFiles]
AdvancedFolderStructure=true
HeaderFileListSize=4
HeaderFiles#0=..\Core\Inc\gpio.h
HeaderFiles#1=..\Core\Inc\stm32f1xx_it.h
HeaderFiles#2=..\Core\Inc\stm32f1xx_hal_conf.h
HeaderFiles#3=..\Core\Inc\main.h
HeaderFolderListSize=1
HeaderPath#0=..\Core\Inc
HeaderFiles=;
SourceFileListSize=4
SourceFiles#0=..\Core\Src\gpio.c
SourceFiles#1=..\Core\Src\stm32f1xx_it.c
SourceFiles#2=..\Core\Src\stm32f1xx_hal_msp.c
SourceFiles#3=..\Core\Src\main.c
SourceFolderListSize=1
SourcePath#0=..\Core\Src
SourceFiles=;
[PreviousLibFiles]
LibFiles=Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103x6.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h;
[PreviousUsedKeilFiles]
SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\stm32f1xx_it.c;..\Core\Src\stm32f1xx_hal_msp.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;;;
HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc;
CDefines=USE_HAL_DRIVER;STM32F103x6;USE_HAL_DRIVER;USE_HAL_DRIVER;
常见问题与解决
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 打开 .ioc 提示固件包缺失 | 本地未安装工程绑定的固件版本 | 在「Manage STM32Cube Packages」下载对应固件 |
| 生成代码后编译报错(引脚冲突) | 同一引脚被分配多个功能 | 在「Pinout」标签查看红色冲突引脚,取消重复配置 |
| 导出 MDK 工程后无 HAL 库 | 未勾选「Copy all used libraries」 | 重新配置「Code Generator」并生成代码 |
| 时钟配置提示「Invalid clock configuration」 | 分频/倍频参数超出芯片范围 | 参考芯片手册调整 PLL 系数,确保 SYSCLK 不超主频 |
| 生成代码后外设无法工作 | 中断/DMA 未启用,或初始化代码未调用 | 在 CubeMX 中启用中断/DMA,确保 MX_XXX_Init() 被调用 |
工程维护/迁移
- 打开旧工程(.ioc 文件):若提示固件版本不匹配,选择「Migrate」(升级固件)或「Continue」(保持兼容);
- 修改配置:随时打开 .ioc 文件调整引脚/外设/时钟,重新生成代码(用户代码写在
/* USER CODE BEGIN/END */间不会被覆盖)。
进阶技巧
- 配置复用:将成熟的 .ioc 配置另存为模板(「File → Save as Template」),新项目直接复用;
- HAL/LL 库切换:在「Project Manager → Settings → Toolchain/IDE」中选择「Low Layer (LL)」,生成更轻量化的 LL 库代码;
- RTOS 集成:在「Middleware」中选择 FreeRTOS/ThreadX,自动生成 RTOS 初始化代码,适配外设中断;
- 版本管理:记录 .ioc 文件对应的 CubeMX 版本和固件版本,团队开发统一工具版本,避免兼容问题;
- 离线使用:提前下载所有需要的固件包,在「Preferences → Offline Mode」中启用离线模式,无需联网。
版本选择
| 版本类型 | 推荐版本 | 适用场景 |
|---|---|---|
| 长期支持版(LTS) | v6.10.0、v6.8.0 | 量产项目、稳定性优先 |
| 最新版 | 官网最新版 | 尝新功能、适配新款 STM32 芯片 |
| 旧版本 | v5.3.0、v6.0.0 | 维护旧项目,兼容历史固件 |
1302

被折叠的 条评论
为什么被折叠?



