设备无法从长时间睡眠中唤醒

了解更多常见问题解答教程

4个职位/0个新职位
最后一个帖子
智慧卡
离线
最后一次见到:5个月前5天
加入:2015年8月17日
设备无法从长时间睡眠中唤醒

你好,

我正在做一个项目,其中设备的默认睡眠模式是扩展睡眠模式。我试图用同步和异步机制唤醒设备。
我们面临的问题是设备确实从计时器回调中唤醒,但不是从外部中断中唤醒。
以下是用于使用外部中断进行唤醒配置的代码段:
无效设置填充函数(){
GPIO_配置引脚(GPIO_ACC_INT2_端口,GPIO_ACC_INT2_引脚,输入_下拉,PID_GPIO,假);
}

void user_app_disconnect(struct gapc_disconnect_ind const*param)
{
启动_adv();
}

无效启动\u adv()
{
架构扩展唤醒开启();
app_button_enable();
}

无效(U按钮)
{
app_easy_唤醒_设置(app_wakeup_cb);
wkupct_register_callback(应用程序按钮按下_cb);
wkupct_enable_irq(wkupct_PIN_SELECT(GPIO_ACC_INT2_端口,GPIO_ACC_INT2_引脚),//选择引脚(GPIO_BUTTON_端口,GPIO_BUTTON_PIN)
WKUPCT_PIN_极性(GPIO_ACC_INT2_端口,GPIO_ACC_INT2_PIN,WKUPCT_PIN极性高),//极性低
1,//1事件
40);//去抖动时间=0
}

静态无效应用程序唤醒cb(无效)
{

}

静态无效应用按钮按下cb(无效)
{
if(GetBits16(SYS_STAT_REG,PER_IS_DOWN)(获取位16(SYS_STAT_REG,PER_IS_DOWN))
{
periph_init();
}

if(arch\u ble_ext_wakeup_get())
{
设置睡眠模式(应用程序默认睡眠模式);
拱形结构力唤醒();
架构扩展唤醒关闭();
app_easy_唤醒();
}
}

我面临的问题是,在接收到触发器时,程序控制到达函数app_button_press_cb(),而不是函数app_wakeup_cb()。请提出可能的原因。

谢谢

设备:
MT_对话框
离线
最后一次见到:1周3天前
工作人员
加入:2015-06-08 11:34
你好wisilica,

你好wisilica,

如果中断发生时,设备到达app_button_press_cb(),表示设备得到中断;如果它从未到达app_wakeup_cb,则表示执行永远不会到达app_easy_wakeup_get(),这意味着arch_ext_wakeup_get()是错误的。由于arch_ble_ext_wakeup_get()为false,因此我假设在您调用arch_ble_ext_wakeup_off()时,您不会调用arch_ble_ext_wakeup_on(),以便将sleep_ext_force标志设置回true。

谢谢你的对话

智慧卡
离线
最后一次见到:5个月前5天
加入:2015年8月17日
你好,

你好,
实际上,通过发出中断点u来检查。控件到达APP_easy_wakeup()中的ke_msg_send_basic(wakeup_id,TASK_APP,0)部分。但是控件无法到达app_wakeup_cb()。我也使用基于定时器的唤醒。同时使用两种唤醒机制有什么问题吗?基于定时器的唤醒功能非常好。

谢谢

MT_对话框
离线
最后一次见到:1周3天前
工作人员
加入:2015-06-08 11:34
你好wisilica,

你好wisilica,

如果app_wakeup_cb()没有触发,但消息已设置并发送(正在调用app_easy_wakeup_set()和app_easy_wakeup()),请检查user_modules_config.h文件,并确保EXCLUDE_DLG_MSG已定义并设置为0,则可能是您错误地排除了该模块。不,我不认为计时器是个问题。

谢谢你的对话