你好,
我正在进行一个项目,其中设备的默认睡眠模式是扩展睡眠模式。我正在尝试使用同步和异步机制唤醒设备。
我们面临的问题是,设备确实会从计时器回调中唤醒,但不会从外部中断中唤醒。
以下是用于使用外部中断进行唤醒配置的代码段:
void set\u pad\u functions(){
GPIO\ U配置引脚(GPIO\ U ACC\ U INT2\端口、GPIO\ U ACC\ U INT2\引脚、INPUT\下拉、PID\ U GPIO、false);
}
void user\u app\u disconnect(结构gapc\u disconnect\u ind const*参数)
{
启动\u adv();
}
无效开始\u adv()
{
arch_ble_ext_wakeup_on();
应用程序按钮启用();
}
静态无效应用程序按钮启用(无效)
{
app\u easy\u wakeup\u set(app\u wakeup\u cb);
wkupct注册回调(app按钮按下cb);
wkupct\u enable\u irq(wkupct\u PIN\u SELECT(GPIO\u ACC\u INT2\u PORT,GPIO\u ACC\u INT2\u PIN),//SELECT PIN(GPIO\u BUTTON\u PORT,GPIO\u BUTTON\u PIN)
WKUPCT\ U引脚\ U极性(GPIO\ U ACC\ U INT2\端口、GPIO\ U ACC\ U INT2\引脚、WKUPCT\ U引脚\ U极性\高)、//极性低
1,//1事件
40); // 去抖动时间=0
}
静态无效应用程序\u唤醒\u cb(无效)
{
}
静态无效应用按钮按下cb(无效)
{
if(GetBits16(SYS\u STAT\u REG,PER\u IS \u DOWN))
{
periph_init();
}
if(arch\u ble\u ext\u wakeup\u get())
{
arch\设置\睡眠\模式(应用\默认\睡眠\模式);
拱力唤醒();
arch_ble_ext_wakeup_off();
app_easy_wakeup();
}
}
我面临的问题是,在接收到触发器时,程序控制到达函数app\u button\u press\u cb(),而不是函数app\u wakeup\u cb()。请说明可能的原因。
谢谢

你好,wisilica,
当中断发生时,如果设备到达app\u按钮,按下cb(),则表示设备得到中断;如果设备从未到达app\u wakeup,则表示执行从未到达app\u easy\u wakeup(),并且表示arch\u ext\u wakeup\u get()为false。由于arch\u ble\u ext\u wakeup\u get()为false,因此我假设在调用arch\u ble\u ext\u wakeup\u off()时,不调用arch\u ble\u ext\u wakeup\u on()以将sleep\u ext\u force标志设置回true。
谢谢你的对话
你好,
实际上,arch\u ble\u ext\u wakeup\u get()是true(通过发出断点进行检查)。控件最多可到达应用程序\u easy\u wakeup()中的ke\u msg\u send\u basic(wakeup\u id,TASK\u APP,0)部分。但是控件没有到达app\u wakeup\u cb()。我也使用基于计时器的唤醒。同时使用两种唤醒机制有什么问题吗?基于定时器的唤醒工作得很完美。
谢谢
你好,wisilica,
如果app\u wakeup\u cb()未触发,但消息已设置并发送(正在调用app\u easy\u wakeup\u set()和app\u easy\u wakeup()),请检查user\u modules\u config.h文件,确保已定义EXCLUDE\u DLG\u MSG并将其设置为0,可能是您错误地排除了模块。不,我不认为计时器有问题。
谢谢你的对话