使用按键中断来实现进入STOP休眠关机和使用按键中断退出STOP模式比较多,这个测试程序实现,按下开发板的蓝色按键进入STOP模式休眠再次按下唤醒STOP模式休眠的功能,程序正常运行时串口每秒打印一次运行记录。
STM32F303RE开发板上的蓝色的USER使用的是PC13,我们只需要配置相应的中断线,设置中断优先级即可实现中断相应。
因为STOP模式唤醒后使用内部时钟所以在中断函数中调用了恢复系统时钟的函数,STOP模式的工作模式和上个帖子里说的一样。
中断函数比较简单:- void EXTI15_10_IRQHandler(void)
- {
- if(EXTI_GetITStatus(EXTI_Line13) != RESET)
- {
- SYSCLKConfig_STOP();
- g_keyWorkMode = IO_MODE;
- KEY_CheckMode(IO_MODE);
- printf("\n\r-----按键中断唤醒MCU--------\n\r\n\r");
- EXTI_ClearITPendingBit(EXTI_Line13);
- }
- }
main函数扫描按键及打印程序运行信息:
- int main(void)
- {
- u8 key, t = 0;
- u8 led_sta = 0;
- LED_Init();
- delay_init();
- USART2_Init();
- KEY_CheckMode(IO_MODE);
- delay_ms(1500);
- delay_ms(1500);
- while(1)
- {
- key = Key_Scan();
- if(key == KEY_PRESS)
- {
- LED(ON);
- g_keyWorkMode = EXTI_MODE;
- KEY_CheckMode(EXTI_MODE);
- printf("\n\r-----系统进入STOP休眠模式-----\n\r\n\r");
- PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
- }
- delay_ms(10);
- t++;
- if(t == 100)
- {
- t = 0;
- printf("\n\r-----系统正在运行-----\n\r\n\r");
- led_sta = !led_sta;
- LED(led_sta);
- }
- }
- }
|