【星云 Orbit • STM32F4】01. 探索GPIO:点亮你的 LED 灯
博客上文章配合以下星系列开发板,所有资料均会开源。致力点燃学生对技术的热情,培养“懂理论能实战”的嵌入式人才。愿你们所行风雨无阻,前程似锦。
核心板型号 | 处理器参数 | 学习定位 | 典型应用场景 |
---|---|---|---|
极光 Orbit-C8 | STC8H8K64U(51架构/24MHz) | 单片机原理与应用 | GPIO控制/UART通信 |
星火 Orbit-F1 | STM32F103RET6(Cortex-M3/72MHz) | ARM应用开发实践 | 智能小车/物联网节点 |
星云 Orbit-F4 | 实时操作系统进阶 | 四轴飞控/工业网关 | |
星界 Orbit-H7 | STM32H743IIT6(双核480MHz+AI加速器) | 嵌入式AI与边缘计算 | 机器视觉/预测性维护 |
引言
STM32F407是一款功能强大的32位微控制器,广泛应用于各种嵌入式系统中。本文将详细介绍如何使用STM32F407的PC0-PC3引脚控制LED灯,并通过HAL库实现模块化设计。通过本教程,读者将能够掌握GPIO配置、LED控制以及模块化编程的基本方法。
硬件准备
在开始编程之前,确保您已经准备好以下硬件:
- 星云 Orbit-F4 开发板:板载STM32F407VGT6(Cortex-M4/168MHz)作为主控芯片。
- 板载 LED灯:4个LED灯,颜色不限。
- 开发板设有限流电阻:4个220Ω至330Ω的电阻,用于保护LED灯。
硬件连接
将LED灯连接到STM32F407的PC0-PC3引脚:
-
连接LED的正极:
- LED1的负极通过电阻连接到PC0。
- LED2的负极通过电阻连接到PC1。
- LED3的负极通过电阻连接到PC2。
- LED4的负极通过电阻连接到PC3。
-
连接LED的正极:
- 所有LED的正极连接到 3.3V(VCC)电源。
GPIO配置
在STM32F407中,GPIO引脚可以配置为多种模式,以适应不同的应用需求。以下是一些常见的GPIO模式:
-
输入模式:
- 浮空输入(Floating Input):引脚处于高阻态,适用于不需要上拉或下拉的情况。
- 上拉输入(Pull-Up Input):引脚内部连接上拉电阻,适用于外部信号为低电平有效的情况。
- 下拉输入(Pull-Down Input):引脚内部连接下拉电阻,适用于外部信号为高电平有效的情况。
-
输出模式:
- 推挽输出(Push-Pull Output):引脚可以输出高电平或低电平,适用于直接驱动小电流负载,如LED灯。
- 开漏输出(Open-Drain Output):引脚输出低电平或高阻态,适用于需要外部上拉电阻的场合。
-
复用模式:
- 用于将GPIO引脚配置为特定的外设功能,如UART、SPI等。
在本教程中,我们将使用推挽输出模式来控制LED灯,因为这种模式可以直接驱动LED灯而无需额外的上拉电阻。
配置GPIO时钟:
在使用GPIO引脚之前,需要先使能相应的GPIO时钟。对于PC0-PC3引脚,需要使能GPIOC时钟。
// 使能GPIOC时钟
__HAL_RCC_GPIOC_CLK_ENABLE();
配置GPIO引脚:
使用GPIO_InitTypeDef
结构体配置GPIO引脚的模式、上下拉、速度等参数。
GPIO_InitTypeDef GPIO_InitStruct = {
0};
// 配置PC0-PC3为推挽输出模式
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
LED控制模块
为了实现模块化设计,我们将LED的控制功能封装到bsp/LED
目录下的bsp_led.c
和bsp_led.h
文件中。
1. 创建LED
目录
-
打开文件管理器:
- 导航到STM32F407项目目录下的
Drivers/BSP
文件夹。
- 导航到STM32F407项目目录下的
-
创建新目录:
- 右键点击空白区域,选择
新建文件夹
。 - 输入目录名称
LED
,并按回车键确认。
- 右键点击空白区域,选择