【STM32 HAL库】01 - LED闪烁实验GPIO输出一、实验目的熟悉 STM32CubeMX 图形化配置工具的基本使用流程掌握 GPIO 引脚配置为输出模式的方法理解 HAL 库中 GPIO 相关函数的使用实现 LED 周期性闪烁验证开发板下载、运行链路正常二、硬件平台项目说明开发板野火霸天虎 STM32F407ZG主控芯片STM32F407ZGT6LQFP144LED 引脚PF6红色 LED开漏输出低电平点亮外部晶振HSE 25 MHz系统时钟SYSCLK 168 MHz野火 LED 电路说明霸天虎板上的 LED 采用共阳极接法GPIO 配置为开漏输出Open Drain当引脚输出低电平时 LED 点亮输出高电平时 LED 熄灭。三、软件环境软件版本/说明STM32CubeMXv6.x生成初始化代码Keil MDK-ARMv5编译下载固件包STM32Cube FW_F4下载器ST-LINK / CMSIS-DAP四、CubeMX 配置步骤4.1 选择芯片打开 STM32CubeMX →ACCESS TO MCU SELECTOR→ 搜索STM32F407ZG→ 选择STM32F407ZGTx→Start Project。4.2 配置 RCC外部晶振左侧System Core → RCCHigh Speed Clock (HSE) 选择Crystal/Ceramic Resonator外部晶振4.3 配置时钟树切换到Clock Configuration标签页配置项值HSE 输入频率25 MHzPLL 来源HSE/M (PLLM)25*N (PLLN)336/P (PLLP)2系统时钟来源PLLCLKAHB 预分频/1APB1 预分频/4APB2 预分频/2最终 SYSCLK 168 MHzAPB1 42 MHzAPB2 84 MHz。4.4 配置 LED 引脚 PF6在芯片引脚图上找到PF6左键选择GPIO_Output。点击左侧System Core → GPIO找到 PF6 进行配置配置项值GPIO output levelLow初始低电平LED 亮GPIO modeOutput Open Drain开漏输出GPIO Pull-up/Pull-downNo pull-up and no pull-downMaximum output speedLowUser LabelLED_R⚠️关键GPIO mode 必须选择开漏输出Open Drain不能选推挽Push Pull否则与野火板的硬件电路不匹配。4.5 配置调试接口左侧System Core → SYSDebug 选择Serial WireSWD 调试接口⚠️必须配置如果不选 Serial Wire下载一次后 PA13/PA14 会被复用仿真器将无法再次连接芯片只能用串口 ISP 救砖。4.6 工程设置并生成代码切换到Project Manager标签页配置项值Project Name01_LED_BlinkProject Location自定义工程目录Toolchain / IDEMDK-ARM V5Code 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)毫秒级延时基于 SysTickLED_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 GPIOFGPIO 初始化代码gpio.cCubeMX 自动生成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); }六、编译与下载编译Keil 中按F7或点击 Build 按钮确认 0 Error(s)。配置下载器魔术棒 →Debug选择ST-Link Debugger或CMSIS-DAP Debugger→ Settings 确认识别到芯片。下载按F8或点击 Load 按钮。验证下载成功后LED_R 以 1 秒为周期闪烁。七、实验现象板载红色 LEDLED_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 生成代码时会被覆盖。