GPIO

  • 1. 函数gpio_config
  • 2. 函数gpio_set_intr_type
  • 3. 函数gpio_intr_enable
  • 4. 函数gpio_intr_disable
  • 5. 函数gpio_set_level
  • 6. 函数gpio_get_level
  • 7. 函数gpio_set_direction
  • 8. 函数gpio_set_pull_mode
  • 9. 函数gpio_wakeup_enable
  • 10. 函数gpio_wakeup_disable
  • 11. 函数gpio_isr_register
  • 12. 函数gpio_pullup_en
  • 13. 函数gpio_pullup_dis
  • 14. 函数gpio_pulldown_en
  • 15. 函数gpio_pulldown_dis
  • 16. 函数gpio_install_isr_service
  • 17. 函数gpio_uninstall_isr_service
  • 18. 函数gpio_isr_handler_add
  • 19. 函数 gpio_isr_handler_remove


1. 函数gpio_config

函数原型:esp_err_t gpio_config (const gpio_config_t* pGPIOConfig)
功能描述:配置外设GPIO。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数:pGPIOConfig,指向gpio_config_t的指针,包含了外设GPIO的配置信息,gpio_config_t在文件gpio.h中定义。

typedef struct {
	uint64_t pin_bit_mask;
	gpio_mode_t mode;
	gpio_pullup_t pull_up_en;
	gpio_pulldown_t pull_down_en;
	gpio_int_type_t intr_type;
} gpio_config_t;

(1)pin_bit_mask
通过位掩码设置,每个位映射到一个GPIO引脚,使用操作符“|”可一次选中多个引脚。例如对于GPIO0和GPIO1进行设置可写成如下形式。

led.pin_bit_mask = 1 << GPIO_NUM_0 | 1 << GPIO_NUM_1;

(2)mode
mode用以设置选中引脚的工作模式。mode的取值如下表所示。

mode可取的值

描述

GPIO_MODE_INPUT

仅输入

GPIO_MODE_OUTPUT

仅输出

GPIO_MODE_OUTPUT_OD

仅开漏输出

GPIO_MODE_INPUT_OUTPUT_OD

开漏模式输出/输入

GPIO_MODE_INPUT_OUTPUT

输入/输出

(3)pull_up_en
设置选中引脚是否上拉,其取值如下表所示。

pull_up_en可取值

描述

GPIO_PULLUP_DISABLE

禁用GPIO上拉电阻

GPIO_PULLUP_ENABLE

启用GPIO上拉电阻

GPIO_PULLUP_ENABLE 启用GPIO上拉电阻
(4)pull_down_en
设置选中引脚是否上拉,其取值如下表所示。

pull_down_en可取值

描述

GPIO_PULLDOWN_DISABLE

禁用GPIO下拉电阻

GPIO_PULLDOWN_ENABLE

启用GPIO下拉电阻

(5)intr_type
intr_type用于设置是否开启中断及开启中断的类型,其可取的值如下表所示。

intr_type可取值

描述

GPIO_INTR_DISABLE

禁用GPIO中断

GPIO_INTR_POSEDGE

GPIO中断类型:上升沿触发

GPIO_INTR_NEGEDGE

GPIO中断类型:下降沿触发

GPIO_INTR_ANYEDGE

GPIO中断类型:上升沿和下降沿均触发

GPIO_INTR_LOW_LEVEL

GPIO中断类型:输入低电平触发

GPIO_INTR_HIGH_LEVEL

GPIO中断类型:输入高电平触发

初始化GPIO0为输出,无中断模式,则可使用下面的代码。

gpio_config_t gpio_configstructure;
gpio_configstructure.pin_bit_mask = 1 << GPIO_NUM_0;
gpio_configstructure.mode = GPIO_MODE_OUTPUT;
gpio_configstructure.pull_up_en = GPIO_PULLUP_DISABLE;
gpio_configstructure.pull_down_en = GPIO_PULLDOWN_DISABLE;
gpio_configstructure.intr_type = GPIO_INTR_DISABLE;
gpio_config(&gpio_configstructure);

2. 函数gpio_set_intr_type

函数原型: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 参数错误。
输入参数1:gpio_num,用以设置中断触发端口位。例如需要GPIO16产生中断,则:

