1、进入待机模式 电流ua级别
[C] 纯文本查看 复制代码 //系统进入待机模式
void Sys_Enter_Standby(void)
{
//while(WKUP_KD); //等待WK_UP按键松开(在有RTC中断时,必须等WK_UP松开再进入待机)
RCC_AHB1PeriphResetCmd(0X04FF,ENABLE);//复位所有IO口
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟
PWR_BackupAccessCmd(ENABLE);//后备区域访问使能
//这里我们就直接关闭相关RTC中断
RTC_ITConfig(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA,DISABLE);//关闭RTC相关中断,可能在RTC实验打开了。
RTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA);//清楚RTC相关中断标志位。
PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 标志
PWR_WakeUpPinCmd(ENABLE);//设置WKUP用于唤醒
PWR_EnterSTANDBYMode(); //进入待机模式
}
2、进入停止模式 电流再3ma左右
[C] 纯文本查看 复制代码 void Sys_Enter_StopMode(void)
{
CPU_SR_ALLOC();
RCC_AHB1PeriphResetCmd(0X04FF,ENABLE);//复位所有IO口
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* 关闭滴答定时器 */
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
OS_CRITICAL_ENTER(); //进入临界区
/*
1、当一个中断或唤醒事件导致退出停止模式时, HSI RC振荡器被选为系统时钟。
2、退出低功耗的停机模式后,需要重新配置使用HSE。
*/
RCC_HSEConfig(RCC_HSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET){}
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource() != 0x08){}
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* 使能滴答定时器 */
OS_CRITICAL_EXIT(); //退出临界区
}
都是在初始化的时候进入的,没有配置任何IO
[C] 纯文本查看 复制代码 int main(void)
{
OS_ERR err;
CPU_SR_ALLOC();
//Sys_Enter_StopMode();
delay_init(168); //时钟初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置
//Sys_Enter_Standby();
Sys_Enter_StopMode();
问题:进入停止模式 电流在3ma左右 纳闷了 待机模式可以达到ua级别(小于1ma)
|