主题中讨论的其他器件:MSP430F2418、
根据第38页的 PAN1326数据表、平均 BLE"广播、可发现"电流为121uA。 但是、我测量的平均系统电流为800uA。 我需要尽可能减少电流消耗、并需要帮助以实现理论上可能达到的~130uA。
使用的 MSP430F2418位于 LPM3中、如果我将 PAN1326上的 nShutdown 引脚置为有效、则电路板电流降至15uA。 根据这一结论、我得出的电流由 PAN1326模块消耗、并且它未进入正确的电源状态。 我将 Bluetopia v1.5用于堆栈、代码基于 SPPLE Demo Lite 示例的修改版本。
原理图摘录如下所示。 VBAT 为3.4V、S1和 S2是 VBAT 位置的跳线。 我在下面包含了修改后的 SPPLEDemo.c 和 MainThread()以及 IdleFunction()实现。
/*以下函数负责检查空闲状态*/*
并可能进入 LPM3模式。 */
static void IdleFunction (void *UserParameter)
{
if (BLEdataToProcess)
return;//仍可完成
#ifdef __connection_timeout__//if
((ConnectionID !=0)&&(connection_timeout !=0)// 2017年5月23
日 if ((ConnectionID !=0)&&(flgBLEOperationOn =1)) // 2017年5月23日
{
返回; //do not sleep
}
#endif
//如果堆栈空闲且我们处于 HCILL 睡眠状态,则可以进入*//*
LPM3模式(禁用计时器中断)。 //
if (((bsc_QueryStackIdle (BluetoothStackID))&&(SlepEnabled)
){
/*尝试暂停 UART。 *
if (!HCITR_COMSSENPEND (0))
{
/*在禁用计时器中断的情况下输入 MSP430 LPM3 (我们将*/
/*需要中断才能将我们从该状态唤醒)。 *
//HAL_LowPowerMode ((unsigned char) false);
#if 1.
if ((beacon INT_flag = 1)&&(Pkt_RCD = 0)&&(RxCount=0)&&(RxState_=0)&&(RxState_=0))
//if (((Pkt_RCD = 0)&&(RxCount=0)&&(RxState=0))
{
//FRAM_POWEROFF ();//comment out 05/18/2017 // 06/2017
PWRDO_FlashIC ();//确保闪存已断电
HAL_LowPowerMode ((unsigned char) false);
}
其他
HAL_LowPowerMode ((unsigned char) false);
#endif
/*检查是否正在唤醒(由控制器)。*/
/*如果是,我们将禁用睡眠模式,以便完成*/
/*过程。 *
if (!HCITR_UartSusspened (0))
SlepEnabled = false;
}
其他
{
/*未能暂停 UART,这必须是指 *
/*控制器正在尝试唤醒。 因此、我们将*/
禁用睡眠模式的标志。 *
SlepEnabled = false;
}
}
}/*
以下函数是主用户界面线程。 它 //
//*打开蓝牙堆栈,然后驱动主用户界面。*/
static void MainThread (void)
{
int 结果;
BTPS_Initialization_t BTPS_Initialization;
HCI_DriverInformation_t HCI_DriverInformation;
HCI_HCIILLConfiguration_t HCILLConfig;
HCI_Driver_reconfigure_Data_t DriverReconfigureData;
/*标记睡眠当前未启用。 */
SlepEnabled = false;
/*配置 UART 参数。 */
HCI_DRIVER_SET_COMM_information (&HCI_DriverInformation、1、115200、cpHCILL);
HCI_DriverInformation.DriverInformation.COMMDriverInformation.InitializationDelay = 100;
/*设置应用程序回调。 //
BTPS_Initialization.GetTickCountCallback = GetTickCallback;
BTPS_Initialization.MessageOutputCallback = DisplayCallback;
/*初始化应用程序。 //
if (((结果= InitializeApplication (&HCI_DriverInformation、&BTPS_Initialization))> 0)
{
/*保存蓝牙堆栈 ID。 *
BluetoothStackID =(无符号 int)结果;
/*如果我们使用 HFILL 模式,请注册睡眠模式回调。 *
if ((HCI_DriverInformation.DriverInformation.COMMDriverInformation.Protocol =cpHCILL)||(HCI_DriverInformation.DriverInformation.COMMDriverInformation.Protocol ==cpHCILL_RTS_CTS))
{
HILLConfig.Sleep 回调功能 = HCI_SLEEP_Callback;
HILLConfig.Sleep CallbackParameter = 0;
DriverReconfigureData.ReconfigureCommand = HCI_COMM_DRIVER_RECONFIG_DATA_COMMAND_CHANGE_HCILL_PARAMETERS;
DriverReconfigureData.ReconfigureData =(void *) HFILLConfig;
/*注册睡眠模式回调。 请注意、如果是这样 *
/*函数返回大于0的值,则睡眠当前为 *
/*已启用。 *
结果= HCI_RECONFIG_Driver (BluetoothStackID、false、&DriverReconfigureData);
if (结果>0)
{
/*标志睡眠模式已启用。 *
SlepEnabled = true;
}
}
//FRAM_POWERON ();//comment out 05/18/2017 // 06/2017
//FRAM_POWEROFF ();//comment out 05/18/2017 // 06/2017
BTPS_AddFunctionToScheduler (IdleFunction、NULL、0);//用于管理
if (BTPS_AddFunctionToScheduler (BLEApplication、NULL、5))
/*添加 IDLE 函数(用于确定是否可以进入 LPM3)*/
/*到调度程序。 *
//if (BTPS_AddFunctionToScheduler (IdleFunction、NULL、0))
{
/*永久循环并执行调度程序。 *
while (1)
BTPS_ExecuteScheduler();
}
}