我想让我ESP8266 GPIO 中断正常工作,但到目前为止我还做不到。我将附加代码中感兴趣的部分。
我的目标是使用 OS-SDK 驱动程序在 GPIO0 上设置中断,并根据 GPIO0 按钮按下切换 GPIO4 值。现在,当我按下按钮,触发GPIO0引脚时,没有任何反应。
更新:现在中断被触发。问题是在 key_init_single() 中传递 GPIO_ID_PIN(0) 而不是 GPIO_Pin_0。但是现在,只要我按下 GPIO0 开关,模块就会有多个系统复位。我已经在 key.c 中禁用了内部上拉,因为我在
PCB 上放置了一个外部上拉。哪个可能是可能的原因?
#include "esp_common.h"
#include "esp8266/gpio_register.h"
#include "gpio.h"
#include "key.h"
#include "user_config.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
LOCAL 结构keys_param键;
LOCAL struct single_key_param *single_key[KEY_NUM];
LOCAL int 状态=0;
xTaskHandle switch_set_point;
LOCAL 无效
key_shortpress(){
state^=1;
//GPIO_OUTPUT_SET(GPIO_ID_PIN(4), state);
printf("Short_press %dn",state);
return;
}
LOCAL 无效
key_longpress(){
printf("Long_pressn");
return;
}
void switch_set (void *pvParameters){
//output configura
tion----------------------------------------------------------------------
GPIO_ConfigTypeDef gpio_out_cfg;
gpio_out_cfg.GPIO_Mode = GPIO_Mode_Output;
gpio_out_cfg.GPIO_Pin = GPIO_Pin_4;
gpio_config(&gpio_out_cfg);
//input configuration----------------------------------------------------------------------
//declaring the input key
single_key[0]=key_init_single(GPIO_ID_PIN(0),PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0,key_longPress,key_shortPress);
keys.key_num = KEY_NUM;
keys.single_key = single_key;
key_init(&keys);
printf("set_interrupt and closing taskn");
vTaskDelete(switch_set_point);
}
无效ICACHE_FLASH_ATTR
user_init(无效)
{
printf("SDK version:%sn", system_get_sdk_version());
/* need to set opmode before you set config */
wifi_set_opmode(STATION_MODE);
xTaskCreate(switch_set, "switch_set", 256, NULL, (1), &switch_set_point);
}