你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F303开发】+按键中断唤醒STOP模式

[复制链接]
creep 提问时间:2015-6-4 20:21 /
本帖最后由 creep 于 2015-6-4 20:22 编辑

昨天测试了RTC的AlarmA闹钟中断唤醒STOP休眠:【STM32F303开发】+ RTC闹钟中断唤醒STOP模式休眠     ,但实际中使用按键中断来实现进入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. }
复制代码
程序正常运行时每秒打印一次运行信息,LED每秒亮灭反转一次,进入STOP模式后LED长亮,串口打印进入STOP信息,再次按下按键唤醒后串口输出唤醒信息,然后程序继续正常运行并不断的输出信息。
运行记录如下:
key_exti.jpg
测试代码:

F303RE_EXTI_STOP.rar

下载

557.02 KB, 下载次数: 727, 下载积分: ST金币 -1

按键中断唤醒STOP休眠

收藏 评论20 发布时间:2015-6-4 20:21

举报

20个回答
creep 回答时间:2015-10-9 15:48:48
gzx-2031852 发表于 2015-10-9 14:59
楼主,我想问下,为什么我的程序进入这个函数PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WF ...

你怎么测试的看到没有停在  __WFI();  ,debug单步运行吗?
gzx-2031852 回答时间:2015-10-9 14:59:10
楼主,我想问下,为什么我的程序进入这个函数PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);然后会跳出来呢,没有开外部中断怎么会出来呢,不会stop在这里很奇怪
creep 回答时间:2015-6-5 11:25:26
苏浅叶 发表于 2015-6-5 11:22
金币已给,楼主以后要继续为大家送福利!

感谢,看到金币就更加有动力了,
Paderboy 回答时间:2015-6-4 21:42:40
多谢分享,支持
creep 回答时间:2015-6-4 21:50:53
Paderboy 发表于 2015-6-4 21:42
多谢分享,支持

谢谢
netlhx 回答时间:2015-6-5 08:37:44
不错,欢迎原创
759611 回答时间:2015-6-5 09:01:34
支持支持~!
stary666 回答时间:2015-6-5 10:11:36
儿科。。。。。
creep 回答时间:2015-6-5 10:46:57
stary666 发表于 2015-6-5 10:11
儿科。。。。。

我新手一个,让您见笑了,以后多向您学习。
stary666 回答时间:2015-6-5 11:14:07
共同进步
苏浅叶 回答时间:2015-6-5 11:22:10
金币已给,楼主以后要继续为大家送福利!
shadow丶 回答时间:2015-6-6 09:55:55
额 这样晓得  
为什么是EEFOCUS小白 回答时间:2015-6-6 10:20:20
多谢分享
huangnh168 回答时间:2016-1-18 23:27:08
多谢分享
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版