gpio_num = GPIO_NUM_16;

输入参数2:intr_type,中断类型,从下表中选择。

intr_type可取值

描述

GPIO_INTR_DISABLE

禁用GPIO中断

GPIO_INTR_POSEDGE

GPIO中断类型:上升沿触发

GPIO_INTR_NEGEDGE

GPIO中断类型:下降沿触发

GPIO_INTR_ANYEDGE

GPIO中断类型:上升沿和下降沿均触发

GPIO_INTR_LOW_LEVEL

GPIO中断类型:输入低电平触发

GPIO_INTR_HIGH_LEVEL

GPIO中断类型:输入高电平触发

3. 函数gpio_intr_enable

函数原型:esp_err_t gpio_intr_enable (gpio_num_t gpio_num)
功能描述:使能GPIO端口中断功能。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数:gpio_num,用以设置开启中断的端口位。例如需要使能GPIO16的中断,则:

gpio_num = GPIO_NUM_16;

4. 函数gpio_intr_disable

函数原型:esp_err_t gpio_intr_disable (gpio_num_t gpio_num)
功能描述:失能GPIO端口中断功能。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数:gpio_num,用以设置关闭中断的端口位。例如需要关闭GPIO16的中断,则:

gpio_num = GPIO_NUM_16;

5. 函数gpio_set_level

函数原型:esp_err_t gpio_set_level (gpio_num_t gpio_num, uint32_t level)
功能描述:设置GPIO输出电平。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数1:gpio_num,需要设置输出电平的端口位。例如需要设置GPIO16的输出电平,则:

gpio_num = GPIO_NUM_16;

输入参数2:level,输出电平。0:低电平;1:高电平。

6. 函数gpio_get_level

函数原型:int gpio_get_level (gpio_num_t gpio_num)
功能描述:获取GPIO输入电平。
返回参数:0,GPIO输入电平为低电平;1,GPIO输入电平为高电平。
输入参数:gpio_num,需要获得输入电平的端口位。如获取GPIO16的输入电平,则:

gpio_num = GPIO_NUM_16;

7. 函数gpio_set_direction

函数原型:esp_err_t gpio_set_direction (gpio_num_t gpio_num, gpio_mode_t mode)
功能描述:配置端口模式,例如仅输出、仅输入、输出和输入等。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数1:gpio_num,需要设置端口模式的端口位。如设置GPIO16的模式,则:

gpio_num = GPIO_NUM_16;

输入参数2:mode,用以设置选中引脚的工作模式。mode的取值如下表所示。

mode可取的值

描述

GPIO_MODE_INPUT

仅输入

GPIO_MODE_OUTPUT

仅输出

GPIO_MODE_OUTPUT_OD

仅开漏输出

GPIO_MODE_INPUT_OUTPUT_OD

开漏模式输出/输入

GPIO_MODE_INPUT_OUTPUT

输入/输出

8. 函数gpio_set_pull_mode

函数原型:esp_err_t gpio_set_pull_mode (gpio_num_t gpio_num, gpio_pull_mode_t pull)
功能描述:配置GPIO上拉/下拉电阻。只有同时支持输入和输出的引脚才有集成的上拉和下拉电阻。对于仅支持输入GPIO34-39,不可进行该操作。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数1:gpio_num,需要进行设置的端口位。如设置对GPIO16进行设置,则:

gpio_num = GPIO_NUM_16;

输入参数2:pull,用以设置端口的上下拉模式。pull的取值如下表所示。

pull可取的值

描述

GPIO_PULLUP_ONLY

仅上拉

GPIO_PULLDOWN_ONLY

仅下拉

GPIO_PULLUP_PULLDOWN

上拉+下拉

GPIO_FLOATING

浮空

9. 函数gpio_wakeup_enable

