待机唤醒模式

2019-10-16 06:39发布

本帖最后由 谦虚 于 2016-11-30 21:33 编辑

void Sys_Standby(void)
{  
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);        //使能PWR外设时钟
        PWR_WakeUpPinCmd(ENABLE);  //使能唤醒管脚功能
        PWR_EnterSTANDBYMode();          //进入待命(STANDBY)模式                  
}
//系统进入待机模式
void Sys_Enter_Standby(void)
{                        
        RCC_APB2PeriphResetCmd(0X01FC,DISABLE);        //复位所有IO口
        Sys_Standby();
}


原子的这个待机唤醒程序 void Sys_Enter_Standby(void)  这个函数是什么作用,是从待机模式退出么?

我看到原子的PDF里讲解的是,按WKUP键超过3秒进入待机模式,那么说怎么退出待机模式呢,不是说检测到wkup键的上升沿就退出待机模式么?为什么我这边在开发板上退出待机模式也是长按3秒?



我发现一个问题,为什么我把WKUP_Init(void)的直接进入待机模式的代码注释掉,就是 长按3秒进入待机模式,按一下就可以退出待机模式?



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
yuzeyuan1
1楼-- · 2019-10-16 08:15
你先搞清楚几个问题
1、待机唤醒包括,从关机(待机)状态下执行开机,从开机状态下执行关机。
2、刚一上电,原子的例程从第一句话开始执行,会进入wkup_init()进行初始化,在这个函数中的最后一句话是休眠语句,也就是判断按键是否按下,刚开始你不会去按,所以它会先进入关机状态。
3、感觉你的逻辑有点儿混乱,关机状态下按一下PA0,程序就已经从main的第一句话开始执行了,只不过它又会进入wkup_init(),所以你如果不长按,它又会再次休眠,只有满足3秒条件,才会跳进while(1)里开始正常工作。
4、在正常工作状态下按下按键,会进入key的判断,当不满足3秒时退出判断,当满足3秒时执行关机,回到了一开始的状态。
5、如果出现和理论不符的情况,比如不应该开机的开机了,不应该关机的关机了,那你可以尝试关掉一些其它的初始化,我遇到过中断的初始化影响了待机初始化。也可以尝试换一下初始化函数的位置。网上有许多人问这个,查查看,遇到的问题都能解决掉。
龙之谷
2楼-- · 2019-10-16 12:50
1.搜过相关资料没有,有关于这个实验讲解的很详细的帖子;2.基础英文知识要有,Enter怎么会理解为退出

一周热门 更多>