【STM32F303开发】+按键中断唤醒STOP模式
本帖最后由 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信息,再次按下按键唤醒后串口输出唤醒信息,然后程序继续正常运行并不断的输出信息。
运行记录如下:
测试代码:
多谢分享,支持 Paderboy 发表于 2015-6-4 21:42
多谢分享,支持
谢谢:lol:lol 不错,欢迎原创 支持支持~! 儿科。。。。。:loveliness: stary666 发表于 2015-6-5 10:11
儿科。。。。。
我新手一个,让您见笑了,以后多向您学习。 共同进步:loveliness: 金币已给,楼主以后要继续为大家送福利! 苏浅叶 发表于 2015-6-5 11:22
金币已给,楼主以后要继续为大家送福利!
感谢,看到金币就更加有动力了,:lol