OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2793|回复: 1

待机唤醒实验的理解请高手指正理解错误的地方

[复制链接]

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-6-8
在线时间
6 小时
发表于 2016-1-14 17:01:48 | 显示全部楼层 |阅读模式
1金钱
认真分析了这个实验的执行过程:
程序下载到stm32后,代码从main开始执行,当执行到WKUP_Init()函数时,函数里面的最后一句代码if(Check_WKUP()==0) Sys_Standby()时,CPU确定操作方向。
因为第一次下载程序,WKUP按键没有按下,if(Check_WKUP()==0)成立,所以cpu进入待机模式。
按一次按键,cpu就已经被唤醒,代码从main从新执行,但是当执行到代码if(Check_WKUP()==0) Sys_Standby()时,因为大家只是按键一下,没有达到要求的3s时间,所以cpu再次进入待机状态。
这里特别重要的一点是:****WKUP按键唤醒功能是不需要外部中断这个功能函数的。WKUP按键按下一次,cpu就被唤醒了,之所以没有进行lcd的显示,是因为又从新进入待机状态了。
按键时间达到3s时,if(Check_WKUP()==0)不成立,不进行待机操作,所以cpu进行了main里面的相应操作,包括相关时钟开启,led_init(),中断功能开启等初始化。


如果此时再按下按键3s,那么在中断函数里面的
if(Check_WKUP())//关机?
        {                  
                Sys_Enter_Standby();  
        }
这时候if成立,cpu又进入待机状态。
这时候如果在按下按键,cpu又被唤醒,但是if(Check_WKUP()==0) Sys_Standby()这个语句被执行,cpu又进入待机。上述描述的过程是一个循环。


这里有有几点要特别明确的是:
1 开机进入待机,是因为WKUP_Init()函数里面的if(Check_WKUP()==0) Sys_Standby()成立
2 cpu正常运行后,cpu如果想进入待机状态只能通过中断函数里面的
if(Check_WKUP())//关机?
        {                  
                Sys_Enter_Standby();  
        }
这个功能语句进入。
3 WUUP唤醒cpu,给一个上升沿就唤醒了。
4 唤醒后的cpu从main函数的第一个语句进行执行。

最佳答案

查看完整内容[请看2#楼]

是的。 待机唤醒不需要设置中断,进入待机模式后PA0自动就具有唤醒功能。 待机(而不是睡眠与停机)唤醒后相当于执行了复位,从头开始运行。 我也是看了好几遍才看明白这个例程,例程只是为了模拟手机的长按开关机。 其实不管例程什么样,搞清楚低功耗的三种模式就行啦。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2015-12-21
在线时间
18 小时
发表于 2016-1-14 17:01:49 | 显示全部楼层
是的。
待机唤醒不需要设置中断,进入待机模式后PA0自动就具有唤醒功能。
待机(而不是睡眠与停机)唤醒后相当于执行了复位,从头开始运行。
我也是看了好几遍才看明白这个例程,例程只是为了模拟手机的长按开关机。
其实不管例程什么样,搞清楚低功耗的三种模式就行啦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-14 17:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表