关于stm32待机唤醒实验里中断函数sys_standby的疑问

2019-07-21 07:18发布

很多人像我一样,在看待机唤醒函数的时候卡住好久,主要是觉得,开机后按3秒,根据代码来看,按下去检测到上升沿,进中断,然后check_WKUP为真,就进到了待机函数,这和要求的按3秒开机不符。
经过冥思苦想,终于想到了其中真意,现分享出来,希望可以帮助到有同样问题的人,如有谬误,望指正。
其实重点就在于,
1、如果前一个状态是待机,按下WK_UP键,是直接触发PA0引脚的唤醒功能唤醒,不继续执行中断服务函数的,然后重新开始初始化,到达WKUP_Init最后一句:
①按键不足三秒,check_WKUP==0,执行待机;②按键超过三秒,check_WKUP==1,不执行待机,继续初始化,实现开机
2、如果前一个状态是开机,按下WK_UP键,不触发唤醒功能,而是仅仅作为中断触发,进入中断服务函数,函数中进行判断:
①按键超过三秒,check_WKUP为真(check_WKUP==1),执行待机;②按键不足三秒,check_WKUP为假(check_WKUP==0),不执行待机
可见,是前一个状态+当前操作才共同决定了结果。而前一个状态不同,同样的操作会有相反的结果,实现方式就是通过初始化函数和中断函数中的相反描述去实现的。通过前一个状态不同而选择性执行函数,达到想要的效果。
重点就在于,倘若前一个状态是待机时,WK_UP引脚是作为唤醒引脚而不执行中断的!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。