DA14580,基本开发工具包,SDK 5.0.3
帮助! !我一直试图让app_ble_peripheral示例进入扩展睡眠模式,蓝牙操作挂起,等待外部唤醒,但没有成功。我已经成功地从SDK 3编译并运行了接近报告程序,它做的事情类似于我想要的:在3分钟不活动后进入深度睡眠。我已经尝试将相同的步骤应用到SDK 5 app_ble_peripheral示例,它没有挂起BLE操作.....或者至少在发生像近距离报道这样的外部事件之前不会稳固。
在app_ble_peripheral示例的副本中,我设置了一个app_easy_timer来在60秒后启动以下步骤:
停止广告:app_easy_gap_advertise_stop ();
停止广告定时器:app_easy_timer_cancel(app_adv_data_update_timer_used);
设置扩展睡眠:arch_set_extended_sleep();
暂停蓝牙操作:arch_ble_ext_wakeup_on();
建立唤醒函数:wkupct_register_callback(app_button_press_cb);
Wkupct_enable_irq (0x0200, 0x0200, 1,0);// P1_1, active low for P1_1, 1 event, debundo time = 0ms
我已经在调试器中进行了测试,以验证计时器触发,并使我进入上面的睡眠序列。然后我已经undef CFG_DEVELOPMENT_DEBUG,编译,编程EEPROM,重置和引导。它似乎并没有进入稳定的延长睡眠模式。蓝牙操作仍然活跃,我仍然可以通过平板电脑进行扫描和连接。我仍然有很大的权力.....完全不像接近记者进入睡眠模式的10uA。
我真的很想让app_ble_peripheral以这种方式运行,作为进一步开发的基础。我已经读了很多论坛的帖子和文件,我的眼睛是模糊的,我仍然没有得到任何地方,所以一些有用的建议将非常感谢。
嗨Max44,
让睡眠模式启动,为了SDK5装置,落在睡眠模式下,你必须设置app_default_sleep_mode ARCH_EXT_SLEEP_ON以来在所有这些例子中睡眠将ARCH_SLEEP_OFF(如果你调用arch_set_extended_sleep()这使睡眠模式动态)。只是这样做,你就会在广告间隔之间睡着(你不能使用调试器来测试这一点,当在睡眠模式下,你不能通过keil调试)。你上面提到的程序是可以的。通过停止广告,您可以停止BLE活动并取消计时器,我认为您的错误是您在timer_handler中顺序地发出所有上述命令。做这种事的正确方法是等待时间流逝和处理程序就停止广告和取消计时器(问题app_easy_gap_advertise_stop()),广告停止时,处理程序将被触发user_app_adv_undirect_complete()的处理程序你应该设置为仅从外部中断唤醒arch_ble_ext_wakeup_on()注册你的唤醒回调并启用中断,你不需要调用arch_set_extended_sleep(),因为你已经处于睡眠模式(当设备没有BLE活动时将处于低功耗状态)。希望有帮助。
由于MT_dialog
谢谢太!您在user_app_adv_undirect_complete()中使用外部唤醒调用睡眠的建议工作得很好。从UM-B-006中我怀疑我需要某种方法来与BLE事件同步,我只是不知道在SDK 5示例的上下文中如何同步。
在断开启动EEPROM后,我甚至看到了一个极好的2uA。
请将此标记为已完成并回答。再次感谢您一贯的专家建议。
马克斯