ESP32-IDF GPIO 专题

GPIO中断使用小结 GPIO 中断使用小结 最近在开发一个跟GPIO中断相关的功能,发现还是有很多函数比较有意思,现在总结一下: 1. 调用gpio_is_valid(int gpio_num)判断该GPIO是否有效 2. 调用gpio_request(unsigned gpio, const char *label)申请使用gpio,其中参数label为字符串,用于标志此GPIO,申请成功后,可以通过/sys 阅读详情
AI摘要

本文围绕 ESP32-IDF GPIO 展开,介绍了其配置结构体、常用 API、枚举类型和宏定义等基本信息。常用 API 包括 gpio_config、gpio_reset_pin 等,各有不同参数和作用。还给出了简单点灯程序和添加中断的实例操作,如通过 GPIO 读取和中断函数实现按键状态读取。


一、基本介绍

API 参考路径 esp-idf/components/esp_driver_gpio/include/driver/gpio.h。

ESP-IDF 由多个组件组成,组件中包含专门为 ESP 芯片编写的代码或第三方库(即第三方组件)。对于某些第三方库,ESP-IDF 提供专用的包装器和接口,以简化对第三方库的使用,或提高其与 ESP-IDF 其他功能的兼容性。某些情况下,第三方组件将直接呈现底层库的原始 API。

1、配置结构体

为确保应用程序与未来 ESP-IDF 版本的兼容性,请正确初始化配置结构体。

多数 ESP-IDF 中的初始化、配置和安装函数(通常以 ..._init()、 ..._config() 和 ..._install() 命名)都需要一个指向配置结构体的指针作为参数。例如:

const esp_timer_create_args_t my_timer_args = {
   
   
    .callback = &my_timer_callback,
    .arg = callback_arg,
    .name = "my_timer"
};
esp_timer_handle_t my_timer;
esp_err_t err = esp_timer_create(&my_timer_args, &my_timer);

初始化函数不会存储指向配置结构体的指针,因此在栈上分配结构体是安全的。

下面介绍 GPIO 的配置结构体:

typedef struct {
   
   
    uint64_t pin_bit_mask;          /*!< GPIO pin: set with bit mask, each bit maps to a GPIO */
    gpio_mode_t mode;               /*!< GPIO mode: set input/output mode                     */
    gpio_pullup_t pull_up_en;       /*!< GPIO pull-up                                         */
    gpio_pulldown_t pull_down_en;   /*!< GPIO pull-down                                       */
    gpio_int_type_t intr_type;      /*!< GPIO interrupt type                                  */
#if SOC_GPIO_SUPPORT_PIN_HYS_FILTER
    gpio_hys_ctrl_mode_t hys_ctrl_mode;       /*!< GPIO hysteresis: hysteresis filter on slope input    */
#endif
} gpio_config_t;
  • pin_bit_mask:GPIO 引脚号。
    • 比如 GPIO_NUM_2,则配置为 .pin_bit_mask = (1 << GPIO_NUM_2),
  • mode:选择输入/输出模式
  • pull_up_en:引脚上拉设置
  • pull_down_en:引脚下拉设置
  • intr_type:中断模式

有关这几个类型的定义在本文第三小节可以找到

2、常用 API

在使用 GPIO 相关的 API 时,要加上头文件:

#include "driver/gpio.h"

2.1 gpio_config

esp_err_t gpio_config(const gpio_config_t *pGPIOConfig);
  • 参数
    • pGPIOConfig:GPIO 配置结构体,见第一小节
  • 作用:
    • 该函数用于初始化 GPIO 的 Mode、pull-up、PullDown、IntrType,
  • 返回值
    • ESP_OK 成功
    • ESP_ERR_INVALID_ARG 参数错误

2.2 gpio_reset_pin

esp_err_t gpio_reset_pin(gpio_num_t gpio_num)
  • 参数:
    • gpio_num:引脚号
  • 作用
    • 重置 GPIO 到默认状态(选择 GPIO 功能,启用上拉,禁用输入和输出)。
  • 返回值
    • 总是返回 ESP_OK

