STM32学习笔记(五) —— 按键翻转LED

前面我们分析过GPIO的各个寄存器,探讨了如何使用GPIO点亮LED,这里再验证一下GPIO的输入功能

1.硬件连接

在这里插入图片描述

我们在开发板上将按键连接到了PA0引脚,按键外接了上拉电阻,默认状态下PA0引脚处于高电平,当按键按下,PA0引脚就与GND短接,变为低电平,所以我们可以通过读取PA0引脚的电平状态来判断按键是否被按下

2.软件编程

这里使用STM32CubeMX来配置PA0引脚的初始化:

PA0配置为输入模式

在这里插入图片描述

生成代码后,可以看见程序中已经添加了PA0引脚初始化部分

PA0初始化

在while循环中添加如下代码:
注意按键要进行软件消抖(按键按下与断开时都会有干扰产生,可以进行软件延时消抖,一般可以延时10-20ms,具体可以参考代码中的注释)。

  while (1)
  {
       
    /* 读取PA0引脚电平 */
    if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) {
   
        /* 如果是低电平, 表示有按键按下, 进行软件延时消抖 */
        HAL_Delay(10);
        /* 再次读取PA0引脚电平, 如果还是低电平, 就认为有按键按下 */
        if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) {
   
            /* 等待按键释放 */
            while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET);
            /* 翻转一次按键标志 */
            ek_key_flag = !ek_key_flag;
            printf("key pressed.\r\n");
        }
    }
    
    /* 按键每次按下后, ek_key_flag会在0与1之间变换 */
    if(ek_key_flag)
        /* 当ek_key_flag == 1时点亮LED */
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
    else
        /* 当ek_key_flag不为1时熄灭LED */
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
        
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

将程序下载后可以打开串口调试助手,每当按键按下会打印“key pressed.”信息,并且LED会在亮灭之间翻转

keypressed

本例程代码可以在HAL库工程模板这一章节的最后,百度网盘链接分享处获取

以上是通过开发板进行实际验证的,下面使用软件仿真,

我们首先进入调试界面( 前面章节有提到,所以本篇以及后续章节都不再重复提及 ),
将控制LED的引脚添加进逻辑分析仪( 前面章节有提到如何添加 )

在这里插入图片描述

打开GPIOA窗口

在这里插入图片描述

确定要操作的连接按键的引脚PA0

在这里插入图片描述

运行仿真,点击PA0引脚后可以看到LED引脚变为了低电平

在这里插入图片描述

打开串口调试界面( 前面章节有提到如何添加 ),也可以看到打印的“key pressed.”信息

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-01 06:36:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-01 06:36:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-01 06:36:04       87 阅读
  4. Python语言-面向对象

    2024-02-01 06:36:04       96 阅读

热门阅读

  1. Golang k8s相关yaml包的区别

    2024-02-01 06:36:04       48 阅读
  2. Spring Boot接收xml参数

    2024-02-01 06:36:04       60 阅读
  3. 【C++】三角形(triangle)

    2024-02-01 06:36:04       46 阅读
  4. Uni-app 如何上传文件, 使用的API是什么

    2024-02-01 06:36:04       60 阅读
  5. 华为网络设备:核心命令一览

    2024-02-01 06:36:04       53 阅读
  6. 设计模式全览:编程艺术的精髓!

    2024-02-01 06:36:04       49 阅读
  7. 设计模式——策略模式

    2024-02-01 06:36:04       47 阅读
  8. Spring Boot + Vue3 实现七牛云大视频上传

    2024-02-01 06:36:04       47 阅读
  9. 3D人体运动重建

    2024-02-01 06:36:04       68 阅读