我像问一下,修改ch579config中的BLE_BUFF_MAX_LEN为250 BLE_BUFF_NUM为10 BLE_TX_NUM_EVENT为40 会对蓝牙发送有影响吗
我现在遇到的问题: 在第一次连接上蓝牙之后,发送命令等都正常,发送240字节的包也正常,但是断开连接再连接,发送命令后,
mcu就挂了。我不确定是不是因为改了这几个参数,因为之前的工程只是发json 串,没有发过大包,是正常的
我像问一下,修改ch579config中的BLE_BUFF_MAX_LEN为250 BLE_BUFF_NUM为10 BLE_TX_NUM_EVENT为40 会对蓝牙发送有影响吗
我现在遇到的问题: 在第一次连接上蓝牙之后,发送命令等都正常,发送240字节的包也正常,但是断开连接再连接,发送命令后,
mcu就挂了。我不确定是不是因为改了这几个参数,因为之前的工程只是发json 串,没有发过大包,是正常的
static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint16 len, uint16 offset,uint8 method )
{
bStatus_t status = SUCCESS;
//uint8 notifyApp = 0xFF;
// If attribute permissions require authorization to write, return error
if ( gattPermitAuthorWrite( pAttr->permissions ) )
{
// Insufficient authorization
return ( ATT_ERR_INSUFFICIENT_AUTHOR );
}
if ( pAttr->type.len == ATT_BT_UUID_SIZE )
{
// 16-bit UUID
uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
switch ( uuid )
{
case SIMPLEPROFILE_CHAR1_UUID:
//Validate the value
// Make sure it's not a blob oper
if ( offset == 0 )
{
if ( len > SIMPLEPROFILE_CHAR1_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
//Write the value
if ( status == SUCCESS )
{
tmos_memcpy( pAttr->pValue, pValue, SIMPLEPROFILE_CHAR1_LEN );
//notifyApp = SIMPLEPROFILE_CHAR1;
}
break;
case SIMPLEPROFILE_CHAR2_UUID:
//Validate the value
// Make sure it's not a blob oper
if ( offset == 0 )
{
if ( len > SIMPLEPROFILE_CHAR2_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
//Write the value
if ( status == SUCCESS )
{
tmos_memcpy( pAttr->pValue, pValue, SIMPLEPROFILE_CHAR2_LEN );
tmos_memcpy( pAppValue, pValue, SIMPLEPROFILE_CHAR2_LEN );
deal_json(pAppValue);
//notifyApp = SIMPLEPROFILE_CHAR2;
}
break;
case GATT_CLIENT_CHAR_CFG_UUID:
status = GATTServApp_ProcessCCCWriteReq( connHandle, pAttr, pValue, len,
offset, GATT_CLIENT_CFG_NOTIFY );
break;
default:
// Should never get here! (characteristics 2 and 4 do not have write permissions)
status = ATT_ERR_ATTR_NOT_FOUND;
break;
}
}
if (app_cmd == CMD2_START_MEASURE1){
if(Page_OPT.Page_ID == PAGE_ID_WaitForPipe){
// 清除流量
sensor_clear_flow(&GAS);
sensor_set_samlpe_interval(&GAS, 1);
sensor_data.time = 0;
//清除存储值
time_display = 0;
TMR0_init();
tmos_start_task(SYSTEM_TaskID, RUN_EVENT_MSG, MS1_TO_SYSTEM_TIME(100));
tmos_start_task(SYSTEM_TaskID,V_Q_CHANGE_MSG,MS1_TO_SYSTEM_TIME(100));
tmos_start_task(SYSTEM_TaskID,BLE_SEND_FIRST_MEASURE_DATA,MS1_TO_SYSTEM_TIME(50));
time_inver = time_count;
}
LCD_KEY_PAGE_START();
我像问一下config中BLE_BUFF_MAX_LEN 改为250??BLE_BUFF_NUM改为10?BLE_TX_NUM_EVENT改为40 对蓝牙连接的稳定性有没有关系,我改完之后,会偶尔出现发包卡死的问题
我遇到的问题:
改完包后,第一次连接发送读取数据的指令,可以读到数据,并且循环发送也都能收到数据,但是断开连接后,再发送读取数据的指令,整个就会卡死,这个断开连接再连接的过程可能两到三次,就会出现卡死的问题
在之前的工程中,我只是发送一些json串,没有改过这些参数,是没有出现问题的
您好,BLE从机默认代码中char1~char4默认通信数据长度都是1,char5是5。
如要修改MTU,BLE从机例程中注意修改如下几处
1.config.h中BLE_BUFF_MAX_LEN改为最大值251
2.gattprofile.h中SIMPLEPROFILE_CHARn_LEN(n=1~5)改为最大值243(char4默认使用notify,协议开销少一个字节,故char4的MTU可以配置244)
3. 如果需要使用notify且发包负载大于20个字节,则CH58xBLE_LIB.h中的ATT_MTU_SIZE也需要扩大为最大负载+3
BLE主机如果是手机APP,要看APP的是否对MTU有调整。如果手机APP是BLE调试助手,每次连接后要在APP右上角修改MTU为251(最大值视情况而定,与config.h中的BLE_BUFF_MAX_LEN一致就好)