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:我需要您的建议。 有关 CC2540遥控钥匙按钮(p0.0引脚)操作的更多信息。

Guru**** 2576815 points
Other Parts Discussed in Thread: CC2540, CC2541

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/566303/cc2540-i-need-your-advice-about-cc2540-keyfob-button-p0-0-pin-action

器件型号:CC2540
主题中讨论的其他器件: CC2541

你(们)好

我需要你的建议。  有关 CC2540遥控钥匙按钮(p0.0引脚)操作的更多信息。

我正在使用 cc2541mini DK (有 cc2541密钥卡、数据包监听器和 ccDebugger)

我使用的是具有省电功能的 SimpleBLEPeripheral 项目(Ble stack 1.4.0)。

我正在尝试实现这一点。 

1.加电:遥控器正常工作(广告、定期事件等),具有省电功能
2.按钮为长按(超过3秒):遥控钥匙进入睡眠模式 
3.按钮再次被长按:遥控钥匙唤醒并正常工作,具有省电功能 

1和2没有问题、3有问题、间歇性工作。
请告知问题是什么。 


我在项目中更改了 HandleKey 函数和密钥事件、如下所示

------------------------------------------------------------------ 

静态空 keyfobapp_HandleKeys (uint8 shift、uint8 key)
{
if (keys & HAL_key_sw_1)
{
OSAL_START_timerEx (simpleBLEPeripheral_TaskID、KEYHOLD_EVT,0);
}

bool sys_wake = true;//全局变量,睡眠/唤醒状态

if (Events & KEYHOLD_EVT)
{
如果(P0_0=0)//按钮被按下
{
SW1_HOLD_cnt++;
OSAL_START_timerEx (simpleBLEPeripheral_TaskID、KEYHOLD_EVT、1000);
}
else //按钮被释放
{
if (sw1_hold_cnt >=3)
{

if (sys_wake == true)
{

uint8 turnOnAdv = false;

GAPRole_SetParameter( GAPROLE_advertise_enabled,sizeof ( uint8 ),&TurnOnAdv );

OSAL_STOP_timerEx (simpleBLEPeripheral_TaskID、period_EVT);

SYS_WAKE = false;

//hal_sleep (0);
}
其他
{

uint8 turnOnAdv = true;

GAPRole_SetParameter( GAPROLE_advertise_enabled,sizeof ( uint8 ),&TurnOnAdv );

OSAL_START_timerEx (simpleBLEPeripheral_TaskID、period_EVT、0);

SYS_WAKE = true;

}


}
SW1_HOLD_cnt = 0; 
} 返回(事件^ KEYHOLD_EVT); } ------------------------------------------------------------------
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我实施了类似的方案、我的解决方案非常适合我。
    第一次按住按钮3秒钟时、您将如何进入睡眠模式??? 可能是您的系统在实际重新打开广播之前将恢复睡眠状态。

    将系统置于长期睡眠状态的一种方法是将广播间隔设置为"0"。
    然后在唤醒并重新启用广播(您正在执行的操作)时将其重置为有效值