我理解,任何要对esp32某一脚进行读写操作都要配置gpio。
可以对不同类型,不同的io脚进行配置,比如可以配置2脚为输入,3脚为输出,4脚为上升沿中断
可以用gpio_config_t 结构体对某脚进行配置,也可以用多个gpio函数对某脚进行配置
struct gpio_config_t
Public Members
{
uint64_t pin_bit_mask //使用位掩码设置,每个位映射到一个 GPIO。 1ULL<<12
gpio_mode_t mode //GPIO 模式:设置输入/输出模式
GPIO_MODE_INPUT:将 GPIO 设置为输入模式
GPIO_MODE_OUTPUT:将 GPIO 设置为输出模式
GPIO_MODE_INPUT_OUTPUT:将 GPIO 设置为输入/输出模式
GPIO_MODE_OUTPUT_OD:将 GPIO 设置为开漏输出模式 这种模式下,GPIO 引脚可以将电流拉到地,但不会主动驱动高电平。通常与外部上拉电阻配合使用
GPIO_MODE_INPUT_OUTPUT_OD:将 GPIO 设置为开漏输入/输出模式
GPIO_MODE_INPUT_OUTPUT_STRONG:将 GPIO 设置为强驱动输入/输出模式。这种模式下,GPIO 引脚能够主动驱动高电平和低电平
gpio_pullup_t pull_up_en //GPIO 上拉
GPIO_PULLUP_DISABLE:禁用上拉电阻。GPIO 引脚不会连接到 VCC
GPIO_PULLUP_ENABLE:启用上拉电阻。GPIO 引脚会通过上拉电阻连接到 VCC
gpio_pulldown_t pull_down_en // GPIO 下拉
GPIO_PULLDOWN_DISABLE:禁用下拉电阻。GPIO 引脚不会连接到地。
GPIO_PULLDOWN_ENABLE:启用下拉电阻。GPIO 引脚会通过下拉电阻连接到地。
gpio_int_type_t intr_type //GPIO 中断类型
GPIO_INTR_DISABLE:禁用 GPIO 中断。GPIO 引脚不会触发中断。
GPIO_INTR_POSEDGE:在上升沿触发中断。GPIO 引脚从低电平变为高电平时触发中断。
GPIO_INTR_NEGEDGE:在下降沿触发中断。GPIO 引脚从高电平变为低电平时触发中断。
GPIO_INTR_ANYEDGE:在任意边沿触发中断。GPIO 引脚在上升沿或下降沿时触发中断。
GPIO_INTR_LOW_LEVEL:在低电平期间触发中断。GPIO 引脚保持低电平时触发中断。
GPIO_INTR_HIGH_LEVEL:在高电平期间触发中断。GPIO 引脚保持高电平时触发中断
}
//---函数------------------------------------------------------------------------------
1 esp_err_t gpio_config (const gpio_config_t *pGPIOConfig)
2. esp_err_t gpio_reset_pin (gpio_num_t gpio_num)
将 GPIO 复位为默认状态(选择 GPIO 功能,启用上拉,并禁用输入和输出)
3 esp_err_t gpio_set_intr_type (gpio_num_t gpio_num, gpio_int_type_t intr_type)
设置 GPIO 的中断触发类型
4 esp_err_t gpio_intr_enable (gpio_num_t gpio_num)
启用 GPIO 模块的中断信号。
5 esp_err_t gpio_intr_disable (gpio_num_t gpio_num)
禁用 GPIO 模块的中断信号
6 esp_err_t gpio_set_level (gpio_num_t gpio_num, uint32_t level)
7 int gpio_get_level (gpio_num_t gpio_num)
8 esp_err_t gpio_set_direction (gpio_num_t gpio_num, gpio_mode_t mode)
设置指定 GPIO 的工作模式。
9 esp_err_t gpio_set_pull_mode (gpio_num_t gpio_num, gpio_pull_mode_t pull)
配置 GPIO 的上拉/下拉电阻。
10 esp_err_t gpio_wakeup_enable (gpio_num_t gpio_num, gpio_int_type_t intr_type)
启用 GPIO 唤醒功能
11 esp_err_t gpio_wakeup_disable (gpio_num_t gpio_num)
12 esp_err_t gpio_pullup_en (gpio_num_t gpio_num)
Enable pull-up on GPIO.
13 esp_err_t gpio_pulldown_en (gpio_num_t gpio_num)
Enable pull-down on GPIO.
14 esp_err_t gpio_pulldown_dis (gpio_num_t gpio_num)
Disable pull-down on GPIO.
15 esp_err_t gpio_install_isr_service (int intr_alloc_flags)
安装 GPIO 驱动程序的 ETS_GPIO_INTR_SOURCE ISR 处理程序服务,该服务允许为每个引脚设置 GPIO 中断处理程序
16 void gpio_uninstall_isr_service(void)
卸载驱动程序的 GPIO ISR 服务,释放相关资源。
17 esp_err_t gpio_isr_handler_add (gpio_num_t gpio_num, gpio_isr_t isr_handler, void *args)
为相应的 GPIO 引脚添加 ISR 处理程序。
18 esp_err_t gpio_isr_handler_remove (gpio_num_t gpio_num)
19 esp_err_t gpio_set_drive_capability (gpio_num_t gpio_num, gpio_drive_cap_t strength)
设置 GPIO 引脚的驱动能力。
20 esp_err_t gpio_get_drive_capability (gpio_num_t gpio_num, gpio_drive_cap_t *strength)
21 esp_err_t gpio_hold_en (gpio_num_t gpio_num)
启用 GPIO 引脚保持功能
22 esp_err_t gpio_hold_dis (gpio_num_t gpio_num)
23 void gpio_deep_sleep_hold_en (void)
在深度睡眠期间启用所有数字 GPIO 引脚的保持功能。
24 void gpio_deep_sleep_hold_dis (void)
25 void gpio_iomux_in (uint32_t gpio_num, uint32_t signal_idx)
通过 IOMUX 将引脚输入设置为外设信号
26 void gpio_iomux_out (uint8_t gpio_num, int func, bool out_en_inv)
通过 IOMUX 将外设输出设置到 GPIO 引脚
27 esp_err_t gpio_sleep_sel_en (gpio_num_t gpio_num)
启用 SLP_SEL 以在轻度睡眠中自动更改 GPIO 状态
28 esp_err_t gpio_sleep_sel_dis(gpio_num_t gpio_num)
29 esp_err_t gpio_sleep_set_direction (gpio_num_t gpio_num, gpio_mode_t mode)
30 esp_err_t gpio_sleep_set_pull_mode (gpio_num_t gpio_num, gpio_pull_mode_t pull)
31 esp_err_t gpio_dump_io_configuration (FILE *out_stream, uint64_t io_bit_mask)