stm32f103按键控制led灯亮详细实验教程
时间: 2025-06-27 08:01:56 浏览: 13
### STM32F103通过按键控制LED灯亮的实验教程
#### 实验目标
本实验旨在利用STM32F103微控制器,通过按键输入信号控制LED灯的状态变化。具体而言,当按下按键时,LED灯会点亮;释放按键时,LED灯熄灭。
---
#### 硬件准备
硬件清单如下:
- **STM32F103C8T6黑色核心板** 一块[^2]
- 自复位按键 一颗
- LED灯 一颗
- 面包板 一块
- 杜邦线 若干
- 限流电阻(建议220Ω) 两颗
---
#### 软件环境搭建
为了简化开发过程并提高效率,推荐使用以下工具链:
- **STM32CubeMX**: 自动生成初始化代码。
- **Keil uVision5**: 编写和调试程序。
- **ST-LINK仿真器**: 下载程序至芯片。
---
#### 功能设计与实现
##### 1. GPIO引脚分配
根据需求,定义以下GPIO引脚的功能:
- **PA0 (Key)**: 按键输入引脚,用于检测按键状态。
- **PB0 (LED)**: 输出引脚,连接LED阳极,控制其亮灭。
##### 2. 使用STM32CubeMX配置GPIO
打开STM32CubeMX软件,完成以下设置:
- 将`PA0`配置为**输入模式**(Input),启用内部上拉电阻(Pull-up)。
- 将`PB0`配置为**推挽输出模式**(Output Push-Pull),初始电平设为低(Active Low)。
完成后生成工程文件,并导入Keil IDE中继续编辑。
##### 3. 主函数逻辑分析
以下是主循环的核心逻辑描述:
- 定期读取`PA0`引脚的状态。
- 如果检测到按键被按下(`PA0`为低电平),则将`PB0`置高电平,使LED点亮。
- 否则,保持`PB0`为低电平,关闭LED。
---
#### 示例代码
以下是完整的代码示例:
```c
#include "stm32f1xx_hal.h"
// 初始化GPIO
void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE(); // 开启PA端口时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); // 开启PB端口时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
// PA0作为按键输入
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 设置为输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// PB0作为LED输出
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
int main(void)
{
HAL_Init(); // 初始化HAL库
MX_GPIO_Init(); // 初始化GPIO
while (1)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) // 检测按键是否按下
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 按下时点亮LED
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 未按下时熄灭LED
}
HAL_Delay(50); // 延迟去抖动
}
}
```
上述代码实现了按键控制LED的基本功能。
---
#### 注意事项
1. **去抖处理**: 按键存在机械抖动现象,在实际应用中可通过增加延时或滤波电路解决。
2. **电流保护**: 在LED回路中加入适当阻值的限流电阻,防止过流损坏器件。
3. **供电电压**: 确认所使用的LED工作电压范围匹配MCU输出电平。
---
阅读全文
相关推荐


















