关于待机唤醒实验的理解(参考论坛的讨论帖)
一、程序运行后进入待机模式
首先函数先走一遍,到void WKUP_Init(void)的时候各种初始化,执行到 if(Check_WKUP()==0) Sys_Standby()语句时,调用u8 Check_WKUP(void)。DS0亮,在while循环内按键没有按下,90ms后return0并且DS0灭(也就是开机会有灯闪一下的现象),if语句成立,即进入待机状态。
二、待机模式下按键长按3S即进入工作模式
待机状态,按键按下不足3s时Check_WKUP()的返回值都是0,满足void WKUP_Init(void)中的if(Check_WKUP()==0)语句 ,则执行Sys_Standby(),则3s内一直处于待机模式,只有达到3s后返回值才是1,if不成立,跳出待机,执行开机。这也就是为什么满足wkup上升沿而不立即执行开机的原因。关于待机不执行中断我也不怎么理解,希望有人解答
三、开机模式下按键长按3S即进入待机模式
这个比较简单,开机模式,按下Wkup跳到中断函数,3S后返回1,满足if(Check_WKUP()),进入待机模式。
关于程序流程,论坛里有人总结的很好:
1 、如果是正常运行,先执行中断程序,判断是否3秒,决定是否待机。
2 、如果是待机状态,则先复位并初始化,判断是否3秒,决定是否开机。
错误之处请指出,谢谢!
|