本文目的
- 获取协议栈的部分运行信息,包括不仅限于
1.BLE建立连接时候的同步字
2.BLE建立连接时候CRC init值
3.BLE连接后的数据包重发率和接收率
4.收发器的AFC校准结果(与对方通信的相对频率偏差)
本文适用芯片
- wch 全系列蓝牙芯片(请确保使用最新的蓝牙协议栈)
实现
1.将下面代码拷贝到HAL>MCU.c 文件内
/****ble lib status start************************/
#define WCH_BLE_PRIVATE_LIB_STATUS (1UL<<1)
void wch_ble_private_set(uint32_t code,uint8_t enable) {
extern uint32_t llRecvDataDisable;
if(enable) {
llRecvDataDisable |= code;
}else {
llRecvDataDisable &= ~code;
}
}
uint8_t hse_get_cap(void) {
#ifdef CH32V20x_D8W
return (OSC->HSE_CAL_CTRL>>28)&0x7;
#else
return (R8_XT32M_TUNE>>4);
#endif
}
void wch_ble_lib_status_callback( uint8_t code, uint32_t status ) {
//PRINT("ble lib status callback \n");
static uint32_t trx,crc;
static int16_t cfo;
static int8_t rssi;
switch(code) {
case 9: //trx
trx = status;
break;
case 10: //crc
crc = status;
break;
case 11: //cfo
cfo = (int16_t )status;
break;
case 12: //rssi
rssi = (int8_t )status;
PRINT("%u|%u\t%u\t%d|%x\t%d\r\n",trx>>16,100-(trx&0xffff),crc,cfo,hse_get_cap(),rssi);
break;
case 13: //access code
PRINT("ACCESS CODE:%08X\n",status);
break;
case 14: //
PRINT("CRC INIT :%X\n", status );
break;
case 15:
case 16:
case 17:
default:
PRINT("code:%08x|%u ,status:%08x|%u \n",code,code,status,status);
break;
}
}
2.在初协议栈初始化结构体中,加入
cfg.staCB = wch_ble_lib_status_callback;
3.主循环前调用函数wch_ble_private_set(1<<1,1);
打印数据说明
//发包重试|接收包的成功率 crc出错的数量, 无线收发器频率校准误差|HSE电容配置 对方信号的的rssi
// 0|100 0 -2|5 -33
// 0|49 0 -12|5 -33