CH582作为客户端发送数据给服务端,服务端收到数据一直都是错的!!!!!这是什么情况???

我无论怎么改主机端的req.pValue这个值,服务端收到的第一位数据永远都是0x5a。服务端跟客户端代码都是官方例子


这里的客户端使用的是手机还是MCU呢,

如果使用的是手机需要在手机端主动使能notify的功能;如果想要从机自己使能notify的功能可以添加这样一个函数:

uint8 enable_notify(uint16 connection_handle,uint8 enable) {
uint16 cccd = 0;
if(enable) {
cccd |= GATT_CLIENT_CFG_NOTIFY;
}else {
cccd &= ~GATT_CLIENT_CFG_NOTIFY;
}
return GATTServApp_WriteCharCfg( connection_handle, simpleProfileChar4Config, cccd );
}

在连接后此函数(Peripheral_LinkEstablished)调用就可以了。 

enable_notify( peripheralConnList.connHandle,ENABLE);


如果使用的是我们的CH582充当主机;可以在Central例程中,连接成功后会去找服务的句柄,找到notify的句柄后进行一个写操作就可以了:

else if(centralDiscState == BLE_DISC_STATE_CCCD)
{
if(pMsg->method == ATT_READ_BY_TYPE_RSP &&
pMsg->msg.readByTypeRsp.numPairs > 0)
{
centralCCCDHdl = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[0],
pMsg->msg.readByTypeRsp.pDataList[1]);
centralProcedureInProgress = FALSE;

// Start do write CCCD
tmos_start_task(centralTaskId, START_WRITE_CCCD_EVT, DEFAULT_WRITE_CCCD_DELAY);           //通过这个写任务打开notify

// Display Characteristic 1 handle
PRINT("Found client characteristic configuration handle : %x \n", centralCCCDHdl);
}
centralDiscState = BLE_DISC_STATE_IDLE;
}

主机代码获取notify数据位置:

else if(pMsg->method == ATT_HANDLE_VALUE_NOTI)
{
PRINT("Receive noti: %x\n", *pMsg->msg.handleValueNoti.pValue);
}




已解决


只有登录才能回复,可以选择微信账号登录