【STM32 HAL库】01 - LED闪烁实验(GPIO输出)

简介: 本实验基于STM32F407ZGT6(野火霸天虎板),使用STM32CubeMX配置PF6为开漏输出驱动共阳LED,结合HAL库实现1秒周期闪烁。涵盖时钟树设置、GPIO模式选择、SWD调试配置及标准代码结构,是HAL开发入门必做实践。(239字)

【STM32 HAL库】01 - LED闪烁实验(GPIO输出)

一、实验目的

  1. 熟悉 STM32CubeMX 图形化配置工具的基本使用流程

  2. 掌握 GPIO 引脚配置为输出模式的方法

  3. 理解 HAL 库中 GPIO 相关函数的使用

  4. 实现 LED 周期性闪烁,验证开发板下载、运行链路正常

二、硬件平台

|
项目
|
说明

|
| --- | --- |
|
开发板
|
野火霸天虎 STM32F407ZG
|
|
主控芯片
|
STM32F407ZGT6(LQFP144)
|
|
LED 引脚
|
PF6(红色 LED,开漏输出,低电平点亮)
|
|
外部晶振
|
HSE = 25 MHz
|
|
系统时钟
|
SYSCLK = 168 MHz
|

野火 LED 电路说明:霸天虎板上的 LED 采用共阳极接法,GPIO 配置为开漏输出(Open Drain),当引脚输出低电平时 LED 点亮,输出高电平时 LED 熄灭。

三、软件环境

|
软件
|
版本/说明

|
| --- | --- |
|
STM32CubeMX
|
v6.x(生成初始化代码)
|
|
Keil MDK-ARM
|
v5(编译+下载)
|
|
固件包
|
STM32Cube FW_F4
|
|
下载器
|
ST-LINK / CMSIS-DAP
|

四、CubeMX 配置步骤

4.1 选择芯片

打开 STM32CubeMX → ACCESS TO MCU SELECTOR → 搜索 STM32F407ZG → 选择 STM32F407ZGTx → Start Project。

4.2 配置 RCC(外部晶振)

左侧 System Core → RCC:

  • High Speed Clock (HSE) 选择 Crystal/Ceramic Resonator(外部晶振)

4.3 配置时钟树

切换到 Clock Configuration 标签页:

|
配置项
|
值

|
| --- | --- |
|
HSE 输入频率
|
25 MHz
|
|
PLL 来源
|
HSE
|
|
/M (PLLM)
|
25
|
|
*N (PLLN)
|
336
|
|
/P (PLLP)
|
2
|
|
系统时钟来源
|
PLLCLK
|
|
AHB 预分频
|
/1
|
|
APB1 预分频
|
/4
|
|
APB2 预分频
|
/2
|

最终 SYSCLK = 168 MHz,APB1 = 42 MHz,APB2 = 84 MHz。

4.4 配置 LED 引脚 PF6

在芯片引脚图上找到 PF6,左键选择 GPIO_Output。

点击左侧 System Core → GPIO,找到 PF6 进行配置:

|
配置项
|
值

|
| --- | --- |
|
GPIO output level
|
Low(初始低电平,LED 亮)
|
|
GPIO mode
|
Output Open Drain(开漏输出)
|
|
GPIO Pull-up/Pull-down
|
No pull-up and no pull-down
|
|
Maximum output speed
|
Low
|
|
User Label
|
LED_R
|

⚠️ 关键:GPIO mode 必须选择开漏输出(Open Drain),不能选推挽(Push Pull),否则与野火板的硬件电路不匹配。

4.5 配置调试接口

左侧 System Core → SYS:

  • Debug 选择 Serial Wire(SWD 调试接口)

⚠️ 必须配置:如果不选 Serial Wire,下载一次后 PA13/PA14 会被复用,仿真器将无法再次连接芯片,只能用串口 ISP 救砖。

4.6 工程设置并生成代码

切换到 Project Manager 标签页:

|
配置项
|
值

|
| --- | --- |
|
Project Name
|
01_LED_Blink
|
|
Project Location
|
自定义工程目录
|
|
Toolchain / IDE
|
MDK-ARM V5
|

Code Generator 标签页勾选:

  • ✅ Generate peripheral initialization as a pair of '.c/.h' files per peripheral

  • ✅ Copy all used libraries into the project folder

