#author("2022-12-28T11:09:10+08:00","default:Admin","Admin") #author("2022-12-28T11:14:30+08:00","default:Admin","Admin") [[ESP32]] &color(red){※This article is based on esp-idf 4.0}; #contents * API [#o98a0443] ** mode用于设置gpio的模式 [#w207fc43] - GPIO_MODE_INPUT 输入 - GPIO_MODE_OUTPUT 输出 - GPIO_MODE_OUTPUT_OD 开漏输出(如果外部或者内部不上拉电阻则无法输出高电平) - GPIO_MODE_INPUT_OUTPUT_OD 开漏输入输出 - GPIO_MODE_INPUT_OUTPUT 输入输出 &color(red){想要获取到GPIO的状态,必须设置为INPUT才可以}; &color(red){mode设置为 GPIO_MODE_OUTPUT 时,通过 gpio_get_level 是获取不到GPIO的状态的;想要获取到GPIO的状态,必须设置为INPUT才可以}; ** pin_bit_mask [#b1526ffe] pin_bit_mask设置需要操作的GPIO引脚,例如要设置GPIO1和GPIO33 则pin_bit_mask应该设置为 (1ULL << 1 | 1ULL << 33) 注意pin_bit_mask类型为uint64_t ** 中断类型枚举 [#yed8de12] - GPIO_INTR_DISABLE //禁用GPIO中断 - GPIO_INTR_POSEDGE //GPIO中断类型:上升沿 - GPIO_INTR_NEGEDGE //下降沿 - GPIO_INTR_ANYEDGE //上升沿和下降沿 - GPIO_INTR_LOW_LEVEL //输入低电平触发 - GPIO_INTR_HIGH_LEVEL //输入高电平触发 *输入 [#n721bc2a] ** 下降沿触发中断 [#gc6f8731] 中断触发按键按下来,触发中断,执行回调函数; - 注意①:中断触发按键连接的是GND和GPIO14,因为是下降沿触发,所以必须一边接地!! - 注意②:代码中要设置&color(red){输入模式,不下拉,内部上拉!};原因在于内部上拉,就是高电平短脚,可以检测到下降沿。 #codeprettify{{ //GPIO口结构体定义 gpio_config_t io_conf; //下降沿触发中断方式 io_conf.intr_type = GPIO_INTR_NEGEDGE; //选择为输出模式 io_conf.mode = GPIO_MODE_INPUT; //配置GPIO_OUT寄存器 io_conf.pin_bit_mask = GPIO_SEL_4; //内部不下拉 io_conf.pull_down_en = 0;//GPIO_PULLDOWN_DISABLE; //内部上拉 io_conf.pull_up_en = 1;//GPIO_PULLUP_ENABLE; //最后配置使能 gpio_config(&io_conf); }} ** 上升沿触发中断 [#m8848dad] 中断触发按键按下来,触发中断,执行回调函数; - 注意①:中断触发按键连接的是VCC和GPIO14,因为是上升沿触发,所以必须一边接高电平!! - 注意②:代码中要设置&color(red){输入模式,不上拉,内部下拉!};原因在于内部下拉时候,就是低电平短脚输入,可以检测到上升沿。 #codeprettify{{ //GPIO口结构体定义 gpio_config_t io_conf; //上升沿触发 io_conf.intr_type = GPIO_INTR_POSEDGE; //选择为输出模式 io_conf.mode = GPIO_MODE_INPUT; //配置GPIO_OUT寄存器 io_conf.pin_bit_mask = GPIO_SEL_4; //内部下拉 io_conf.pull_down_en = 1;//GPIO_PULLDOWN_ENABLE; //禁止上拉 io_conf.pull_up_en = 0;//GPIO_PULLUP_DISABLE; //最后配置使能 gpio_config(&io_conf); }} &ref(ZigBee_体系结构.png); #hr(); コメント: #comment_kcaptcha