STM32三种低功耗模式研究二
示例:
停机模式进入之前:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
printf("进入停止模式 ");
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
停机模式唤醒之后:
void SYSCLKConfig_STOP(void)
{
ErrorStatus HSEStartUpStatus;
}
为了验证程序唤醒后是不是从进入停机模式那一条语句接着运行,我进行如下编程:
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 );
}
}
发现根本不进入停机模式,文档上写着:为了进入停止模式,所有的外部中断的请求位(挂起寄存器(EXTI_PR))和RTC的闹钟标志都必须被清除,否则停止模式的进入流程将会被跳过,程序继续运行。我看看外部中断的标志也都请了啊,怎么回事?进一步研究发现,SysTick_Init()里面并没有打开systick,而是在Delay_us(100000)里面打开的,那么我在进入停机之前应该关掉,所以把上述程序中的SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk打开就好啦,嘎嘎!
评论