对话框,
在我的项目中,我让设备进入深度睡眠状态,直到触发唤醒中断或经过一段固定的时间。
下面的方法工作得很好,只要触发了唤醒中断,它就会被唤醒并播发,然后进入睡眠状态。
静态void adv\u data\u update\u timer\u cb()
{
app\u adv\u data\u update\u timer\u used=0xFFFF;
app_easy_gap_advertise_stop();
printf_字符串(“\n\r验证完成\r\n”);
//app_easy_timer_cancel_all();
//应用程序简易定时器(30000,ble定时器cb);
wkupct_disable_irq();
wkupct\u register\u callback(唤醒\u cb);
wkupct\u enable\u irq(0x40,0x40,1,0);
拱门设置深度睡眠();
arch_ble_ext_wakeup_on();
}
但是如果我像下面一样使用app\u easy\u timer和wkupct,它就不起作用了。触发唤醒中断后,它将不会被唤醒。
printf_字符串(“\n\r验证完成\r\n”);
app_easy_timer_cancel_all();
应用程序简易定时器(30000,ble定时器cb);
wkupct_disable_irq();
wkupct\u register\u callback(唤醒\u cb);
wkupct\u enable\u irq(0x40,0x40,1,0);
拱门设置深度睡眠();
arch_ble_ext_wakeup_on();
设备:
请帮忙,对话支持。
嗨,阿乔1104,
很可能你在醒来的时候没有正确地醒来。请尝试在6秒后醒来一次或按以下按钮:
void唤醒\u cb(void)
{
if(GetBits16(SYS\u STAT\u REG,PER\u IS \u DOWN))
periph_init();
拱力唤醒();
arch_ble_ext_wakeup_off();
默认_播发_操作();
}
void app\u on \u db\u init\u complete(void)完成
{
拱门设置深度睡眠();
test\u timer=app\u easy\u timer(600,唤醒\u cb);
wkupct\u enable\u irq(0x200,0x200,1,0);
wkupct\u register\u callback(唤醒\u cb);
arch_ble_ext_wakeup_on();
}
谢谢你的对话
放置“arch_set_deep_sleep();”的原因是什么在第一个和“arch_ble_ext_wakeup_on();”最后一个?
嗨,阿乔1104,
在我用来测试这个的项目中,默认情况下我没有启用deep\u sleep,所以我在某个地方启用了它。应最后调用arch\u ble\u ext\u wakeup\u on(),因为它将使ble处于永久睡眠状态,等待外部中断。有关睡眠过程的更多信息,请查看UM-B-006.pdf文件。
谢谢你的对话
嗨,MT\u dialog,
我只是好奇,如果在给定的示例中BLE模块被永久禁用,系统将如何在6秒后唤醒?
嗨,普登切夫,
BLE被永久禁用,但计时器的设置消息是allready Scheduled,因此当时间到来时,BLE将唤醒并服务于事件。你有没有试过这个例子,但没有成功?
谢谢你的对话
你好,
谢谢你的解释,很有帮助。我还在做我的第一个BLE项目(目前优先级很低),我还在研究SDK。
一开始我很困惑,但现在我明白了大局。SDK5也帮了不少忙。