主题中讨论的其他器件:SysConfig、 CC2340R5
工具与软件:
在我们的应用循环中、我们预计每5秒有一个 BLE 广播。 为了节省电力、我们在退出循环之前禁用 BLE 广播并调用 sleep ()函数以在连续的 BLE 广播之间引入延迟。
我们的系统需要具有高功效、我们预计 Sleep ()调用会将 BLE CC2340置于睡眠模式、从而将每个 BLE 通告之间的总体系统电流消耗降低至大约10微安。
但是、我们将观察到每次 BLE 广播传输之间的波纹。 我们不确定缺少什么内容或导致 BLE 控制器进入睡眠模式的原因。
随附的图片说明了我们应用在连续 BLE 广播传输之间的行为。

在系统中观察到的平均电流大约为恒定的166 uA、这会导致我们的电池失去其提供能量的能力。

提供的代码片段简化了广播的启用和禁用以及处理过程。 此外、它还可以利用信标完成广播过程、并确认启用和禁用 BLE 广播的操作在 TI BLE 堆栈内正确执行、从而确保各种系统任务之间的同步。
CC23400R5堆栈是否具有 API、允许 BLE 处理器转换到低功耗模式并在调用这些 API 后立即恢复。
-----------------------------------------------------------------------------------------------------------------------------------------------------
void appEnableBle (char * pData)
{
bStatus_t 状态;
char* cpyData = pData;
STATUS = Broadcaster_Adv_enable ();
if (成功==状态)
{
sem_post (_blesem);
}
}
void appDisableBle (char * pData)
{
bStatus_t 状态;
char* cpyData = pData;
STATUS = Broadcaster_adv_disable ();
if (成功==状态)
{
sem_post (_blesem);
}
}
开关环路
bleStatus = BLEAppUtil_invokeFunctionNoData (appEnableBle);
if (成功== bleStatus)
{
/*等待启用广播操作完成*/
sem_wait (_blesem)(&B);
}
/*等待广播完成*/
sem_wait (&bleAdv);
/*禁用广播*/
bleStatus = BLEAppUtil_invokeFunctionNoData (appDisableBle);
if (成功== bleStatus)
{
/*等待禁用广播操作完成*/
sem_wait (_blesem)(&B);
}
睡眠(5);
末端循环
广播处理程序
void 4.2000 Broadcaster_Adv 处理程序(uint32事件、BLEAppUtil_msgHdr_t *pMsgData)
{
BLE454.12.Data_t Util_Adv * advData =(BLE307.Data_t*) Util_Adv pMsgData;
静态 uint8_t i=0;
静态 uint8_t j=0;
bStatus_t 状态;
uint8_t debug1 = 0;
uint8_t debug2 = 0;
开关(事件)
{
案例 BLEAPPUTIL_ADV_START_AFTER_ENABLE:
{
debug1 = advData->pBuf->advHandle;
休息;
}
案例 BLEAPPUTIL_ADV_END_AFTER_DISABLE:
{
debug2 = advData->pBuf->advHandle;
休息;
}
案例 BLEAPPUTIL_ADV_END:
{
if (bleDataAvailable)
{
对于(I = 0;I < B_ADDR_LEN;I++)
{
advData1[i + USER_ADV_DATA_OFFSET]= DATA[i];
}
对于(j = 0;j < bleDataLength;j++)
{
advData1[i + USER_ADV_DATA_OFFSET]= bleDataarr[j];
I++;
}
for (j = i;j < sizeof (advData1);j++)
{
advData1[j + USER_ADV_DATA_OFFSET]= 0x00;
}
bleDataAvailable = 0;
GapAdv_prepareLoadByHandle (广播 AdvHandle_1、
GAP_ADV_FREE_OPTION_DONT_FREE);
GapAdv_loadByHandle (广播 asterAdvHandle_1、GAP_ADV_DATA_TYPE_ADV、
sizeof (advData1)、advData1);
sem_post (&bleAdv);
}
休息;
}
默认值:
{
休息;
}
}
}
谢谢
Ilanchezhian T
