一. 认识唤醒

人每天晚上要睡觉,早上要醒来。那 MCU 进入低功耗模式之后,在我们需要他卖力干活的时候,还需要他能醒来,所以在前面的文章对于各种功耗模式有了一个全面的认识了之后,还要再总结以下再不同模式下改如何来唤醒 MCU。

二,唤醒 MCU

如何唤醒 MCU 最好的办法当然是查看官方的手册。 STM32L4 系列提供了多种低功耗模式,不同的模式下唤醒的方式也不相同,可以查看手册。

  1. 睡眠模式的唤醒
    睡眠模式分为,普通睡眠模式低功耗睡眠模式
    通过上图知道唤醒方式的描述是:any interrupt or event 意思就是,所有的中断或者事件。
    中断:中断比较好理解,比如定时器中断,串口中断
    事件:wakeup 按键触发事件
    睡眠模式唤醒后会从进入低功耗模式之后的代码开始执行
    注意

    • 如果使用 CUBEMX 生才的代码默认是开启了 systick,模式会每 ms 产生一次中断,在 MCU 进入睡眠模式的时候,需要调用 HAL_SuspendTick(); 来关闭 systick 中断
  2. STOP 0 模式的唤醒
    STOP0 模式下的唤醒上图已经描述的很详细了,他和睡眠模式唤醒的区别在于,不是所有的中断了,仅仅是在 STOP 0 模式下可以运行的外设中断才可以唤醒 MCU。
    STOP 0 模式 唤醒之后会从进入 STOP 0 模式之后的代码开始运行。
    STOP 0 模式唤醒之后需要重新配置时钟
    唤醒方式的名词解释:

名词 解释
reset pin 复位按键
all I/Os 所有可以配置成 GPIO 的
BOR 掉电复位
PVD 可编程电压检测器
PVM 外围电压监测

其他都是常见外设的中断,要注意检查支持唤醒的外设。

  1. STOP 1 模式的唤醒
    STOP 1 模式下的唤醒参考上图,他和 STOP 0模式唤醒的区别在于,支持的外设进一步减少
    STOP 1 模式 唤醒之后会从进入 STOP 1 模式之后的代码开始运行。
    STOP 1 模式唤醒之后需要重新配置时钟

  2. STOP 2 模式的唤醒
    STOP 2 模式下的唤醒参考上图,他和 STOP 1 模式唤醒的区别在于,支持的外设进一步减少
    STOP 2 模式 唤醒之后会从进入 STOP 2 模式之后的代码开始运行。
    STOP 2 模式唤醒之后需要重新配置时钟
    注意

    • 支持的外设要注意,比如 STOP2 已经不支持 USART 的中断唤醒
    • 支持的外设要注意,比如 STOP2 仅仅支持 I2C3 的中断唤醒,I2C1 I2C2 已经不再支持了。


5. 待机模式的唤醒
待机模式的唤醒方式见上图,可以在 cubemx 配置唤醒引脚

配置完之后,就可以直接在程序中使用了,使用方法如下:

  HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2);//禁用所有使用的唤醒源:PWR_WAKEUP_PIN2 connected to PC.13__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//清除所有相关的唤醒标志HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_HIGH);//启用连接到PC.13的WakeUp PinHAL_PWR_EnterSTANDBYMode(); // 进入待机模式

这里要根据具体板子的设计确定按下按键之后是高电平还是低电平。
停机模式唤醒后,MCU 复位,从程序开始的地方运行
待机模式下,唤醒之后需要判断程序是否是从待机模式唤醒的

  if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET){ /* Clear Standby flag */__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2);}
  1. 停机模式的唤醒
    停机模式下只有三种方式唤醒:复位,唤醒按键,RTC。其中唤醒和停机模式下是一样的。
    RTC 唤醒 MCU 有两种方式:设置为唤醒 和 闹钟
    设置唤醒的代码如下:
    To configure the wake up timer to 60s the WakeUpCounter is set to 0xFFFF:Wakeup Time Base = 16 /(~32.000KHz) = ~0.5 msWakeup Time = 0.5 ms  * WakeUpCounterTherefore, with wake-up counter =  0xFFFF  = 65,535 Wakeup Time =  0,5 ms *  65,535 = 32,7675 s ~ 33 sec. */HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 0x0FFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16);/* Enter the ShutDown mode */HAL_PWREx_EnterSHUTDOWNMode();

三,总结

不同的模式下会有不同的唤醒方式,在实际使用过程中要注意不同模式下支持的外设是不一样的,不同的低功耗模式,唤醒之后开始代码执行的位置也不一样。要根据实际的项目需求,来选择使用的低功耗模式和对应的唤醒方式。

