ESPIDF-GPIO
ESPIDF-GPIO
管脚配置
1 | esp_err_t gpio_config(const gpio_config_t *pGPIOConfig) |
Configure GPIO’s Mode, pull-up, PullDown, IntrType
pGPIOConfig 为配置管脚的结构体指针
找到 gpio_config_t 如下所示:
1 | typedef struct { |
pin_bit_mask
pin_bit_mask 设置的是管脚号,每一位对应相应的引脚,因为是 uint64_t 类型,应该用 ULL (unsigned long long),假设要配置的引脚号是 num,则:
1 | io.pin_bit_mask = 1ULL << num; |
mode
mode 配置的是输入/输出状态。
1 | typedef enum { |
pull_up_en & pull_down_en
使能上拉/下拉电阻。
1 | typedef enum { |
intr_type
中断触发方式。
1 | typedef enum { |
设置电平
1 | esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level) |
gpio_num 为引脚号,level 为输出电平。
0:低电平 1:高电平
读取电平
1 | int gpio_get_level(gpio_num_t gpio_num) |
外部中断
首先打开 GPIO 全局中断服务。
1 | esp_err_t gpio_install_isr_service(int intr_alloc_flags) |
参数 intr_alloc_flags – Flags used to allocate the interrupt.
在 “esp_intr_alloc.h” 中有更多信息。
1 | //Keep the LEVELx values as they are here; they match up with (1<<level) |
然后初始化GPIO,设置需要的触发方式。
IO初始化之后,注册中断服务函数并添加进芯片全局中断服务。当IO上产生对应的事件后,就会触发注册的函数。
1 | esp_err_t gpio_isr_handler_add(gpio_num_t gpio_num, gpio_isr_t isr_handler, void *args) |
例如
1 | static void IRAM_ATTR isr_handler(void* arg) |
如果某个时刻我们想将某个IO中断关闭可以使用下面的函数
1 | esp_err_t gpio_isr_handler_remove(gpio_num_t gpio_num); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Star!