2.3 gpio_set_intr_type

esp_err_t gpio_set_intr_type(gpio_num_t gpio_num, gpio_int_type_t intr_type)
  • 参数
    • gpio_num:引脚号
    • intr_type:中断类型,见第三小节
  • 作用
    • 设置 GPIO 中断类型
  • 返回值
    • ESP_OK 成功
    • ESP_ERR_INVALID_ARG 参数错误

2.4 gpio_intr_enable

esp_err_t gpio_intr_enable(gpio_num_t gpio_num)
  • 参数
    • gpio_num:引脚号
  • 作用
    • 使能 GPIO 中断
  • 返回值
    • ESP_OK 成功
    • ESP_ERR_INVALID_ARG 参数错误

2.5 gpio_intr_disable

esp_err_t gpio_intr_disable(gpio_num_t gpio_num)
  • 参数
    • gpio_num:引脚号
  • 作用
    • 禁用 GPIO 中断
  • 返回值
    • ESP_OK 成功
    • ESP_ERR_INVALID_ARG 参数错误

2.6 gpio_set_level

esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level)
  • 参数
    • gpio_num:引脚号
    • level:0: 低;1: 高
  • 作用
    • 设置 GPIO 输出电平
  • 返回值
    • ESP_OK 成功
    • ESP_ERR_INVALID_ARG 参数错误

通过启用 CONFIG_GPIO_CTRL_FUNC_IN_IRAM,此函数允许在 ISR 上下文中禁用缓存的情况下执行。

2.7 gpio_get_level

int gpio_get_level(gpio_num_t gpio_num)
  • 参数
    • gpio_num:引脚号
  • 作用
    • 获取 GPIO 输入电平
  • 返回值
    • 0:低电平;1:高电平

如果引脚未配置为输入(或输入和输出),返回的值始终为 0。

2.8 gpio_set_direction

esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode)
  • 参数
    • gpio_num:引脚号
    • mode:要设置的模式,见第三小节
  • 作用
    • 配置 GPIO 方向,例如仅输出,仅输入,输出和输入
  • 返回值
    • ESP_OK 成功
    • ESP_ERR_INVALID_ARG 参数错误

2.9 gpio_set_pull_mode

esp_err_t gpio_set_pull_mode(gpio_num_t gpio_num, gpio_pull_mode_t pull_mode)
  • 参数
    • gpio_num:引脚号
    • pull_mode:GPIO 拉高/拉低模式,见第三小节
  • 作用
    • 配置 GPIO 上拉/下拉电阻
  • 返回值
    • ESP_OK 成功
    • ESP_ERR_INVALID_ARG 参数错误

2.10 gpio_isr_register

ESP32——GPIO基本输入输出 NodeMCU-32_V1.3 开发板 模组共接出 38 个接口,如管脚示意图,管脚功能定义表是接口定义。 阅读详情

相关推荐

esp-idf GPIO与GPIO中断 api详解

ESP32有10个内部电容式触摸传感器。这些传感器可以感知任何带有电荷的东西的变化,比如人的皮肤。因此,它们可以检测到用手指触摸GPIO时引起的变化。这些引脚可以很容易地集成到电容式焊盘中,并取代机械按钮。电容式触摸引脚还可以用来将ESP32从深度睡眠中唤醒。

Rain土的博客 1812

基于ESP32-IDF驱动GPIO输出控制LED

基于ESP32-IDF驱动GPIO输出控制LED

weixin_54859557的博客 2366

ESP32 GPIO上拉下拉电阻配置:操作指南

深入解析ESP32引脚的上拉与下拉电阻设置方法,帮助开发者精准控制电平状态。结合esp32引脚特性,提供实用配置建议与常见问题解决方案,提升电路稳定性与响应可靠性。

weixin_42499004的博客 1618

避开模板匹配的坑:OpenCVSharp中边缘梯度算法的优化实践

