对话框中,
在我的项目中,我让设备处于深度睡眠状态,直到一个唤醒中断被触发或一个固定的时间过去。
下面的工作很好,只要有一个唤醒中断被触发,它就会被唤醒并发布广告,然后进入睡眠。
静态孔隙adv_data_update_timer_cb ()
{
app_adv_data_update_timer_used = 0 xffff;
app_easy_gap_advertise_stop ();
printf_string(“\ n \ radvertise \ r \ n”);
/ / app_easy_timer_cancel_all ();
/ / app_easy_timer(30000年,ble_timer_cb);
wkupct_disable_irq ();
wkupct_register_callback (wake_up_cb);
Wkupct_enable_irq (0x40, 0x40, 1, 0);
arch_set_deep_sleep ();
arch_ble_ext_wakeup_on ();
}
但是,如果我像下面那样同时使用app_easy_timer和wkupct,它就不能工作。在唤醒中断被触发后,它将不会被唤醒。
printf_string(“\ n \ radvertise \ r \ n”);
app_easy_timer_cancel_all ();
ble_timer_cb app_easy_timer (30000);
wkupct_disable_irq ();
wkupct_register_callback (wake_up_cb);
Wkupct_enable_irq (0x40, 0x40, 1, 0);
arch_set_deep_sleep ();
arch_ble_ext_wakeup_on ();
请帮助,对话支持。
嗨achao1104,
很有可能你在醒来的时候没有正确地唤醒BLE。请尝试在6秒后醒来一次或按下按钮:
空白wake_up_cb(空白)
{
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();
arch_ble_force_wakeup ();
arch_ble_ext_wakeup_off ();
default_advertise_operation ();
}
空白app_on_db_init_complete(空白)
{
arch_set_deep_sleep ();
test_timer = app_easy_timer (600wake_up_cb);
Wkupct_enable_irq (0x200, 0x200, 1, 0);
wkupct_register_callback (wake_up_cb);
arch_ble_ext_wakeup_on ();
}
由于MT_dialog
为什么要把“arch_set_deep_sleep();”放在第一个,“arch_ble_ext_wakeup_on();”放在最后一个?
嗨achao1104,
在项目中,我用来测试这个,我没有默认启用deep_sleep,所以我在某处启用了它。应该最后调用arch_ble_ext_wakeup_on(),因为这会使ble处于永久睡眠状态,等待外部中断。请查看UM-B-006.pdf文件,了解更多关于睡眠程序的信息。
由于MT_dialog
嗨MT_dialog,
我只是好奇,如果BLE模块在给定的例子中被永久禁用,系统将如何在6秒后唤醒?
嗨PDonchev,
BLE是永久禁用的,但是定时器的设置消息已经安排好了,所以当时间到来时BLE将唤醒并服务于事件。你有没有试过这个例子,但没有效果?
由于MT_dialog
你好,
谢谢你的解释,非常有帮助。我仍然在做我的第一个BLE项目(目前的优先级较低),我仍然在研究SDK。
一开始我很困惑,但现在我了解了大局。SDK5也有很大的帮助。