杰瑞科技汇

STM32CubeMX使用教程,如何快速上手配置?

STM32CubeMX 完整使用教程

什么是 STM32CubeMX?

STM32CubeMX 是 ST 公司官方推出的免费图形化配置工具,它可以帮助你:

STM32CubeMX使用教程,如何快速上手配置?-图1
(图片来源网络,侵删)
  1. 图形化配置引脚:通过拖拽的方式选择引脚功能(如 GPIO, UART, I2C, SPI 等)。
  2. 生成初始化代码:根据你的配置,自动生成 C 语言初始化代码,包括外设的初始化结构体和底层驱动文件。
  3. 集成 HAL/LL/LL 库:支持硬件抽象层、中间件抽象层和直接访问层三种编程方式,让你能更专注于应用逻辑,而不是底层寄存器操作。
  4. 项目生成:直接为你生成基于 Keil MDK, IAR, STM32CubeIDE 等主流 IDE 的完整项目工程。

一句话总结:STM32CubeMX 是一个“图形化配置 + 自动代码生成”的工具,极大地降低了 STM32 的开发门槛,提高了开发效率。


环境准备

在开始之前,请确保你已经安装了以下软件:

  1. STM32CubeMX:ST 官网下载并安装。
  2. STM32CubeIDE:ST 官方集成开发环境,集成了代码编辑器和编译器,推荐使用,也可以使用 Keil MDK 或 IAR。
  3. STM32CubeF4 / F7 / L4... 等 MCU 包:在安装 CubeMX 时,通常会提示你安装对应系列的 MCU 包,包含了外设的中间件库(如 FatFs, FreeRTOS, USB 等)。

创建第一个项目:点亮一个 LED

我们以最经典的“点灯”实验为例,使用 STM32F103C8T6 这款芯片,目标是配置一个 GPIO 引脚为输出模式,通过代码控制它的高低电平来点亮或熄灭 LED。

步骤 1:新建项目

  1. 打开 STM32CubeMX。
  2. 点击 File -> New Project
  3. 在弹出的窗口中,左侧选择你的芯片型号,可以通过搜索框快速找到 STM32F103C8
  4. 选择 STM32F103C8T6,然后点击 START PROJECT

步骤 2:选择系统时钟

这是 CubeMX 的核心功能之一,系统时钟是 MCU 运行的“心跳”,配置好时钟才能让外设正常工作。

STM32CubeMX使用教程,如何快速上手配置?-图2
(图片来源网络,侵删)
  1. 在左侧的 Categories 中,点击 Pinout & Configuration

  2. 在右侧的 System Core 选项卡中,点击 RCC

  3. High Speed Clock (HSE) 选项中,选择 Crystal/Ceramic Resonator,这表示你使用了外部 8MHz 晶振。

  4. 点击 Clock Configuration 标签页,进入时钟配置界面。

    STM32CubeMX使用教程,如何快速上手配置?-图3
    (图片来源网络,侵删)
  5. 你可以看到时钟树的图形化界面,STM32CubeMX 会自动计算和配置。

    • 确保 HSE (外部高速时钟) 已启用。
    • 点击 PLLCLK Source,选择 HSE
    • HCLK (CPU 主时钟) 的下拉菜单中,选择 72MHz,这是 STM32F103 的最高主频。
    • 你会看到左侧的 SYSAHB/APB 总线的时钟频率会自动被配置好。
    • 点击右上角的 Save 图标保存配置。

步骤 3:配置 GPIO 引脚

  1. 回到 Pinout & Configuration 界面。
  2. 在中间的芯片引脚图上,找到连接了 LED 的引脚,对于 STM32F103C8T6Blue Pill 开发板,LED 通常连接在 PC13 引脚。
  3. 用鼠标左键点击 PC13 引脚,会弹出一个功能选择菜单。
  4. 选择 GPIO_Output,该引脚的颜色会变为橙色,表示它已被配置为用户自定义的 GPIO 功能。

步骤 4:配置 GPIO 参数

  1. 在左侧的 Categories 中,点击 GPIO
  2. 在右侧的 GPIO 设置页面中,你可以对 PC13 进行详细配置:
    • GPIO mode: Output Push-Pull (推挽输出,这是最常用的模式)。
    • GPIO pull-up/Pull-down: No pull-up and no pull-down (不上下拉)。
    • User label: 可以给这个引脚起一个名字,LED_GREEN,方便在代码中识别。

步骤 5:生成项目代码

  1. 点击右上角的 GENERATE CODE 按钮。
  2. 在弹出的窗口中,选择你的项目保存路径。
  3. Project Manager 设置:
    • Project Name: 给你的项目起个名字,LED_Blink
    • Toolchain / IDE: 选择你打算使用的 IDE,STM32CubeIDE
    • Toolchain/IDE: 如果选择 STM32CubeIDE,可以指定其安装路径。
  4. 点击 GENERATE CODE,等待几秒钟,项目文件就会生成在你指定的文件夹中。

在 STM32CubeIDE 中编写和运行代码

一个带有 HAL 库初始化代码的完整项目已经为你准备好了,我们只需要在主函数中添加控制 LED 的逻辑。

步骤 1:打开项目

  1. 打开 STM32CubeIDE。
  2. 点击 File -> Import
  3. 选择 Existing Projects into Workspace,然后浏览并选择刚刚用 CubeMX 生成的 LED_Blink 文件夹。
  4. 点击 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:编译和下载

  1. 编译:点击工具栏上的锤子图标(Build Project),或者使用快捷键 Ctrl + B,如果一切正常,下方控制台会显示 Build Finished
  2. 下载
    • 将你的 ST-Link 或 J-Link 调试器连接到开发板。
    • 点击工具栏上的“ bug ”图标(Debug)。
    • IDE 会自动连接到目标板,并将代码下载进去。
  3. 运行:下载完成后,点击工具栏上的绿色“播放”图标(Resume),程序开始运行,你应该能看到开发板上的 LED 开始闪烁了!

进阶技巧

  1. 使用外部中断

    • 在 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) 这个回调函数,当中断触发时,这个函数会被自动执行。
  2. 配置 UART 串口

    • 选择两个引脚,如 PA9 (TX) 和 PA10 (RX),分别配置为 USART1_TXUSART1_RX
    • Connectivity -> USART1 中设置波特率(如 115200)、数据位、停止位等。
    • 生成代码后,在 main.c 中使用 HAL_UART_Transmit()HAL_UART_Receive() 函数收发数据。
  3. 添加中间件

    • Pinout & Configuration 中,左侧点击 Middleware
    • 你可以在这里配置 FreeRTOS、FatFs (文件系统)、USB、LWIP (网络协议栈) 等,CubeMX 会自动生成相应的配置文件和任务/线程框架。

总结与建议

  • CubeMX 是你的“腿”:它帮你处理了繁琐的底层寄存器配置和外设初始化,让你能“站在巨人的肩膀上”。
  • HAL 库是你的“手”:通过调用 HAL 库提供的标准函数,你可以方便地控制外设。
  • 理解原理是关键:不要完全依赖图形化工具,在配置时,要思考这个配置背后发生了什么(配置 UART 时,它自动配置了哪些时钟和引脚复用),阅读芯片的参考手册是成为高手的必经之路。
  • 多用多练:尝试用 CubeMX 实现更复杂的功能,如驱动 OLED 屏幕、读取温湿度传感器、通过蓝牙模块通信等,熟能生巧。

希望这份教程能帮助你顺利入门 STM32 开发!祝你玩得开心!

分享:
扫描分享到社交APP
上一篇
下一篇