打印
[STM32F1]

使用STM32实现按键控制LED灯的简单示例

[复制链接]
1093|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Wordsworth|  楼主 | 2024-9-28 07:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近我在使用STM32做一个简单的按键控制LED的项目。通过点击按键,LED可以打开或关闭。这个项目虽然简单,但是可以帮助我更好地理解GPIO输入输出的操作。下面是我的基本实现过程和代码共享。
硬件连接:
  • 我使用了STM32F103C8T6这块开发板。
  • 一个LED连接在GPIO口(比如PC13)上,用于指示状态。
  • 一个按钮连接在GPIO口(比如PA0)上,作为输入信号。
软件配置:使用STM32CubeMX来配置GPIO:
  • PC13配置为输出模式,用于控制LED。
  • PA0配置为输入模式,使用上拉电阻,作为按键输入。
CubeMX代码生成:在STM32CubeMX配置好GPIO后,生成了代码框架。接下来,我们只需要在main.c文件中添加逻辑代码,来检测按键状态并控制LED。
代码示例:
#include "main.h"

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  
  // 初始化所有外设,包括GPIO
  MX_GPIO_Init();

  // 初始化变量,记录LED状态
  uint8_t ledState = 0;
  
  while (1)
  {
    // 读取按键状态
    if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) // 按键按下
    {
      HAL_Delay(50); // 消抖延时
      if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) // 按键依然按下
      {
        ledState = !ledState; // 切换LED状态
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, ledState ? GPIO_PIN_RESET : GPIO_PIN_SET); // 控制LED
      }
      
      // 等待按键松开
      while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET);
    }
   
    HAL_Delay(10); // 主循环延时
  }
}
关键部分说明:
  • HAL_GPIO_ReadPin函数用于读取按键状态,当按键按下时,GPIO_PIN_0会被拉低。
  • 按键按下后,我用**HAL_Delay(50)**进行消颤,再次确认按键状态。
  • 使用一个ledState变量来记录LED的当前状态,每次按键按下时,LED状态就会发生。
  • HAL_GPIO_WritePin用来设置PC13引脚的电平,控制LED的亮灭。
效果:
  • 按一下按键,LED亮起。
  • 再次按下按钮,LED 就会出现。
  • 按键每次按下后,LED状态会切换。
这是个非常简单的项目,但通过它我学会了如何配置GPIO,处理按键输入以及使用HAL库控制LED。希望这个例子能够对同样初学STM32的朋友有所帮助!

使用特权

评论回复
评论
LGZ888 2024-10-6 08:37 回复TA
正在初学,正好需要。 
沙发
公羊子丹| | 2024-9-28 07:57 | 只看该作者
“哈哈,这个项目很经典啊,适合入门学习!”

使用特权

评论回复
板凳
童雨竹| | 2024-9-28 07:57 | 只看该作者
谢谢分享,正好我最近在学STM32,马上试试!

使用特权

评论回复
地板
周半梅| | 2024-9-28 07:57 | 只看该作者
按键消抖那块思路不错,我之前没有加延迟,结果按键误触发。

使用特权

评论回复
5
帛灿灿| | 2024-9-28 07:58 | 只看该作者
这个LED控制项目简单明了,太适合新手了!

使用特权

评论回复
6
万图| | 2024-9-28 07:59 | 只看该作者
我也是用F103练手,这个例子正好可以试一试。

使用特权

评论回复
7
Pulitzer| | 2024-9-28 07:59 | 只看该作者
你这个按键控制的逻辑大概,我之前做类似的项目没有考虑消抖。

使用特权

评论回复
8
Bblythe| | 2024-9-28 07:59 | 只看该作者
这个能不能扩展一下做多个按键和多个LED的控制?

使用特权

评论回复
9
Uriah| | 2024-9-28 08:00 | 只看该作者
小项目很实用,尤其是消抖那部分学到了!

使用特权

评论回复
10
Clyde011| | 2024-9-28 08:00 | 只看该作者
请问您用的CubeMX配置部分能再详细说说吗?

使用特权

评论回复
11
4y1b3| | 2024-9-29 22:19 | 只看该作者
在STM32CubeMX配置好GPIO后

使用特权

评论回复
12
kzlzqi| | 2024-9-29 22:55 | 只看该作者
LED可以打开或关闭

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

3652

帖子

1

粉丝