函数原型:esp_err_t gpio_wakeup_enable (gpio_num_t gpio_num, gpio_int_type_t intr_type
功能描述:启用GPIO唤醒功能,以唤醒Light-sleep休眠模式。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数1:gpio_num,需要进行设置的端口位。
输入参数2:intr_type,GPIO唤醒类型。其取值如下表所示:

intr_type可取的值

描述

GPIO_INTR_LOW_LEVEL

低电平唤醒

GPIO_INTR_HIGH_LEVEL

高电平唤醒

10. 函数gpio_wakeup_disable

函数原型:esp_err_t gpio_wakeup_disable (gpio_num_t gpio_num)
功能描述:禁用GPIO唤醒功能。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数:gpio_num,需要进行设置的端口位。

11. 函数gpio_isr_register

函数原型:esp_err_t gpio_isr_register (void (*fn)(void *), void *arg, int intr_alloc_flags, gpio_isr_handle_t *handle)
功能描述:统一为所有的GPIO口注册一个全局的ISR,即任何的GPIO中断触发,都会调用该中断处理函数(ISR)。可通过gpio_install_isr_service()和gpio_isr_handler_add()函数来配置GPIO以支持ISR。若要禁用或删除ISR,可参考中断相关库函数功能。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误;ESP_ERR_NOT_FOUND 未找到具有指定标志的空闲中断。
输入参数1:fn,中断处理函数。
输入参数2:arg,中断处理函数的参数。
输入参数3:intr_alloc_flags,用于分配中断的标志。相关的ESP_INTR_FLAG_*值的描述可参见esp_intr_alloc.h。
输入参数4:handle,该指针用于接受返回的句柄。若该值非空,中断的句柄将返回该处,该句柄稍后可用于请求详细信息或释放中断。若不需要句柄,则可以为NULL。

12. 函数gpio_pullup_en

函数原型:esp_err_t gpio_pullup_en (gpio_num_t gpio_num)
功能描述:启用GPIO上拉模式。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数:gpio_num,需要进行设置的端口位。

13. 函数gpio_pullup_dis

函数原型:esp_err_t gpio_pullup_dis (gpio_num_t gpio_num)
功能描述:关闭GPIO上拉模式。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数:gpio_num,需要进行设置的端口位。

14. 函数gpio_pulldown_en

函数原型:esp_err_t gpio_pulldown_en (gpio_num_t gpio_num)
功能描述:启用GPIO下拉模式。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数:gpio_num,需要进行设置的端口位。

15. 函数gpio_pulldown_dis

函数原型:esp_err_t gpio_pulldown_dis (gpio_num_t gpio_num)
功能描述:关闭GPIO下拉模式。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_ARG 参数错误。
输入参数:gpio_num,需要进行设置的端口位。

16. 函数gpio_install_isr_service

函数原型:esp_err_t gpio_install_isr_service (int intr_alloc_flags)
功能描述:安装GPIO ISR服务的驱动,开启每个引脚GPIO中断处理程序 。这个函数与gpio_isr_register()不兼容。使用这个函数,将提供一个全局GPIO ISR。若需注册单个引脚的中断处理程序可使用gpio_isr_handler_add()函数来实现。
返回参数:ESP_OK 成功;ESP_FAIL 操作失败;ESP_ERR_NO_MEM 没有内存来安装此服务。
输入参数:intr_alloc_flags,用于分配中断的标志。相关的ESP_INTR_FLAG_*值的描述可参见esp_intr_alloc.h。

17. 函数gpio_uninstall_isr_service

函数原型:void gpio_uninstall_isr_service ()
功能描述:卸载GPIO ISR服务的驱动,释放相关资源。

18. 函数gpio_isr_handler_add

函数原型:esp_err_t gpio_isr_handler_add (gpio_num_t gpio_num, gpio_isr_t isr_handler, void *args)
功能描述:为GPIO引脚添加中断处理回调函数。ISR处理程序不再需要用IRAM_ATTR来声明,除非在gpio_install_isr_service()中分配ISR时传递了ESP_INTR_FLAG_IRAM标志。这个ISR处理程序将从ISR中调用。因此存在一个堆栈大小限制(可在menuconfig中配置为“ISR堆栈大小”)。与全局GPIO中断处理程序相比,该限制更小,因为间接寻址级别更高。
返回参数:ESP_OK 成功;ESP_ERR_INVALID_STATE 状态错误,ISR服务尚未初始化;ESP_ERR_INVALID_ARG 参数错误。
输入参数1:gpio_num,需要进行设置的端口位。
输入参数2:isr_handler,对应GPIO端口的ISR中断处理函数。
输入参数3:args,传递给中断处理函数的参数。

19. 函数 gpio_isr_handler_remove

函数原型: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,需要进行设置的端口位。