大家好,我现在做CC2540时需要调节广播间隔,在无连接时想将广播的频率从默认的100MS降低到1S,该如何做?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好,我现在做CC2540时需要调节广播间隔,在无连接时想将广播的频率从默认的100MS降低到1S,该如何做?
很欢迎你来这里提问, 这样大家都能看到:
在peripheral.c里面的uint16 GAPRole_ProcessEvent( uint8 task_id, uint16 events ) 函数里面做下面修改, 注意红色部分:
if ( events & START_ADVERTISING_EVT )
{
if ( gapRole_AdvEnabled )
{
gapAdvertisingParams_t params;
// Setup advertisement parameters
#if 0 /* For test only */
params.eventType = gapRole_AdvEventType;
params.initiatorAddrType = gapRole_AdvDirectType;
VOID osal_memcpy( params.initiatorAddr, gapRole_AdvDirectAddr, B_ADDR_LEN );
params.channelMap = gapRole_AdvChanMap;
params.filterPolicy = gapRole_AdvFilterPolicy;
if ( GAP_MakeDiscoverable( gapRole_TaskID, ¶ms ) != SUCCESS )
{
gapRole_state = GAPROLE_ERROR;
if ( pGapRoles_AppCGs && pGapRoles_AppCGs->pfnStateChange )
{
pGapRoles_AppCGs->pfnStateChange( gapRole_state );
}
}
#else
uint16 advIntervalMin = 1600; /* Required adv interval. */
uint16 advIntervalMax = 1600; /* Required adv interval. */
uint8 advType = HCI_CONNECTABLE_UNDIRECTED_ADV;
uint8 ownAddrType = HCI_PUBLIC_DEVICE_ADDRESS; /* Public addr. */
uint8 directAddrType = HCI_PUBLIC_DEVICE_ADDRESS; /* Useless here. */
uint8 *directAddr = NULL;
uint8 advChannelMap = HCI_ADV_CHAN_38; /* Only on 38 for sniffer. */
uint8 advFilterPolicy = HCI_ADV_WL_POLICY_ANY_REQ;
HCI_LE_SetAdvParamCmd(advIntervalMin,
advIntervalMax,
advType,
ownAddrType,
directAddrType,
directAddr,
advChannelMap,
advFilterPolicy );
/* Now enable adv. */
HCI_LE_SetAdvEnableCmd(HCI_ENABLE_ADV);
#endif
}
return ( events ^ START_ADVERTISING_EVT );
}
我在做一个射频的项目,用TRF7963读取卡片的信息,通过蓝牙4.0上传,但是会发现打开蓝牙后读卡成功率会显著下降,
所以想把ADV interval降为1S,并且设定SlaveLatency为200,为的是降低CC2540 CPU的负担,
但是修改code #define DEFAULT_ADVERTISING_INTERVAL 1600后,抓到ADV数据包的时间间隔并没有边长啊?
计算时间间隔的方法是不是数据包时间栏中增加的时间除以32,得到单位为ms?
麻烦TI的工程师帮忙看一下,问题出现在哪里啊?
谢谢帮忙!
hi,如果使用广播例程:SimpleBLEBroadcaster
在广播的过程中,怎么修改广播间隔?
我将advInt 的值修改后,直接参照初始化时调用的函数,在主循环里间隔2秒设置一次,结果设置失败
uint16 advInt = Para_Interval;
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );
请各位大神指点一下,谢谢
嗨Yan,我是CQ_JIMI我问你好多个问题啦?我正耐心等待你的回答。这个问题是我想实现从机一分钟广播一次,我发现用这个代码
// Set advertising interval { uint16 advInt = DEFAULT_ADVERTISING_INTERVAL; GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt ); GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt ); }
实现不了我的意图,GAP_SetParamValue(),第二个参数是无符号16位的,所以最大是65536,而我一分钟一次广播按理说advint = 96000
你好,Yan有更好的解决办法吗?