|
a0a.1 32b0c
本帖最后由 creep 于 2015-6-4 20:22 编辑
昨天测试了RTC的AlarmA闹钟中断唤醒STOP休眠:【STM32F303开发】+ RTC闹钟中断唤醒STOP模式休眠 ,但实际中使用按键中断来实现进入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);
- }
- }
- }
复制代码 程序正常运行时每秒打印一次运行信息,LED每秒亮灭反转一次,进入STOP模式后LED长亮,串口打印进入STOP信息,再次按下按键唤醒后串口输出唤醒信息,然后程序继续正常运行并不断的输出信息。
运行记录如下:
测试代码:
|
-
-
557.02 KB, 下载次数: 700, 下载积分: ST金币 -1
按键中断唤醒STOP休眠
|