ESP32 GPIO通用模式输入输出使用

1. GPIO API介绍

1.gpio_reset_pin()函数

函数功能为将选定的GPIO口复位为初始状态,以便后续对该IO口进行设置。

值得一提的是,当GPIO口为初始状态时,其电平属性不定,若硬件设计没有进行相应的上下拉操作,可能导致初始化时硬件跑飞。

/**
 * @brief 将GPIO重置为初始状态(选择GPIO的功能,使能上拉和失能输入输出).
 *
 * @param gpio_num GPIO的引脚号.
 *
 * @note This function also configures the IOMUX for this pin to the GPIO
 *       function, and disconnects any other peripheral output configured via GPIO
 *       Matrix.
 *
 * @return 永远返回 ESP_OK.
 */
esp_err_t gpio_reset_pin(gpio_num_t gpio_num);

2.gpio_set_direction()函数

函数功能为设置GPIO口的输入输出模式。

/**
 * @brief	 GPIO 设置方向.
 *
 * 配置GPIO方向,例如输入
 *
 * @param  gpio_num  Configure GPIO pins number, it should be GPIO number. If you want to set direction of e.g. GPIO16, gpio_num should be GPIO_NUM_16 (16);
 * @param  mode GPIO direction
 *
 * @return
 *     - ESP_OK Success
 *     - ESP_ERR_INVALID_ARG GPIO error
 *
 */
esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode);

2.点灯大法

合宙CORE ESP32核心板板载2颗LED

LED编号对应GPIO管脚功能描述
D4IO12GPIO12配置高电平有效
D5IO13GPIO13配置高电平有效

1. LED GPIO初始化

在点灯之前,需要将开发板上对应的GPIO口设置为输出模式,可以将IO口的电平默认拉低。

void LedGPIO_Init(void)
{
    gpio_reset_pin(12);
    gpio_set_direction(12,GPIO_MODE_OUTPUT);
    gpio_set_level(12,0);
    gpio_reset_pin(13);
    gpio_set_direction(13,GPIO_MODE_OUTPUT);
    gpio_set_level(13,0);//LED    
}

2. LED点灯函数配置

由于我们开发板上有两颗LED,根据个人习惯将其配置为自己擅长用的点灯函数,这里我将其配置为两个单独的控制函数,通过参数State控制LED的亮灭。

void led1(int state)
{
    gpio_set_level(12,state);
}

void led2(int state)
{
    gpio_set_level(13,state);
}

3. 使用说明

在调用LED函数时,首先需要先对LED的GPIO初始化,接下来就可以使用我们自己的点灯函数进行愉快点灯了。

3.按键配置

1. 按键初始化

和配置LED的GPIO类似,首先复位对应的GPIO口,进而再将其配置为输入模式。

void KeyGPIO_Init(void)
{
    gpio_reset_pin(8);
    gpio_set_direction(8,GPIO_MODE_INPUT);
    gpio_reset_pin(9);
    gpio_set_direction(9,GPIO_MODE_INPUT);
    gpio_reset_pin(4);
    gpio_set_direction(4,GPIO_MODE_INPUT);    
}

2. 编写按键处理函数

普通的按键消抖函数,通过延时来过滤掉按键的机械抖动,当松开按键时返回相应的按键状态。

bool KeyPrees(gpio_num_t gpio_k)
{
    if(gpio_get_level(gpio_k) == 0)
    {
        vTaskDelay(20);
        while(gpio_get_level(gpio_k) == 0);
        vTaskDelay(20);
        return true;
    }
    return false;
}
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值