本文深入探讨了OpenCVSharp中边缘梯度算法在模板匹配中的优化实践,解决了传统方法在尺度变化、角度旋转和光照差异下的局限性。通过Sobel算子提取边缘梯度特征,结合轮廓检测和多尺度匹配策略,显著提升了匹配的鲁棒性和准确性。文章还分享了并行计算、内存访问优化等实战技巧,适用于工业检测和自动化识别场景。

http9protocoller的博客 196

Oracle PLM Agile936 单点登录配置方式

Oracle PLM Agile936 单点登录配置方式

Jay的个人博客 824

spyglass之功耗分析

用于功耗分析的软件除了ptpx外,spyglass也可以。ptpx的功耗分析是基于netlist(网表)进行的,一般用于分析综合后的pre功耗和P&R后的post功耗,但这已经是项目进行到比较后期了,如果后期发现功耗数据与我们目标功耗相差较大,则意味着需要功耗优化,这时有可能会将项目计划节点延迟。如果在前期designer可以获得设计模块的功耗数据,可提早优化功耗,spyglass则为designer提供了一个很好的手段去评估功耗,从而提前优化功耗。

u011974971的博客 9191

安卓7.0+抓包难题:雷电模拟器9.0+Charles系统证书安装全攻略

HTTPS协议通过SSL/TLS加密保障网络通信安全,其核心机制依赖于证书信任链。在Android系统中,自7.0版本起,谷歌收紧了证书信任策略,默认仅信任系统预置的CA证书,这直接导致了传统抓包方法失效。理解这一原理对于移动开发、测试及安全研究至关重要,它揭示了应用层安全策略与系统底层机制的关联。通过将用户证书安装至系统信任区,可以突破此限制,实现HTTPS流量的解密与分析。这一技术在App调试、接口测试、安全审计等场景中具有广泛的应用价值。本文以雷电模拟器9.0和Charles抓包工具为例,详细演示了如

weixin_42521843的博客 278

企业微信微盘API权限避坑指南:为什么你的Python脚本无法获取文件列表?

本文深入解析了企业微信微盘API的权限模型,解释了为何即使使用超级管理员账号,Python脚本也可能因权限不足而无法获取文件列表。核心在于微盘API基于“应用身份”而非“用户身份”进行校验,应用只能访问自身创建的空间。文章提供了构建文件上传代理、利用事件回调等合规的替代方案,帮助企业实现高效数据同步。

weixin_29322553的博客 523

《Python全栈系列教程》专栏介绍及文章汇总

《Python全栈系列教程》专栏介绍及文章汇总

孤寒者的博客 71万+

SPICE仿真软件:HSPICE_(20).HSPICE仿真结果的后处理

HSPICE仿真结果的后处理是一个多步骤的过程,包括读取结果文件、可视化、分析和导出。通过使用命令行工具、Python脚本和HSPICE内置工具,可以高效、准确地完成这些任务。Python脚本的灵活性和强大的数据分析能力使其成为后处理的理想选择。自动化处理可以显著提高工作效率,减少人为错误,而高级分析方法可以更深入地理解仿真结果,为电路设计提供有力支持。

kkchenjj的博客 1382

【人工智能之深度学习】12. BERT微调实战:医疗文本分类的领域自适应技巧与工业级实现

摘要:医疗文本分类是自然语言处理在医疗健康领域的核心应用,可辅助疾病诊断、病历结构化和医疗质量监控。然而,医疗文本的专业术语密集、实体关系复杂及数据长尾分布等特性,导致通用BERT模型性能受限。本文系统阐述医疗文本分类的领域自适应技术,从理论原理到工业级实现展开全流程讲解。首先分析医疗文本的独特属性及技术挑战;随后详解领域继续预训练、适配器微调、对抗训练等核心技术的数学原理;构建包含数据预处理、模型优化、隐私保护的完整实战架构;通过疾病分类、情感分析、事件检测三大案例验证技术有效性。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1003

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: CMake 教程(三)添加库的使用要求
下一篇: ESP32-IDF USART 专题
Projectsauron
博客等级 码龄4年 2587粉丝 100原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值