乐鑫技术交流
直播中

打马过草原

10年用户 971经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

ESP32蓝牙不断触发GPIO外部中断的原因?

硬件:esp32-Wroom-IE

SDK:esp-idf v4.4、esp-adf v2.4

逻辑需求:

1. GPIO_NUM_39作为GPIO输入中断,双边沿触发;GPIO_NUM_39,外部已下拉;当触发中断,则改变GPIO_NUM_32输出状态。
Code: Select all
void trigger_demo(void *arg) {
    static uint8_t demo_state = 0;
    demo_state = ~demo_state;
    gpio_set_level(GPIO_NUM_32, demo_state);
}
void board_pins_init(void) {
    gpio_isr_handle_t handle;
    gpio_config_t io_conf;
    memset(&io_conf, 0, sizeof(io_conf));
    io_conf.mode = GPIO_MODE_INPUT;
    io_conf.pin_bit_mask = BIT64(GPIO_NUM_39);
    io_conf.pull_down_en = 0;
    io_conf.pull_up_en = 1;
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    gpio_config(&io_conf);
    gpio_install_isr_service(0);
    gpio_isr_handler_add(ALARM_INPUT_GPIO, trigger_demo, NULL);

2. 蓝牙,
Code: Select all
int app_bt_init(audio_board_handle_t board_handle)
{
    esp_err_t err;
    if(is_inited) {
        ESP_LOGW(TAG, "app bt already had been initialized!");
        return ESP_OK;
    }
    err = esp_bt_controller_mem_release(ESP_BT_MODE_BLE);
    if(err != ESP_OK) {
        ESP_LOGE(TAG, "bt controller mem release error:%d", err);
        goto init_err;
    }
    esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
    err = esp_bt_controller_init(&bt_cfg);
    if(err != ESP_OK) {
        ESP_LOGE(TAG, "bt controller init error: %d", err);
        goto init_err;
    }
    err = esp_bt_controller_enable(ESP_BT_MODE_BTDM);
    if(err != ESP_OK) {
        ESP_LOGE(TAG, "bt controller enable error: %d", err);
        goto init_err;
    }   
    err = esp_bluedroid_init();
    if(err != ESP_OK) {
        ESP_LOGE(TAG, "bluedroid init error: %d", err);
        goto init_err;
    }
    err = esp_bluedroid_enable();
    if(err != ESP_OK) {
        ESP_LOGE(TAG, "bluedroid enable error: %d", err);
        goto init_err;
    }

    /** 设置蓝牙可被连接,且可被发现 */
    esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);
}





在启动蓝牙的情况下,存在以下问题:



1. 当GPIO_NUM_39输入高电平,将会每1秒进入一次中断;当停止高电平输入,不会出现每1秒进入中断这种现象。

2. 当屏蔽上述esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);,则GPIO_NUM_39输入高,只触发一次中断。断开高电平,也是触发一次中断。GPIO双边沿中断逻辑正常。

请教下,设置蓝牙可被连接且发现,为什么会影响到GPIO中断?谢谢!

更多回帖

发帖
×
20
完善资料,
赚取积分