[STM32F3] STM32F303-按键中断唤醒STOP模式

[复制链接]
2168|1
 楼主| energyplants 发表于 2016-1-31 16:18 | 显示全部楼层 |阅读模式
使用按键中断来实现进入STOP休眠关机和使用按键中断退出STOP模式比较多,这个测试程序实现,按下开发板的蓝色按键进入STOP模式休眠再次按下唤醒STOP模式休眠的功能,程序正常运行时串口每秒打印一次运行记录。

STM32F303RE开发板上的蓝色的USER使用的是PC13,我们只需要配置相应的中断线,设置中断优先级即可实现中断相应。
因为STOP模式唤醒后使用内部时钟所以在中断函数中调用了恢复系统时钟的函数,STOP模式的工作模式和上个帖子里说的一样。

中断函数比较简单:
  1. void EXTI15_10_IRQHandler(void)
  2. {
  3.     if(EXTI_GetITStatus(EXTI_Line13) != RESET)
  4.     {
  5.         SYSCLKConfig_STOP();
  6.         g_keyWorkMode = IO_MODE;
  7.         KEY_CheckMode(IO_MODE);
  8.         printf("\n\r-----按键中断唤醒MCU--------\n\r\n\r");
  9.         EXTI_ClearITPendingBit(EXTI_Line13);
  10.     }
  11. }
main函数扫描按键及打印程序运行信息:
  1. int main(void)
  2. {
  3.     u8 key, t = 0;
  4.     u8 led_sta = 0;
  5.     LED_Init();
  6.     delay_init();
  7.     USART2_Init();
  8.     KEY_CheckMode(IO_MODE);
  9.     delay_ms(1500);
  10.     delay_ms(1500);

  11.     while(1)
  12.     {
  13.         key = Key_Scan();

  14.         if(key == KEY_PRESS)
  15.         {
  16.             LED(ON);
  17.             g_keyWorkMode = EXTI_MODE;
  18.             KEY_CheckMode(EXTI_MODE);
  19.             printf("\n\r-----系统进入STOP休眠模式-----\n\r\n\r");
  20.             PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
  21.         }

  22.         delay_ms(10);
  23.         t++;

  24.         if(t == 100)
  25.         {
  26.             t = 0;
  27.             printf("\n\r-----系统正在运行-----\n\r\n\r");
  28.             led_sta = !led_sta;
  29.             LED(led_sta);
  30.         }


  31.     }
  32. }



 楼主| energyplants 发表于 2016-1-31 16:19 | 显示全部楼层
程序正常运行时每秒打印一次运行信息,LED每秒亮灭反转一次,进入STOP模式后LED长亮,串口打印进入STOP信息,再次按下按键唤醒后串口输出唤醒信息,然后程序继续正常运行并不断的输出信息。
运行记录如下:



测试代码:

F303RE_EXTI_STOP.rar

557.02 KB, 下载次数: 34

您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

123

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部