STM32超低功耗入门之唤醒相关推荐

  1. STM32超低功耗入门之睡眠模式

    一. 认识睡眠模式 查看官方手册对睡眠模式的描述: 通过上图可以得出结论: 睡眠模式有 4 种电压调节器方案 在睡眠模式下 CPU 是停止状态 在睡眠模式下程序在 SRAM 执行情况下,Flash 可 ...

  2. STM32超低功耗入门之停止模式

    一. 认识停止模式 STM32L4 系列提供了 3 种停止模式:stop0 , stop1 , stop2. 功耗逐次更低. 通过上图可以得出结论: stop0 模式有 2 种电压调节器方案.stop ...

  3. STM32超低功耗入门之待机模式

    一. 认识待机模式 进入待机模式之后,唤醒 MCU 后程序不是从进入低功耗模式之后的下一行代码开始执行,而是重新启动了. 通过上图可以得出结论: 待机模式有 2 种电压调节器方案 待机模式下 CPU ...

  4. STM32超低功耗入门之关机模式

    一. 认识关机模式 进入关机模式之后,唤醒 MCU 程序不是从进入低功耗模式之后的下一行代码开始执行,而是重新启动了. 通过上图可以得出结论: 所有电压调节器都被关闭了 关机模式下 CPU 是停止状态 ...

  5. STM32学习——入门小项目

    博客地址:STM32学习--入门小项目 – Infinite's Blog 这个小项目是来自参加电设时,老师发的STM32入门(进阶)任务,具体的要求如下: 软件设计要求 编写简单I/O程序,能用板上 ...

  6. 单片机stm32LED流水灯C语言,STM32单片机入门 篇二:单片机编程:从点亮LED灯开始(二)...

    STM32单片机入门 篇二:单片机编程:从点亮LED灯开始(二) 2019-04-26 13:21:48 19点赞 73收藏 19评论 写在前面的话:本篇是承接上一篇文章,属于小白向. 没看过的朋友点 ...

  7. 【玩转STM32】:串口唤醒低功耗的三种方式/低功耗下打印数据

    在使用STM32做低功耗项目时,大概率会遇到一个问题:低功耗模式下想打印数据怎么办? 今天,学长给大家另辟蹊径,介绍一种使用串口唤醒低功耗的案例.方法.可设置三种唤醒方式:检测到起始位唤醒.检测到 R ...

  8. 入门单片机选择51还是stm32?入门单片机有哪些好的教学视频?

    不知道大家还记不记得自己小学时候自己的梦想? 有人想成为医生.有人想成为医生,有人想成为飞行员,而我想成为发明家. 可能真是我这种想法,也导致我的性格从小就比较内向,毕业出来以后也从事技术. 人生的上 ...

  9. stm32单片机入门视频教程看哪个?一般用什么软件编程比较好?

    现在我们随便去招聘平台搜索"嵌入式工程师",有很多岗位要求都是需要STM32. 可见目前STM32市场之大,如果我们想从事这个嵌入式单片机开发这个工作,就必须要跟着市场走. 这也是 ...

  10. stm32编程入门_电子设计与单片机编程书籍资料推荐

    有些同学让我推荐些入门书籍,尝试写写: 注:请多看下目录与介绍,网络上也有一些读书笔记和推荐,自行判断是否符合现有层次和水平,再决定是否购买. 针对零基础.非专业的电子爱好者,我的推荐学习步骤是: 自 ...

最新文章

  1. 三十二、图的创建深度优先遍历(DFS)广度优先遍历(BFS)
  2. CentOS6.3中挂载NTFS移动硬盘的经历
  3. 《ASP.NET Core 微服务实战》-- 读书笔记(第11章)
  4. jquery实现双击事件不触发单击事件
  5. “培训班”出身的AI工程师,要得要不得?
  6. codeblocks报错Process terminated with status -1073741510 (0 minute(s), 3 second(s))
  7. 可配置语法分析器开发纪事(二)——构造符号表
  8. Asp.net core WebApi 使用Swagger生成帮助页实例
  9. python将一个文本文件复制到另一个文件中_使用Python逐行从一个文本文件复制到另一个文本文件...
  10. 楚留香ai识别人脸_【专利解密】商汤科技:AI加持人脸识别
  11. BLE无线信号的调制方式
  12. 区块链开发完整指南。如何开发一款区块链项目?
  13. “造星工厂“乐华娱乐IPO,如何寻找下一个“王一博“?
  14. matlab 三维立方体,使用matlab函数构建三维立方体的几种方法
  15. Fragment already added 解决方式
  16. 核心网MANO构架介绍
  17. java的Map接口
  18. 深入探究Windows平台客户端安全问题-进程地址空间入侵和白加黑高阶利用
  19. Yolov5环境配置 配不好来打我
  20. 2012 lt;c语言综合实验gt;答案,厦门理工学院c语言实验4循环答案.doc

热门文章

  1. 小技巧 - 查询微信被谁投诉方法技巧
  2. Tomcat: Error starting child 原因以及处理方法
  3. MATLAB 常用函数学习笔记
  4. 一阶线性齐次,非齐次方程的通解和解的结构定理,推导过程。
  5. android wear 应用推荐,2015年Android Wear十大必装应用
  6. r去掉向量中的空字符串 在R里如何去掉字符串矩阵中的空字符串 r r 识别字符串中的双引号 识别字符串中的双引号 str_detect
  7. MYSQL根据经纬度查询最近距离
  8. 【论文解读】(2019-EMNLP)Tackling Long-Tailed Relations and Uncommon Entities in Knowledge Graph Completi
  9. 哪款软件可以测试脉冲信号,脉冲测试
  10. 建立两个磁盘文件f1.text和f2.text,编程实现以下工作