大神们,我请教一个问题,我用STM32F030K6 这个芯片做一个低功耗(待机模式)的程序,用的PA0作为唤醒脚,然后遇到的问题是:1、在程序中,直接调用库函数“PWR_EnterSTANDBYMode();”进入待机模式,可以进去,但是功耗会比较大,有200多ua,然后在网上看,貌似都是得使能PWR时钟的
2、然后我在进入待机模式之前添加“ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);”这个函数(使能PWR时钟),功耗是降了不少,在50ua左右,但是问题来了,进入待机之后,就唤醒不了,用电表去测按下按键PA0也是有高电位的,进入待机模式之前也是有把PA0配置为输入模式的。
这里很是不解,希望大家给下意见!!
[mw_shl_code=applescript,true]
void EXTI_Key_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStruct);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
EXTI_ClearITPendingBit(EXTI_Line0);
EXTI_InitStruct.EXTI_Line = EXTI_Line0;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
//
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
A:
if (CHECK_EXTI() == 0)
{
LowPower();
}
if (!SYSTEM_FLAG)
{
goto A;
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
原子哥,我上述的问题解决了,是程序上死循环了。。。
但是刚刚又发现了一个问题,我的程序是开机检测是否长按按键,如果长按开机,不是直接进入待机模式。
现在的现象是:开机进入休眠53uA左右,然后按一下按键(并未开机),功耗既然提升到了5.9mA了
不是说待机唤醒就是跟上电复位一样的么,为何变化会这么大的呢?求赐教[mw_shl_code=applescript,true]KEY_Init();
if (CHECK_EXTI() == 0)
{
SystemClock(); //没有使用外部晶振,所以降时钟设置为内部时钟
Gpio_Init(); //未使用的设置为下拉输入,带上拉电阻的设置为上拉输入
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //开启PWR时钟
PWR_WakeUpPinCmd(PWR_WakeUpPin_1, ENABLE); //待机唤醒脚使能
LowPower(); //进入待机模式
}[/mw_shl_code]
因为你一按下实际上就是开机了,只是开机以后,假装没有开机(MCU不跑到任务代码去)
待机的时候,按键按下(PA0)相当于复位,然后程序重新重头开始执行,然后又执行KEY初始化和判断是否长按按键的函数,如果没有长按按键则进入待机,这逻辑有什么不对吗?如果有问题,能给点意见么,怎么改比较好呢?
一周热门 更多>