2026/2/5 4:33:42
网站建设
项目流程
如何做一个网站设计,办文明网站 做文明网民活动,附近广告牌制作电话,有做公司网站在Keil开发环境下#xff0c;基于nRF52832芯片和S132 SoftDevice的所有错误码#xff08;err_code#xff09;的具体含义和完整列表#xff0c;这是 Nordic 开发中排查问题的关键参考。
有以下几点#xff1a;
Nordic错误码核心分为通用错误码#xff08;nrf_error.h基于nRF52832芯片和S132 SoftDevice的所有错误码err_code的具体含义和完整列表这是 Nordic 开发中排查问题的关键参考。有以下几点Nordic错误码核心分为通用错误码nrf_error.h和S132专用错误码蓝牙相关非0值均代表错误开发中高频遇到的错误码包括NRF_ERROR_BUSY资源忙、NRF_ERROR_INVALID_PARAM参数错误、NRF_ERROR_TIMEOUT超时、NRF_ERROR_BLE_STACK_BUSY蓝牙栈忙在Keil中可通过查看头文件或编写错误码解析函数快速定位错误码含义提高调试效率。一、错误码核心说明Nordic 的错误码体系主要分为两类通用错误码适用于所有 nRF52 系列和 SoftDevice如 S132定义在nrf_error.hSoftDevice 专用错误码S132 蓝牙协议栈专属定义在s132_nrf52_版本号_softdevice_api.h如s132_nrf52_6.1.1_softdevice_api.h错误码均为uint32_t类型非0值代表错误NRF_SUCCESS (0)代表执行成功。二、核心错误码列表及含义Keil环境通用以下是开发中最常用的错误码按功能分类整理1. 通用基础错误码nrf_error.h错误码常量数值含义NRF_SUCCESS0操作成功NRF_ERROR_SVC_HANDLER_MISSING1SVC 处理函数缺失SoftDevice 初始化前未配置中断NRF_ERROR_SOFTDEVICE_NOT_ENABLED2SoftDevice 未启用NRF_ERROR_INTERNAL3内部错误协议栈内部逻辑异常NRF_ERROR_NO_MEM4内存不足如申请缓冲区失败NRF_ERROR_NOT_FOUND5未找到指定资源如未找到蓝牙服务/特征NRF_ERROR_NOT_SUPPORTED6不支持的操作如调用了S132不支持的蓝牙功能NRF_ERROR_INVALID_PARAM7参数无效传入非法值如空指针、超出范围NRF_ERROR_INVALID_STATE8状态错误如蓝牙未初始化就发送数据NRF_ERROR_INVALID_LENGTH9长度错误如数据长度超过MTU值NRF_ERROR_INVALID_FLAGS10标志位错误如传入非法的蓝牙连接标志NRF_ERROR_INVALID_DATA11数据错误如格式错误、校验失败NRF_ERROR_DATA_SIZE12数据大小超出限制NRF_ERROR_TIMEOUT13超时如蓝牙连接超时、广播超时NRF_ERROR_NULL14空指针错误NRF_ERROR_FORBIDDEN15操作被禁止如权限不足NRF_ERROR_INVALID_ADDR16地址无效如蓝牙MAC地址错误NRF_ERROR_BUSY17资源忙如SoftDevice正在处理其他请求NRF_ERROR_CONN_COUNT18连接数超出限制S132最大支持8个连接2. S132 SoftDevice 专用错误码蓝牙相关错误码常量数值含义NRF_ERROR_BLE_INVALID_CONN_HANDLE0x0080无效的蓝牙连接句柄NRF_ERROR_BLE_STACK_BUSY0x0081蓝牙协议栈忙NRF_ERROR_BLE_INVALID_ATTR_HANDLE0x0082无效的属性句柄如特征句柄错误NRF_ERROR_BLE_NO_TX_BUFFERS0x0083发送缓冲区耗尽蓝牙数据发送缓存不足NRF_ERROR_BLE_NO_RX_BUFFERS0x0084接收缓冲区耗尽NRF_ERROR_BLE_TX_OVERFLOW0x0085发送数据溢出NRF_ERROR_BLE_RX_OVERFLOW0x0086接收数据溢出NRF_ERROR_BLE_AUTH_FAILURE0x0087蓝牙认证失败如配对密钥错误NRF_ERROR_BLE_PIN_OR_KEY_MISSING0x0088配对码/密钥缺失NRF_ERROR_BLE_LL_REJECTED_PARAMS0x0089链路层拒绝参数如连接参数协商失败NRF_ERROR_BLE_LL_CONN_REJECTED0x008A链路层拒绝连接如对方设备拒绝NRF_ERROR_BLE_GAP_INVALID_BLE_ADDR0x008B无效的蓝牙地址NRF_ERROR_BLE_GAP_SEC_PARAMS_INVALID0x008C安全参数无效如加密参数错误NRF_ERROR_BLE_GATT_INVALID_CCCD0x008D无效的客户端特征配置描述符CCCDNRF_ERROR_BLE_GATT_WRITE_NOT_PERMITTED0x008EGATT写操作不被允许NRF_ERROR_BLE_GATT_READ_NOT_PERMITTED0x008FGATT读操作不被允许3. 硬件/驱动相关错误码错误码常量数值含义NRF_ERROR_INVALID_IRQ20无效的中断号NRF_ERROR_DMA_FAILED21DMA传输失败NRF_ERROR_PIN_INVALID22引脚号无效如配置了nRF52832不存在的引脚NRF_ERROR_UNALIGNED_ADDR23地址未对齐三、Keil环境下快速查询错误码的实用方法在Keil中开发时可通过以下方式快速定位错误码含义1. 直接查看头文件最准确通用错误码nRF5_SDK_版本/components/softdevice/common/nrf_error.hS132专用错误码nRF5_SDK_版本/components/softdevice/s132/headers/s132_nrf52_版本_softdevice_api.h蓝牙GAP/GATT错误码nRF5_SDK_版本/components/ble/ble_gap.h、ble_gatt.h2. 编写错误码解析函数Keil中直接调用C#include stdint.h#include stdio.h#include nrf_error.h/*** brief 解析nRF52832/S132错误码为可读字符串* param err_code: 错误码数值* return 错误码描述字符串*/const char* err_code_to_string(uint32_t err_code){switch(err_code){case NRF_SUCCESS: return NRF_SUCCESS: 操作成功;case NRF_ERROR_SOFTDEVICE_NOT_ENABLED: return NRF_ERROR_SOFTDEVICE_NOT_ENABLED: SoftDevice未启用;case NRF_ERROR_NO_MEM: return NRF_ERROR_NO_MEM: 内存不足;case NRF_ERROR_INVALID_PARAM: return NRF_ERROR_INVALID_PARAM: 参数无效;case NRF_ERROR_INVALID_STATE: return NRF_ERROR_INVALID_STATE: 状态错误;case NRF_ERROR_TIMEOUT: return NRF_ERROR_TIMEOUT: 操作超时;case NRF_ERROR_BUSY: return NRF_ERROR_BUSY: 资源忙;case NRF_ERROR_BLE_INVALID_CONN_HANDLE: return NRF_ERROR_BLE_INVALID_CONN_HANDLE: 无效蓝牙连接句柄;case NRF_ERROR_BLE_STACK_BUSY: return NRF_ERROR_BLE_STACK_BUSY: 蓝牙协议栈忙;case NRF_ERROR_BLE_AUTH_FAILURE: return NRF_ERROR_BLE_AUTH_FAILURE: 蓝牙认证失败;default:{static char unknown_err[32];sprintf(unknown_err, 未知错误码: 0x%08X, err_code);return unknown_err;}}}// 调用示例在Keil中调试时使用void test_err_code(void){uint32_t err sd_ble_gap_adv_start(adv_params, APP_BLE_CONN_CFG_TAG);if(err ! NRF_SUCCESS){// 打印错误码含义需配置串口输出printf(广播启动失败: %s\r\n, err_code_to_string(err));}}使用说明将此函数添加到工程中需确保开启串口打印如使用nrf_uart调用SoftDevice API后将返回的err_code传入该函数即可在串口终端看到可读的错误描述可根据开发需求在switch中补充更多错误码的解析。四、关键注意事项版本兼容性不同版本的S132如6.1.1、7.3.0错误码数值可能略有差异需以对应版本的头文件为准错误码范围Nordic错误码数值通常为32位低16位为核心错误码高16位可能为扩展信息Keil调试技巧在Keil的Watch窗口中输入err_code可直接查看错误码数值再对照上述列表定位问题。