本帖最后由 谦虚 于 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秒进入待机模式,按一下就可以退出待机模式?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1、待机唤醒包括,从关机(待机)状态下执行开机,从开机状态下执行关机。
2、刚一上电,原子的例程从第一句话开始执行,会进入wkup_init()进行初始化,在这个函数中的最后一句话是休眠语句,也就是判断按键是否按下,刚开始你不会去按,所以它会先进入关机状态。
3、感觉你的逻辑有点儿混乱,关机状态下按一下PA0,程序就已经从main的第一句话开始执行了,只不过它又会进入wkup_init(),所以你如果不长按,它又会再次休眠,只有满足3秒条件,才会跳进while(1)里开始正常工作。
4、在正常工作状态下按下按键,会进入key的判断,当不满足3秒时退出判断,当满足3秒时执行关机,回到了一开始的状态。
5、如果出现和理论不符的情况,比如不应该开机的开机了,不应该关机的关机了,那你可以尝试关掉一些其它的初始化,我遇到过中断的初始化影响了待机初始化。也可以尝试换一下初始化函数的位置。网上有许多人问这个,查查看,遇到的问题都能解决掉。
一周热门 更多>