ESP32芯片具有40个物理GPIO管脚。某些GPIO管脚无法使用或模块封装上没有相应的引脚(请参阅技术参考手册)。每个管脚可用作通用I / O或可连接到内部外围信号。 • 请注意,GPIO6-11通常用于SPI闪存。 • GPIO34-39只能设置为输入模式,不具备软件上拉或下拉功能。 还有单独的“RTC GPIO”支持,当GPIO路由[routed]到“RTC”低功耗和模拟子系统时,它可以运行。这些引脚功能可在深度睡眠,超低功耗协处理器运行或使用ADC / DAC /等模拟功能时使用。
GPIO输出和输入中断示例:外设/ gpio [转到Espressif Github 上GPIO例程地址]。
驱动器/包括/驱动器/ gpio.h [转到Espressif Github 上GPIO例程地址]。 功能 esp_err_t gpio_config(const gpio_config_t * pGPIOConfig ) GPIO常见配置。 配置GPIO的模式,pull-up(上拉),PullDown(下拉),IntrType(中断?) 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • pGPIOConfig:指向GPIO的指针配置struct esp_err_t gpio_reset_pin(gpio_num_t gpio_num ) 将GPIO重置为默认状态(选择GPIO功能,启用pullup并禁用输入和输出)。 注意 此功能还可将此引脚的IOMUX配置为GPIO功能,并断开通过GPIO Matrix配置的任何其他外设输出。 返回 始终返回ESP_OK。 参数 • gpio_num:GPIO管脚。 esp_err_t gpio_set_intr_type(gpio_num_t gpio_num,gpio_int_type_t intr_type ) GPIO设置中断触发类型。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号。如果要设置GPIO16的触发类型,gpio_num应为GPIO_NUM_16(16); • intr_type:中断类型,从gpio_int_type_t中选择 esp_err_t gpio_intr_enable(gpio_num_t gpio_num ) 启用GPIO模块中断信号。 注意 使用ADC时,请勿使用GPIO36和GPIO39的中断。请参阅评论adc1_get_raw。有关此问题的说明,请参阅“ECO_and_Workarounds_for_Bugs_in_ESP32”的第3.11节。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码。如果要在例如GPIO16上启用中断,则gpio_num应为GPIO_NUM_16(16); esp_err_t gpio_intr_disable(gpio_num_t gpio_num ) 禁用GPIO模块中断信号。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号。如果要禁用GPIO16的中断,gpio_num应为GPIO_NUM_16(16); esp_err_t gpio_set_level(gpio_num_t gpio_num,uint32_t level ) GPIO设置输出电平。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO编号错误 参数 • gpio_num:GPIO号。如果要设置GPIO16的输出电平,gpio_num应为GPIO_NUM_16(16); • level:输出水平。0:低; 1:高 一个INT gpio_get_level(Gpio_num_t Gpio_num ) GPIO获得输入级别。 警告 如果管脚未配置为输入(或输入和输出),则返回值始终为0。 返回 • 0 GPIO输入电平为0 • 1 GPIO输入电平为1 参数 • gpio_num:GPIO号码。如果你想得到例如引脚GPIO16的逻辑电平,gpio_num应该是GPIO_NUM_16(16); esp_err_t gpio_set_direction(gpio_num_t gpio_num,gpio_mode_t 模式) GPIO设定方向。 配置GPIO方向,例如output_only,input_only,output_and_input 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO错误 参数 • gpio_num:配置GPIO引脚号,应为GPIO号。如果要设置例如GPIO16的方向,gpio_num应为GPIO_NUM_16(16); • mode:GPIO方向 esp_err_t gpio_set_pull_mode(gpio_num_t gpio_num,gpio_pull_mode_t pull ) 配置GPIO上拉/下拉电阻。 只有支持输入和输出的引脚都集成了上拉和下拉电阻。仅输入GPIO 34-39没有。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG:参数错误 参数 • gpio_num:GPIO号码。如果要为GPIO16设置上拉或下拉模式,gpio_num应为GPIO_NUM_16(16); • pull:GPIO上拉/下拉模式。 esp_err_t gpio_wakeup_enable(gpio_num_t gpio_num,gpio_int_type_t intr_type ) 启用GPIO唤醒功能。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码。 • intr_type:GPIO唤醒类型。只能使用GPIO_INTR_LOW_LEVEL或GPIO_INTR_HIGH_LEVEL。 esp_err_t gpio_wakeup_disable(gpio_num_t gpio_num ) 禁用GPIO唤醒功能。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码 esp_err_t gpio_isr_register( void(* fn)( void * ),void * arg,int intr_alloc_flags,gpio_isr_handle_t * handle,) 注册GPIO中断处理程序,处理程序是ISR。处理程序将附加到运行此函数的同一CPU内核。 只要发生任何GPIO中断,就会调用此ISR功能。请参阅替代gpio_install_isr_service()和gpio_isr_handler_add()API,以便为每个GPIO ISR提供驱动程序支持。 要禁用或删除ISR,请将返回的句柄传递给中断分配函数。 参数 • fn:中断处理程序功能。 • intr_alloc_flags:用于分配中断的标志。一个或多个(ORred)ESP_INTR_FLAG_ *值。有关详细信息,请参阅esp_intr_alloc.h。 • arg:处理函数的参数 • handle:返回句柄的指针。如果为非NULL,则会在此处返回中断句柄。 返回 • ESP_OK成功; • ESP_ERR_INVALID_ARG GPIO错误 • ESP_ERR_NOT_FOUND找不到指定标志的空闲中断 esp_err_t gpio_pullup_en(gpio_num_t gpio_num ) 启用GPIO上拉。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码 esp_err_t gpio_pullup_dis(gpio_num_t gpio_num ) 禁用GPIO上拉。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码 esp_err_t gpio_pulldown_en(gpio_num_t gpio_num ) 启用GPIO下拉。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码 esp_err_t gpio_pulldown_dis(gpio_num_t gpio_num ) 禁用GPIO下拉。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码 esp_err_t gpio_install_isr_service( int intr_alloc_flags ) 安装驱动程序的GPIO ISR处理程序服务,该服务允许每个引脚的GPIO中断处理程序。 此函数与gpio_isr_register()不兼容 - 如果使用该函数,则会为所有GPIO中断注册单个全局ISR。如果使用此功能,则ISR服务提供全局GPIO ISR,并通过gpio_isr_handler_add()函数注册各个引脚处理程序。 返回 • ESP_OK成功 • ESP_ERR_NO_MEM没有内存来安装此服务 • 已安装ESP_ERR_INVALID_STATE ISR服务。 • ESP_ERR_NOT_FOUND找不到指定标志的空闲中断 • ESP_ERR_INVALID_ARG GPIO错误 参数 • intr_alloc_flags:用于分配中断的标志。一个或多个(ORred)ESP_INTR_FLAG_ 值。有关详细信息,请参阅esp_intr_alloc.h。 void gpio_uninstall_isr_service() 卸载驱动程序的GPIO ISR服务,释放相关资源。 esp_err_t gpio_isr_handler_add(gpio_num_t gpio_num,gpio_isr_t isr_handler,void * args ) 为相应的GPIO引脚添加ISR处理程序。 使用gpio_install_isr_service()安装驱动程序的GPIO ISR处理程序服务后调用此函数。 除非在gpio_install_isr_service()中分配ISR时传递ESP_INTR_FLAG_IRAM标志,否则不再需要使用IRAM_ATTR声明引脚ISR处理程序。 将从ISR调用此ISR处理程序。因此存在堆栈大小限制(可在menuconfig中配置为“ISR堆栈大小”)。由于额外的间接级别,与全局GPIO中断处理程序相比,此限制较小。 返回 • ESP_OK成功 • ESP_ERR_INVALID_STATE错误的状态,ISR服务尚未初始化。 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码 • isr_handler:相应GPIO号的ISR处理函数。 • args:ISR处理程序的参数。 esp_err_t gpio_isr_handler_remove(gpio_num_t gpio_num ) 删除相应GPIO引脚的ISR处理程序。 返回 • ESP_OK成功 • ESP_ERR_INVALID_STATE错误的状态,ISR服务尚未初始化。 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO号码 esp_err_t gpio_set_drive_capability(gpio_num_t gpio_num,gpio_drive_cap_t strength ) 设置GPIO pad驱动器功能。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO编号,仅支持输出GPIO • strength:打击垫的驱动能力 esp_err_t gpio_get_drive_capability(gpio_num_t gpio_num,gpio_drive_cap_t * strength ) 获得GPIO平板驱动器功能。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO编号,仅支持输出GPIO • strength:指示接受打击垫的驱动能力的指针 esp_err_t gpio_hold_en(gpio_num_t gpio_num ) 设置gpio pad保持功能。 gpio pad保持功能在输入和输出模式下都有效,但必须是具有输出功能的gpios。如果启用了焊盘保持:在输出模式下:焊盘的输出电平将被强制锁定且无法更改。在输入模式下:无论输入信号如何变化,读取的输入值都不会改变。 断电或调用gpio_hold_dis将禁用此功能。 返回 • ESP_OK成功 • ESP_ERR_NOT_SUPPORTED不支持pad hold功能 参数 • gpio_num:GPIO编号,仅支持支持输出的GPIO esp_err_t gpio_hold_dis(gpio_num_t gpio_num ) 取消设置gpio pad保持功能。 返回 • ESP_OK成功 • ESP_ERR_NOT_SUPPORTED不支持pad hold功能 参数 • gpio_num:GPIO编号,仅支持支持输出的GPIO void gpio_iomux_in( uint32_t gpio_num,uint32_t signal_idx ) 通过IOMUX将焊盘输入设置为外设信号。 参数 • gpio_num:焊盘的GPIO编号。 • signal_idx:外围信号id输入。其中一个IN_IDX信号soc/gpio_sig_map.h。 void gpio_iomux_out( uint8_t gpio_num,int func,bool oen_inv ) 通过IOMUX将外设输出设置到GPIO焊盘。 参数 • gpio_num:gpio_num填充的GPIO号。 • func:外设引脚到输出引脚的功能号。之一的FUNC_X*在指定的销(X)的soc/io_mux_reg.h。 • oen_inv:如果需要反转输出启用,则为True,否则为False。 结构 结构gpio_config_t 用于gpio_config函数的GPIO pad的配置参数。 公众成员 uint64_t中pin_bit_mask GPIO引脚:使用位掩码设置,每个位映射到GPIO gpio_mode_t mode GPIO模式:设置输入/输出模式 gpio_pullup_t pull_up_en GPIO上拉 gpio_pulldown_t pull_down_en GPIO下拉 gpio_int_type_t intr_type GPIO中断类型
GPIO_SEL_0 引脚0已选中 GPIO_SEL_1 选择针1 GPIO_SEL_2 选择针2 注意 除了引脚20,24和28…31之外,还有更多的宏,如引脚39。此处未显示它们以减少冗余信息。 GPIO_IS_VALID_GPIO( gpio_num ) 检查它是否是有效的GPIO号码 GPIO_IS_VALID_OUTPUT_GPIO( gpio_num ) 检查它是否可以是输出模式的有效GPIO编号 类型定义 typedef void(* gpio_isr_t)( void * ) 的typedefintr_handle_t gpio_isr_handle_t 枚举 枚举gpio_num_t 价值观: GPIO_NUM_0 = 0 GPIO0,输入和输出 GPIO_NUM_1 = 1 GPIO1,输入和输出 GPIO_NUM_2 = 2 GPIO2,输入和输出 注意 有更多类似于GPIO39的枚举,不包括GPIO20,GPIO24和GPIO28…31。此处未显示它们以减少冗余信息。 注意 GPIO34…39仅为输入模式。 枚举gpio_int_type_t 价值观: GPIO_INTR_DISABLE = 0 禁用GPIO中断 GPIO_INTR_POSEDGE = 1 GPIO中断类型:上升沿 GPIO_INTR_NEGEDGE = 2 GPIO中断类型:下降沿 GPIO_INTR_ANYEDGE = 3 GPIO中断类型:上升沿和下降沿 GPIO_INTR_LOW_LEVEL = 4 GPIO中断类型:输入低电平触发 GPIO_INTR_HIGH_LEVEL = 5 GPIO中断类型:输入高电平触发 GPIO_INTR_MAX 枚举gpio_mode_t 价值观: GPIO_MODE_DISABLE= GPIO_MODE_DEF_DISABLE GPIO模式:禁用输入和输出 GPIO_MODE_INPUT= GPIO_MODE_DEF_INPUT GPIO模式:仅输入 GPIO_MODE_OUTPUT= GPIO_MODE_DEF_OUTPUT GPIO模式:仅输出模式 GPIO_MODE_OUTPUT_OD=((GPIO_MODE_DEF_OUTPUT)|(GPIO_MODE_DEF_OD)) GPIO模式:仅在开漏模式下输出 GPIO_MODE_INPUT_OUTPUT_OD=((GPIO_MODE_DEF_INPUT)|(GPIO_MODE_DEF_OUTPUT)|(GPIO_MODE_DEF_OD)) GPIO模式:输出和输入为开漏模式 GPIO_MODE_INPUT_OUTPUT=((GPIO_MODE_DEF_INPUT)|(GPIO_MODE_DEF_OUTPUT)) GPIO模式:输出和输入模式 枚举gpio_pullup_t 价值观: GPIO_PULLUP_DISABLE = 0x0 禁用GPIO上拉电阻 GPIO_PULLUP_ENABLE = 0x1 使能GPIO上拉电阻 枚举gpio_pulldown_t 价值观: GPIO_PULLDOWN_DISABLE = 0x0 禁用GPIO下拉电阻 GPIO_PULLDOWN_ENABLE = 0x1 使能GPIO下拉电阻 枚举gpio_pull_mode_t 价值观: GPIO_PULLUP_ONLY 垫拉起来 GPIO_PULLDOWN_ONLY 垫拉下来 GPIO_PULLUP_PULLDOWN 垫上拉+下拉 GPIO_FLOATING 垫漂浮 枚举gpio_drive_cap_t 价值观: GPIO_DRIVE_CAP_0 = 0 垫驱动能力:弱 GPIO_DRIVE_CAP_1 = 1 垫驱动能力:更强 GPIO_DRIVE_CAP_2 = 2 Pad驱动器功能:默认值 GPIO_DRIVE_CAP_DEFAULT = 2 Pad驱动器功能:默认值 GPIO_DRIVE_CAP_3 = 3 垫驱动能力:最强 GPIO_DRIVE_CAP_MAX RTC GPIO 头文件 • 驱动器/包括/驱动器/ rtc_io.h
static bool rtc_gpio_is_valid_gpio(gpio_num_t gpio_num ) 确定指定的GPIO是否是有效的RTC GPIO。 返回 如果GPIO对RTC GPIO有效,则为true。否则是假的。 参数 • gpio_num:GPIO号码 esp_err_t rtc_gpio_init(gpio_num_t gpio_num ) 将GPIO初始化为RTC GPIO。 初始化模拟功能的焊盘时,必须调用此功能。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) esp_err_t rtc_gpio_deinit(gpio_num_t gpio_num ) 将GPIO初始化为数字GPIO。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) uint32_t的rtc_gpio_get_level(gpio_num_t gpio_num ) 获取RTC IO输入级别。 返回 • 1高水平 • 0低级别 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) esp_err_t rtc_gpio_set_level(gpio_num_t gpio_num,uint32_t level ) 设置RTC IO输出电平。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) • level:输出水平 esp_err_t rtc_gpio_set_direction(gpio_num_t gpio_num,rtc_gpio_mode_t 模式) RTC GPIO设置方向。 配置RTC GPIO方向,例如仅输出,仅输入,输出和输入。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) • mode:GPIO方向 esp_err_t rtc_gpio_pullup_en(gpio_num_t gpio_num ) RTC GPIO上拉使能。 此功能仅适用于RTC IO。通常,调用gpio_pullup_en,它既适用于普通GPIO,也适用于RTC IO。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) esp_err_t rtc_gpio_pulldown_en(gpio_num_t gpio_num ) RTC GPIO下拉使能。 此功能仅适用于RTC IO。通常,调用gpio_pulldown_en,它既适用于普通GPIO,也适用于RTC IO。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) esp_err_t rtc_gpio_pullup_dis(gpio_num_t gpio_num ) RTC GPIO上拉禁用。 此功能仅适用于RTC IO。通常,调用gpio_pullup_dis,它既适用于普通GPIO,也适用于RTC IO。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) esp_err_t rtc_gpio_pulldown_dis(gpio_num_t gpio_num ) RTC GPIO下拉禁用。 此功能仅适用于RTC IO。通常,调用gpio_pulldown_dis,它既适用于普通GPIO,也适用于RTC IO。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) esp_err_t rtc_gpio_hold_en(gpio_num_t gpio_num ) 在RTC IO pad上启用保持功能。 启用HOLD功能将使焊盘锁存输入使能,输出使能,输出值,功能,驱动强度值的当前值。进入亮或深度睡眠模式时,此功能非常有用,可防止引脚配置发生变化。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) esp_err_t rtc_gpio_hold_dis(gpio_num_t gpio_num ) 禁用RTC IO板上的保持功能。 禁用保持功能将允许焊盘从RTC_IO外设接收输入使能,输出使能,输出值,功能,驱动强度的值。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12) esp_err_t rtc_gpio_isolate(gpio_num_t gpio_num ) 辅助功能将内部电路与RTC IO断开此功能禁用RTC IO的输入,输出,上拉,下拉和启用保持功能。如果需要在深度睡眠时断开RTC IO与内部电路的连接,请使用此功能,以最大限度地减少漏电流。 特别是,对于ESP32-WROVER模块,在进入深度睡眠之前调用rtc_gpio_isolate(GPIO_NUM_12),以减少深度睡眠电流。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG如果GPIO不是RTC IO 参数 • gpio_num:GPIO编号(例如GPIO_NUM_12)。 void rtc_gpio_force_hold_dis_all() 禁用所有RTC IO的强制保持信号。 每个RTC焊盘都有一个来自RTC控制器的“强制保持”输入信号。如果该信号被置位,则pad锁存输入使能,功能,输出使能和来自RTC多路复用器的其他信号的当前值。在进入深度睡眠状态之前,强制保持信号被使能,用于EXT1唤醒的引脚。 esp_err_t rtc_gpio_set_drive_capability(gpio_num_t gpio_num,gpio_drive_cap_t strength ) 设置RTC GPIO焊盘驱动能力。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO编号,仅支持输出GPIO • strength:打击垫的驱动能力 esp_err_t rtc_gpio_get_drive_capability(gpio_num_t gpio_num,gpio_drive_cap_t * strength ) 获得RTC GPIO pad驱动器功能。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG参数错误 参数 • gpio_num:GPIO编号,仅支持输出GPIO • strength:指示接受打击垫的驱动能力的指针 esp_err_t rtc_gpio_wakeup_enable(gpio_num_t gpio_num,gpio_int_type_t intr_type ) 使用特定GPIO启用从睡眠模式唤醒。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG如果gpio_num不是RTC IO,或者intr_type不是GPIO_INTR_HIGH_LEVEL,GPIO_INTR_LOW_LEVEL之一。 参数 • gpio_num:GPIO号 • intr_type:高电平唤醒(GPIO_INTR_HIGH_LEVEL)或低电平唤醒(GPIO_INTR_LOW_LEVEL) esp_err_t rtc_gpio_wakeup_disable(gpio_num_t gpio_num ) 禁用使用特定GPIO从睡眠模式唤醒。 返回 • ESP_OK成功 • ESP_ERR_INVALID_ARG如果gpio_num不是RTC IO 参数 • gpio_num:GPIO号
RTC_GPIO_IS_VALID_GPIO( gpio_num ) 枚举 枚举rtc_gpio_mode_t 价值观: RTC_GPIO_MODE_INPUT_ONLY 填充输入 RTC_GPIO_MODE_OUTPUT_ONLY 垫输出 RTC_GPIO_MODE_INPUT_OUTPUT 垫拉输入+输出 RTC_GPIO_MODE_DISABLED Pad(输出+输入)禁用
