GPIO入门之闪灯

Posted MrSandstorm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPIO入门之闪灯相关的知识,希望对你有一定的参考价值。

第一章 GPIO入门之闪灯

概述
    ESP32 芯片有 40 个物理 GPIO pad,有部分 GPIO pad 不可用或者没有对应的芯片封装上的管脚。每个 pad 都可用作一个通用 IO,或连接一个内部的外设信号。 IO_MUX、 RTC IO_MUX 和 GPIO 交换矩阵用于将信号从外设传输至 GPIO pad。这些模块共同组成了芯片的 IO 控制。
1.1 5种输入输出模式

GPIO_MODE_INPUT 输入
GPIO_MODE_OUTPUT 输出
GPIO_MODE_OUTPUT_OD 开漏输出
GPIO_MODE_INPUT_OUTPUT_OD 开漏输入输出
GPIO_MODE_INPUT_OUTPUT 输入输出

1.1.2 中断类型
GPIO_INTR_DISABLE 禁用GPIO中断
GPIO_INTR_POSEDGE GPIO中断类型:上升沿
GPIO_INTR_NEGEDGE 下降沿
GPIO_INTR_ANYEDGE 上升沿和下降沿
GPIO_INTR_LOW_LEVEL 输入低电平触发
GPIO_INTR_HIGH_LEVEL 输入高电平触发

1.1.3 上下拉使能
GPIO_PULLUP_DISABLE 禁用GPIO上拉电阻
GPIO_PULLUP_ENABLE 启用GPIO上拉电阻
GPIO_PULLDOWN_DISABLE 禁用GPIO下拉电阻
GPIO_PULLDOWN_ENABLE 启用GPIO下拉电阻

1.1.4 驱动能力
GPIO_DRIVE_CAP_0 弱 weak
GPIO_DRIVE_CAP_1 强
GPIO_DRIVE_CAP_2 默认值
GPIO_DRIVE_CAP_DEFAULT 默认值
GPIO_DRIVE_CAP_3 最强

1.2  实现函数分析

技术分享
/* GPIO Example
 * 
 * Brief:
 * This test code shows how to configure gpio and blink led
 *
 * USED GPIO:  GPIO16(blue led)
 *
 * func: blink led
 *
 * note:
 *
 */
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"

#include "esp_system.h"
#include "esp_err.h"
#include "esp_event_loop.h"
#include "esp_event.h"
#include "esp_attr.h"
#include "esp_log.h"
#include "esp_eth.h"


#define GPIO_BLUE_LED 16

static const char *TAG = "GPIO_Example";

void hw_gpio_init(void)
{
    gpio_config_t io_conf;

    //disable interrupt
    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
    //set as output mode
    io_conf.mode = GPIO_MODE_OUTPUT;
    //bit mask of the pins that you want to set,e.g.GPIO16
    io_conf.pin_bit_mask = (1<<GPIO_BLUE_LED);
    //disable pull-down mode
    io_conf.pull_down_en = 0;
    //disable pull-up mode
    io_conf.pull_up_en = 1;
    //configure GPIO with the given settings
    gpio_config(&io_conf);
}

void app_main()
{
    hw_gpio_init();
    while(1)
    {
//        ESP_EARLY_LOGE(TAG, "blink led. E");
//        ESP_EARLY_LOGW(TAG, "blink led. W");
//        ESP_EARLY_LOGI(TAG, "blink led. I");
//        ESP_EARLY_LOGD(TAG, "blink led. D");
//        ESP_EARLY_LOGV(TAG, "blink led. V");
        
        gpio_set_level(GPIO_BLUE_LED, 0);
        vTaskDelay(1000 / portTICK_RATE_MS);
        gpio_set_level(GPIO_BLUE_LED, 1);
        vTaskDelay(1000 / portTICK_RATE_MS);
    }
}
View Code

 






















以上是关于GPIO入门之闪灯的主要内容,如果未能解决你的问题,请参考以下文章

STM32CubeMX使用之实现点灯大业

字符设备驱动代码分析---之gpio_get_value()

STM32入门笔记——GPIO的初始化

STM32入门笔记——GPIO的初始化

Arduino ESP32 多任务运行(读取模拟量与闪灯)

树莓派瞎玩~6~控制GPIO之C语言