You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32使用NimBLE开发蓝牙时调用ble_gatts_count_cfg报错求助

问题根因

你调用gatt_svrs_init()的时机错误:NimBLE的GATT服务配置注册操作,必须在蓝牙主机完成同步(即ble_on_sync回调触发)之后才能执行,你直接在app_main初始化阶段就调用该接口,此时蓝牙主机还未完成初始化同步,触发了无效状态错误(返回码0x3对应ESP_ERR_INVALID_STATE)。

修复步骤

  1. 把app_main里的ESP_ERROR_CHECK(gatt_svrs_init());、ble_svc_gap_device_name_set()、ble_store_config_init()这三行代码移除,移动到ble_on_sync回调函数内部实现,参考回调实现逻辑:
static void ble_on_sync(void)
{
    int rc;
    /* 同步完成后再注册GATT服务 */
    rc = gatt_svrs_init();
    assert(rc == 0);

    /* 设置设备名称 */
    rc = ble_svc_gap_device_name_set(DEVICE_NAME);
    assert(rc == 0);

    /* 初始化存储配置 */
    ble_store_config_init();

    /* 此处补充你自己的广播启动逻辑 */
}
  1. 检查自定义UUID合法性:确保DEVICE_STATE_SERVICE、CURRENT_SPECTRUM这类自定义128位UUID的定义格式符合NimBLE要求,不要出现未初始化、类型不匹配的问题。
  2. 权限匹配检查:如果开启了蓝牙加密功能,确保NimBLE配置里的安全管理器选项已打开,匹配你特征值上配置的BLE_GATT_CHR_F_READ_ENC加密读权限要求。
  3. 编译烧录后即可正常运行。

内容的提问来源于stack exchange,提问作者userK123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:54:00