当前位置: 首页 > news >正文

ESP32 GPIO使用

ESP32 GPIO使用

#define GPIO_OUT_PIN 2      //定义引脚号
#define GPIO_OUTPUT_PIN_SEL  (1<<GPIO_OUT_PIN)      //定义输出引脚的宏,用来将输出引脚号转换为位掩码

void bsp_gpio_init(){
    gpio_config_t io_conf;
    io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;     //  配置GPIO引脚
    io_conf.mode = GPIO_MODE_OUTPUT;        //  配置GPIO模式
    io_conf.pull_up_en = 0;     //  配置上拉电阻
    io_conf.pull_down_en = 0;   // 配置下拉电阻
    io_conf.intr_type = GPIO_INTR_ANYEDGE;      //配置GPIO口的中断类型
    gpio_config(&io_conf);
}

其他可以选择的参数:
intr_type:中断类型
GPIO_PIN_INTR_DISABLE(禁止中断)
GPIO_PIN_INTR_POSEDGE(上升沿触发)
GPIO_PIN_INTR_NEGEDGE(下降沿触发)
GPIO_PIN_INTR_ANYEDGE(边沿触发)
GPIO_PIN_INTR_LOW_LEVEL(低电平触发)
GPIO_PIN_INTR_HIGH_LEVEL(高电平触发)。

mode:GPIO口的工作模式,
GPIO_MODE_INPUT(输入模式)
GPIO_MODE_OUTPUT(输出模式)
GPIO_MODE_INPUT_OUTPUT(输入/输出模式)。

pin_bit_mask:GPIO口的引脚编号
GPIO_INPUT_PIN_SEL(输入引脚)
GPIO_OUTPUT_PIN_SEL(输出引脚)。

pull_down_en:是否启用GPIO口的下拉电阻,可以选择0(禁止)或1(启用)。
pull_up_en:是否启用GPIO口的上拉电阻,可以选择0(禁止)或1(启用)。

示例:

#include <stdio.h>
#include "esp_log.h"
#include"freertos/FreeRTOS.h"
#include"freertos/task.h"
#include"driver/gpio.h"
#include "driver/uart.h"
#include <esp_timer.h>

#define GPIO_OUT_PIN 2
#define GPIO_OUTPUT_PIN_SEL  (1<<GPIO_OUT_PIN)

#define GPIO_ON gpio_set_level(GPIO_OUT_PIN, 1)     //高电平
#define GPIO_OFF gpio_set_level(GPIO_OUT_PIN, 0)    //低电平

static const char* TAG = "MyModule";
//#define BUF_SIZE (1024)
void bsp_gpio_init(){
    gpio_config_t io_conf;
    io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;     //  配置GPIO引脚
    io_conf.mode = GPIO_MODE_OUTPUT;        //  配置GPIO模式
    io_conf.pull_up_en = 0;     //  配置上拉电阻
    io_conf.pull_down_en = 0;   // 配置下拉电阻
    io_conf.intr_type = GPIO_INTR_ANYEDGE;      //配置GPIO口的中断类型
    gpio_config(&io_conf);

    // uart_config_t uart_config = {
    //         .baud_rate = 115200,
    //         .data_bits = UART_DATA_8_BITS,
    //         .parity    = UART_PARITY_DISABLE,
    //         .stop_bits = UART_STOP_BITS_1,
    //         .flow_ctrl = UART_HW_FLOWCTRL_DISABLE
    //     };
    // uart_param_config(UART_NUM_1, &uart_config);
    // uart_set_pin(UART_NUM_1, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    // uart_driver_install(UART_NUM_1, BUF_SIZE * 2, 0, 0, NULL, 0);
   
    printf("init\n");
    ESP_LOGI(TAG, "GPIO Init ready!");
}
void app_main(void)
{
    uint16_t count = 0;
    bsp_gpio_init();
    while(1){
        if(0 == count){
            count = 1;
            GPIO_ON;
        }
        else{
            count = 0;
            GPIO_OFF;
        }
        printf("\ncount: %d\n",count);
        vTaskDelay(1000 / portTICK_PERIOD_MS); /*  1000 / portTICK_PERIOD_MS,表示延时1000ms,
                                                        portTICK_PERIOD_MS表示每ms有多少个ticks,
                                                        ticks是一个时间片,一般1ms有1000ticks,
                                                        如果延时1000ms,则需要1000*1000=1000000ticks。
                                                        */
    }
}

有关ESP_LOGI(TAG, “GPIO Init ready!”);可以看之前文章
https://blog.csdn.net/hongyun1221/article/details/129391697

相关文章:

  • Ls-dyna材料的相关学习笔记
  • plg(Loki+Promtail+Grafana)监控nginx日志、messages日志监控平台
  • CSS3新特性
  • 【黄河流域公安院校网络空间安全技能挑战赛】部分wp
  • web开发 用idea创建一个新项目
  • MySQL运维篇之Mycat分片规则
  • JavaScript 函数定义
  • LiveData 面试题库、解答、源码分析
  • 程序员压力大?用 PyQt 做一个美*女GIF设置桌面,每天都有好心情
  • 文献资源最多的文献下载神器,99.99%的文献都可下载
  • JPA 之 QueryDSL-JPA 使用指南
  • 【C++】AVL树,平衡二叉树详细解析
  • 嵌入式学习笔记——STM32硬件基础知识
  • Pytorch处理数据与训练网络问题汇总(协同训练)
  • linux基本指令和权限
  • 初学者的第一个Linux驱动
  • 第十四届蓝桥杯三月真题刷题训练——第 2 天
  • Python Pytorch开发环境搭建(Windows和Ubuntu)
  • 【2.4 golang中循环语句for】
  • 数组之双指针题
  • 分析|开门红:一季度GDP增长5.4%超预期,市场活力信心增强
  • 特朗普关税“大棒”下,美国进口订单量暴跌64%
  • 从绿绒蒿到植物远征计划:植物学知识的生产与权力(下)