下图是mm32f003的低功耗模式一览:
低功耗模式一览表
停机模式比待机模式功耗略大,比较明显的区别是:停机模式唤醒后,程序可以继续运行。例程运行后LED慢闪,然后进入停机模式,LED状态保持常亮,按键通过外部中断唤醒后,LED快闪。说明停机模式,可以保存当前运行状态,使得程序能够继续运行。
停机模式与待机模式的配置方式大体相似,指示调用不同接口即可进入对应的工作模式。
1 停机模式的配置
在main函数调用PWR_EnterSTOPMode(0, PWR_STOPEntry_WFI);
函数即可。
2 停机模式唤醒的相关配置
void EXTI0_1_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line0); // Çå³ýLINE10ÉϵÄÖжϱê־λ
}
void WKUP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
#if (0)
EXTI_InitStructure.EXTI_Line = EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Event; //config event line
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
#else
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //config interrupt line
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#endif
}
停机模式用的普通外部中断功能,而待机模式用的是PA0的WKUP功能。
3 main函数流程
int main(void)
{
RCC_ConfigInit();
GPIO_ConfigInit();
delay_init();
LED_Init();
LED1_ON();
delay_ms(2000);
LED1_OFF();
delay_ms(2000);
LED1_ON();
delay_ms(2000);
WKUP_Init();
PWR_EnterSTOPMode(0, PWR_STOPEntry_WFI);
while(1) {
LED1_OFF();
delay_ms(100);
LED1_ON();
delay_ms(100);
}
}
官方例程的修正已基本完成,需要程序的同学可以到百度网盘下载。
提取码:0o5i
网友评论