EPS32 基础GPIO操作 KEY实验


实验现象:按下BOOT按键可控制LED状态翻转。


它主要定义了BOOT宏,用于获取 IO0的状态,并声明了key_initkey_scan函数,以便外部文件能够调用这些函数。

通过这些声明和定义,该文件为其他部分的代码提供了必要的接口和功能支持。


key.h

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"


/* 引脚定义 */
#define BOOT_GPIO_PIN   GPIO_NUM_0

/*IO操作*/
#define BOOT            gpio_get_level(BOOT_GPIO_PIN)

/* 按键按下定义 */
#define BOOT_PRES       1       /* BOOT按键按下 */

/* 函数声明 */
void key_init(void);            /* 初始化按键 */
uint8_t key_scan(uint8_t mode); /* 按键扫描函数 */

key.c

#include "key.h"


/**
 * @brief       初始化按键
 * @param       无
 * @retval      无
 */
void key_init(void)
{
    gpio_config_t gpio_init_struct;

    gpio_init_struct.intr_type = GPIO_INTR_DISABLE;         /* 失能引脚中断 */
    gpio_init_struct.mode = GPIO_MODE_INPUT;                /* 输入模式 */
    gpio_init_struct.pull_up_en = GPIO_PULLUP_ENABLE;       /* 使能上拉 */
    gpio_init_struct.pull_down_en = GPIO_PULLDOWN_DISABLE;  /* 失能下拉 */
    gpio_init_struct.pin_bit_mask = 1ull << BOOT_GPIO_PIN;  /* BOOT按键引脚 */
    gpio_config(&gpio_init_struct);                         /* 配置使能 */
}

/**
 * @brief       按键扫描函数
 * @param       mode:0 / 1, 具体含义如下:
 *              0,  不支持连续按(当按键按下不放时, 只有第一次调用会返回键值,
 *                  必须松开以后, 再次按下才会返回其他键值)
 *              1,  支持连续按(当按键按下不放时, 每次调用该函数都会返回键值)
 * @retval      键值, 定义如下:
 *              BOOT_PRES, 1, BOOT按下
 */
uint8_t key_scan(uint8_t mode)
{
    uint8_t keyval = 0;
    static uint8_t key_boot = 1;    /* 按键松开标志 */

    if(mode)
    {
        key_boot = 1;
    }

    if (key_boot && (BOOT == 0))    /* 按键松开标志为1,且有任意一个按键按下了 */
    {
        vTaskDelay(10);             /* 去抖动 */
        key_boot = 0;

        if (BOOT == 0)
        {
            keyval = BOOT_PRES;
        }
    }
    else if (BOOT == 1)
    {
        key_boot = 1;
    }

    return keyval;                  /* 返回键值 */
}

main.c


#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include "led.h"
#include "key.h"


/**
 * @brief       程序入口
 * @param       无
 * @retval      无
 */
void app_main(void)
{
    uint8_t key;
    esp_err_t ret;
    
    ret = nvs_flash_init();     /* 初始化NVS */

    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }

    led_init();                 /* 初始化LED */
    key_init();                 /* KEY初始化 */

    while(1)
    {
        key = key_scan(0);      /* 获取键值 */

        switch (key)
        {
            case BOOT_PRES:     /* BOOT被按下 */
            {
                LED_TOGGLE();   /* LED状态翻转 */
                break;
            }
            default:
            {
                break;
            }
        }

        vTaskDelay(10);
    }
}





艾金森

每一个童年的梦想都值得用青春去捍卫!




用户地图 心情地图 日记地图 笔记地图 时间轴地图 投票地图 习题地图 2024-10-08 Web开发记录【有计划停止更新新增新功能 - 只保留bug修复】掷骰子补丁熬到岁末了兄妹日常2022年2月16日我找到oc文了兄妹日常2022年2月28日安否 的日记 2024/10/21 23:38:33复盘day5海外回归中医善本古籍《望色启微》又到了最后一个月兄妹日常2022年1月3日高考志愿填报部级直属院校介绍明清中医珍善孤本兄妹日常2021年11月29日兄妹日常2021年11月11日兄妹日常2021年12月13日距离 的日记 2024/08/01 15:42:01兄妹日常2022年3月11日jedahdohma 的日记 2024/11/20 13:12:24抽象东西可代所有oc兄妹日常2022年3月30日兄妹日常2021年11月18日兄妹日常2021年12月19日今天这篇填几个之前的坑兄妹日常2022年1月4日兄妹日常2022年4月21日简赤jc 的日记 2025/01/01 11:20:06我杀了自己的表哥兄妹日常2022年3月19日兄妹日常2022年3月22日茶文化博览 中国茶韵兄妹日常2022年1月28日郭文贵欺诈罪行终被定罪,正义得以伸张高考志愿填报部指南及报考技巧站在未来的角度看待现在兄妹日常2022年1月19日兄妹日常2022年1月25日短暂的喘息risk 的日记 2024/11/25 15:21:44高血压、2型糖尿病、高脂血症、肥胖症、膳食运动指导要点基层医务人员应用实操手册(试行)关于五叔的八卦,他的再娶标准,算计还是老一辈会算计以前我总是懊恼自己的选择兄妹日常2022年1月5日重整旗鼓25.1.1 可能是太紧张:人的精力都是有限的。兄妹日常2022年4月10日中华名医名方薪传3本成都营养师培训中心课程肥胖 -6课我不爱自由兄妹日常2022年3月6日UL4200A检测报告GCC证书心学随笔一10.10jedahdohma 的笔记 2024/08/16 10:01:41JS 多级函数,类似class类的写法如何更改Element UI的this.$confirm按钮样式ESP32 【ESP_ERROR_CHECK】说明【用户意见】2024-11-03 【Bug的修复】C语言根据日期判断星期几(使用基姆拉尔森计算公式)软件架构模式 三层cs架构介绍望诊:中医望眼辨证图解突然记起小时候小说中的无证之案解决Vue表格操作行与内容行不对齐的方法书单成瘾丨240727 刘亮程李娟余华蔡崇达新书怎么才算是爽文啊,反正我看的这本不是软考架构-架构风格EPS32 PWM操作 LED控制器呼吸灯实验老年人营养保健手册(专业版)NoSQL 非关系型数据库怪诞行为学--可预测的非理性124.7.20-8.6仿香试香Visual Studio和Visual Studio Code有什么区别EPS32 中断说明系统架构设计师论文《论虚拟现实技术的应用与发展》JS 异步加载并执行对应函数高考志愿填报名校名专业考生分享会话剧ZXF高考志愿填报全攻略54项系统架构设计师论文《论基于构件的软件开发》陶喆蓝砖结尾曲有感系统架构设计师论文《论面向服务架构设计及其应用》Lambda 架构 介绍静注人免疫球蛋白(ph4)的功效与作用是什么EPS32 外部中断EXIT操作 KEY实验英语老教授又想圈钱了EPS32 基础GPIO操作 KEY实验jedahdohma 的笔记 2024/12/10 15:33:54对于完成一件长久事业的方法总结肛肠科手术视频51集罕见中医验方6本系统架构设计师论文《信息系统项目管理中的沟通管理》高考志愿填报讲解大学专业之师范教育类20240728系统架构设计师论文《论软件维护方法及其应用》高考志愿填报中大学城市的选择书单成瘾丨240726 基层公务员读物现在才有闲情看得下书,但我却在迷茫。释怀?ESP32 开发记录【第一步入门感觉开始了】