STM32三種低功耗模式研究二
示例:
停機(jī)模式進(jìn)入之前:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
printf("進(jìn)入停止模式 ");
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
停機(jī)模式喚醒之后:
void SYSCLKConfig_STOP(void)
{
ErrorStatus HSEStartUpStatus;
}
為了驗(yàn)證程序喚醒后是不是從進(jìn)入停機(jī)模式那一條語句接著運(yùn)行,我進(jìn)行如下編程:
int main(void)
{
LED_GPIO_Config();
EXTI_Key_Config();
SysTick_Init();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//電源管理
while(1)
{
LED1( ON );
Delay_us(100000); // 10000 * 10us = 100ms
LED1( OFF );
// SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
LED2( ON );
Delay_us(100000); // 10000 * 10us = 100ms
LED2( OFF );
LED3( ON );
Delay_us(100000); // 10000 * 10us = 100ms
LED3( OFF );
}
}
發(fā)現(xiàn)根本不進(jìn)入停機(jī)模式,文檔上寫著:為了進(jìn)入停止模式,所有的外部中斷的請求位(掛起寄存器(EXTI_PR))和RTC的鬧鐘標(biāo)志都必須被清除,否則停止模式的進(jìn)入流程將會被跳過,程序繼續(xù)運(yùn)行。我看看外部中斷的標(biāo)志也都請了啊,怎么回事?進(jìn)一步研究發(fā)現(xiàn),SysTick_Init()里面并沒有打開systick,而是在Delay_us(100000)里面打開的,那么我在進(jìn)入停機(jī)之前應(yīng)該關(guān)掉,所以把上述程序中的SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk打開就好啦,嘎嘎!
評論