点击右上角 GENERATE CODE 生成代码。

五、代码实现

生成代码后,打开 Core/Src/main.c,在 while(1) 循环的 USER CODE BEGIN 3 区域添加 LED 翻转代码:

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
   
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(LED_R_GPIO_Port, LED_R_Pin);  /* 翻转 LED 电平 */
    HAL_Delay(1000);                                  /* 延时 1 秒 */
}
/* USER CODE END 3 */

核心函数说明

|
函数
|
作用

|
| --- | --- |
|
HAL_GPIO_TogglePin(GPIOx, GPIO_Pin)
|
翻转指定 GPIO 引脚的输出电平
|
|
HAL_Delay(uint32_t Delay)
|
毫秒级延时(基于 SysTick)
|

LED_R_GPIO_Port 和 LED_R_Pin 宏定义在 Core/Inc/main.h 中,由 CubeMX 根据 User Label 自动生成:

#define LED_R_Pin GPIO_PIN_6
#define LED_R_GPIO_Port GPIOF

GPIO 初始化代码(gpio.c,CubeMX 自动生成)

void MX_GPIO_Init(void)
{
   
    GPIO_InitTypeDef GPIO_InitStruct = {
   0};

    __HAL_RCC_GPIOF_CLK_ENABLE();   /* 使能 GPIOF 时钟 */
    __HAL_RCC_GPIOH_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();

    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET);  /* 初始低电平 */

    GPIO_InitStruct.Pin = GPIO_PIN_6;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;             /* 开漏输出 */
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
}

六、编译与下载

  1. 编译:Keil 中按 F7 或点击 Build 按钮,确认 0 Error(s)。

  2. 配置下载器:魔术棒 → Debug 选择 ST-Link Debugger 或 CMSIS-DAP Debugger → Settings 确认识别到芯片。

  3. 下载:按 F8 或点击 Load 按钮。

  4. 验证:下载成功后,LED_R 以 1 秒为周期闪烁。

七、实验现象

板载红色 LED(LED_R)每秒亮灭一次,循环闪烁。

八、常见问题

|
问题
|
原因
|
解决方法

|
| --- | --- | --- |
|
LED 不亮
|
下载后未自动运行
|
勾选 Reset and Run,或按复位键
|
|
LED 微亮但不闪烁
|
GPIO 配成推挽输出
|
改为开漏输出(Open Drain)
|
|
编译报错找不到头文件
|
Include 路径未配置
|
检查 Keil 工程 Include Paths
|
|
仿真器无法连接
|
SYS Debug 未配置 Serial Wire
|
用串口 ISP 重新下载,或检查接线
|
|
延时不准
|
HSE 频率配错
|
确认 HSE = 25 MHz(野火板不是 8 MHz)
|

九、工程目录结构

01_LED_Blink/
├── Core/
│   ├── Inc/
│   │   ├── main.h              ← LED_R_Pin 等宏定义
│   │   ├── gpio.h
│   │   ├── stm32f4xx_hal_conf.h
│   │   └── stm32f4xx_it.h
│   └── Src/
│       ├── main.c              ← 主循环(LED 翻转逻辑)
│       ├── gpio.c              ← GPIO 初始化(CubeMX 生成)
│       ├── stm32f4xx_hal_msp.c
│       ├── stm32f4xx_it.c      ← 中断服务函数
│       └── system_stm32f4xx.c  ← 系统时钟
├── Drivers/                    ← STM32 HAL 库源码
├── MDK-ARM/                    ← Keil 工程文件
└── 01_LED_Blink.ioc            ← CubeMX 配置文件

提示:修改代码时务必写在 /* USER CODE BEGIN */ 和 /* USER CODE END */ 之间,否则重新用 CubeMX 生成代码时会被覆盖。

相关文章
|
4天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
5748 8
|
2天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1008 2
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
16天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3228 9
|
3天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
428 2
|
15天前
|
IDE 开发工具
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
Qoder国际版上线全新内置大模型Sonus(/ˈsoʊnəs/),全球领先,专精超长任务执行与电脑操作(Computer Use)。配合Qoder桌面端0.2.3版本,可自主完成编程、金融建模、科研及表格制作等复杂工作。现全面支持Qoder全系产品,效率提升3.2倍。
1806 8
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
|
11天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
1187 1

热门文章

最新文章