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.

[参考译文] 编译器/CC2541:CC2541通过按钮(p0.0引脚)休眠和唤醒

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

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/566297/compiler-cc2541-cc2541-sleep-and-wake-up-with-button-p0-0-pin

器件型号:CC2541
Thread 中讨论的其他部件:CC2540BLE-STACK

工具/软件:TI C/C++编译器

你(们)好

我需要你的建议。  有关 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);
} 


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jeong、
    您可以参阅 SensorTag 应用程序(sensorTag_HandleKeys()中)中使用的解决方案,其中简单的按钮按压将启用/禁用广播(如果没有振荡器处于活动状态,则双堆栈将器件自动设置为低功耗模式)。 然后按住按钮3秒钟将重置设备。

    在您的情况下、您应该添加一些去抖:
    OSAL_START_timerEx (simpleBLEPeripheral_TaskID、KEYHOLD_EVT、“去抖值”);