目录

  • 前言
  • 一、目的
  • 二、先上优秀博文:
  • 三、官方文章分享:
  • 四、写一写到底选择什么模式:
    • 4.1、低功耗的目的和应用:
    • 4.2、stm32各种模式的区别:
      • 4.2.1、睡眠模式
      • 4.2.2、停止模式:
      • 4.2.3、待机模式:
      • 4.2.4、模式区别对比:
        • 4.2.4.1三种模式时钟区别:
        • 4.2.4.2三种模式唤醒区别:
        • 4.2.4.3三种模式耗电排名:
        • 4.2.4.4三种模式唤醒速度排名:
    • 4.3、选择适合我们的模式
      • 4.3.1、选择法
      • 4.3.2、关键法:
  • 五、结束

前言

本文大概5000字,顺序为目的、优秀博文、官方文章、模式的选择。都是一些自己找到资源和对低功耗文档阅读之后的理解,如果有不正确的地方,欢迎大佬们指正。

一、目的

  • 分享一些写的优秀的文章。
  • 分享官方关于低功耗的文档。
  • 自己写的一些关于低功耗的模式选择和理解。

二、先上优秀博文:

感谢这些优秀博主的分享,让我们可以少走很多弯路:
链接:

  • 讲的很有特点,从源文档和应用来分析低功耗。
  • f103系列的代码
  • 实际耗电的测试
  • 芯片手册的耗电量测试

三、官方文章分享:

  • f103,102,101系列的电源管理低功耗文档
  • 英文参考手册

四、写一写到底选择什么模式:

  • 再看完几篇大神的文章之后,我觉得应该重新规划一下文章的描述方式,我们首先就要明白自己的目的是什么,然后看看自己的目的的最好结果和最差结果,然后分析自己目前的处境。最后才是选择方法途径,也许再明白自己和目标的局限性之后,才能更好的实现目标吧。
    找到目标--------------》认清现状--------------》找方法

4.1、低功耗的目的和应用:

我们做低功耗目的可以说是相当简单,那就是省电,省下电量。
但是,省电只是一个特性,我们不能用这个特性来影响了主要的功能,所以stm提供了多种的省电方式。
我们先按照常见的产品来分低功耗的类型:

  1. 最不需要省电的:例如很多常备设备,比如那些要保持一定在线的比如数据库,服务器这种。
  2. 需要低功耗,但是要可以迅速唤醒:这个,就必须保持实时了,比如蓝牙耳机,不播放音乐或者没有连接时,当然可以低功耗,但是一旦有信号,当然是要匀速唤醒。
  3. 需要低功耗,可以忍受短时间恢复:
  4. 需要低功耗,每次使用时,需要长时间恢复:

4.2、stm32各种模式的区别:

4.2.1、睡眠模式

通过执行WFI(等待中断)或WFE(等待中断)进入睡眠模式。
活动)说明。有两个选项可用于选择睡眠模式输入机制,
取决于Cortex-M3系统控制寄存器中的SLEEPONEXIT位:●立即休眠:如果清除了SLEEPONEXIT位,则MCU会立即进入休眠模式
当执行WFI或WFE指令时。
●退出时休眠:如果SLEEPONEXIT位置1,则MCU会在进入退出最低优先级的ISR后,立即进入休眠模式。
在休眠模式下,所有I / O引脚保持与运行模式相同的状态。
有关如何进入休眠模式的详细信息,请参见表2和表3。退出睡眠模式
如果使用WFI指令进入休眠模式,则任何外设中断都会由嵌套向量中断控制器(NVIC)可以将器件从休眠模式唤醒。
如果使用WFE指令进入休眠模式,则MCU会在退出后立即退出休眠模式。
可以通过以下任一方式生成唤醒事件:
●启用外围控制寄存器中的中断,但不启用NVIC中的中断,并启用
Cortex-M3系统控制寄存器中的SEVONPEND位。当单片机
从WFE,外设中断挂起位和外设NVIC IRQ恢复
必须清除通道挂起位(在NVIC中断清除挂起寄存器中)。
●或在事件模式下配置外部或内部EXTI线路。当CPU恢复时
从WFE,无需清除外设中断挂起位或NVIC
未设置IRQ通道挂起位,因为未设置与事件行相对应的挂起位。
此模式提供了最短的唤醒时间,因为在中断进入/退出时不会浪费时间。


4.2.2、停止模式:

停止模式基于Cortex-M3深度睡眠模式和外围时钟的结合门控。稳压器可以配置为正常或低功耗模式。停止中
模式下,将停止1.8 V域中的所有时钟,PLL,HSI和HSE RC振荡器被禁用。 SRAM和寄存器内容被保留。
在停止模式下,所有I / O引脚保持与运行模式下相同的状态。进入停止模式
有关如何进入停止模式的详细信息,请参见表4。为了进一步降低停止模式下的功耗,可以将内部稳压器设为置于低功耗模式。
这由电源控制寄存器的LPDS位配置(PWR_CR)。
如果正在进行闪存编程,则将停止模式的输入延迟到存储器访问完成。
如果正在进行对APB域的访问,则停止模式条目将延迟到APB为止访问完成。
在停止模式下,可以通过编程各个控制位来选择以下功能:
●独立看门狗(IWDG):通过写入其密钥寄存器或通过以下方式启动IWDG硬件选项。启动后,除非复位,否则无法停止。
●实时时钟(RTC):由备份域中的RTCEN位配置控制寄存器(RCC_BDCR)
●内部RC振荡器(LSI RC):由控制/状态中的LSION位配置寄存器(RCC_CSR)。
●外部32.768 kHz振荡器(LSE OSC):由外部的LSEON位配置备份域控制寄存器(RCC_BDCR)。
除非禁用它们,否则ADC或DAC在停止模式下也可能消耗功率
在输入之前。要禁用它们,需使用ADC_CR2寄存器中的ADON位和ENx位
DAC_CR寄存器中的0必须都写入0。退出停止模式
有关如何退出停止模式的更多详细信息,请参见表4。
通过发出中断或唤醒事件退出停止模式时,HSI RC振荡器为选择作为系统时钟。
表3.退出时睡眠
退出睡眠说明
模式输入
WFI(等待中断)时:
SLEEPDEEP = 0且SLEEPONEXIT = 1
请参考Cortex™-M3系统控制寄存器。
模式退出中断。唤醒延迟无。
电源AN2629
12/43 Doc ID 13922 Rev 2
当稳压器在低功耗模式下运行时,会增加一个启动延迟,从“停止”模式唤醒时发生。通过在停止期间保持内部调节器为ON模式下,尽管启动时间减少了,但是消耗却更高。

4.2.3、待机模式:

待机模式可实现最低功耗。它基于Cortex-M3深度睡眠模式,禁用了稳压器。 1.8 V域关闭。 PLL,HSI振荡器和HSE振荡器也是关闭。除备份域中的寄存器外,SRAM和寄存器内容均丢失和备用电路(见图1)。
进入待机模式
有关如何进入待机模式的更多详细信息,请参见表5。
在待机模式下,可以通过对单个控制进行编程来选择以下功能位:
●独立看门狗(IWDG):通过写入其密钥寄存器或通过以下方式启动IWDG硬件选项。一旦启动,除非复位,否则无法停止。
●实时时钟(RTC):由备份域控件中的RTCEN位配置寄存器(RCC_BDCR)
●内部RC振荡器(LSI RC):由控制/状态中的LSION位配置寄存器(RCC_CSR)。
●外部32.768 kHz振荡器(LSE OSC):由外部的LSEON位配置备份域控制寄存器(RCC_BDCR)退出待机模式
当外部复位(NRST引脚),IWDG复位,
WKUP引脚上出现上升沿或出现RTC警报。唤醒后重置所有寄存器
除了电源控制/状态寄存器(PWR_CSR)之外,其他功能均来自待机模式。
从待机模式唤醒后,程序执行将以与
复位(引导引脚采样,获取向量复位等)。电源中的SBF状态标志
控制/状态寄存器(PWR_CSR)指示MCU处于待机模式。

4.2.4、模式区别对比:

4.2.4.1三种模式时钟区别:

睡眠模式,cpu时钟关闭所有的外设包括m3核心外设像:NVIC,SYStick,etc,running。
停止模式:所有的时钟停止,但是保留1.8v供电。
待机模式:1.8V断电。

4.2.4.2三种模式唤醒区别:

睡眠模式:所有中断
停止模式:外部中断
待机模式:重新上电,RTC时钟,设定的唤醒管脚上升沿。

4.2.4.3三种模式耗电排名:

睡眠模式>停止模式>待机模式。

4.2.4.4三种模式唤醒速度排名:

睡眠模式>停止模式>待机模式。

4.3、选择适合我们的模式

4.3.1、选择法

三个模式各有优劣,我们应当选择最适合自己的模式:
举例:如果是获取传感器的值,再传感器发送信号过来之前,我们到底需要处于一个什么状态:
这是一个很具体的问题?
我想了一下,大致上可以使用与的方法来实现快速选择:
这里有三个关键:

  • 低功耗时,需要什么状态

  • 有什么方式可以唤醒

  • 唤醒需要多长时间

  • 还是传感器:例如烟雾报警传感器,采用插线供电,平时需要灯的闪烁表示正常。
    1.平时需要灯的闪烁表示正常。-》睡眠
    2.唤醒方式为外部信号。-》睡眠,待机或者停止
    3.唤醒之后,希望可以较快反应。-》睡眠
    通过与选则停止模式,满足低电量消耗的要求,但是又要满足平时的闪烁操作。

  • 遥控器,电池供电,平时无操作,按键触发发送红外指令:
    1.平时没有操作:停止或者待机。
    2.外部中断唤醒:睡眠,待机,停止。
    3.唤醒需要较快:待机,睡眠。
    综上所述,采用停止模式。

  • 紧急照明夜灯,平时不需要操作,不需要很及时的反应,必须要节省电量来保证紧急时候的使用:
    1.平时没有操作:待机或者停止。
    2.外部中断唤醒:睡眠待机停止。
    3.唤醒不需要太及时:待机、停止。
    综上所述:采用待机模式,等待新哈窦娥到来。

4.3.2、关键法:

当然,上面只是一个选择方法。我们在实际的开发项目的时候,更是要考虑到自己的产品的关键性能是什么,例如我推荐的文章在实际中讲到手机关机的时候如果采用待机功能,那么充电还是用户按键就没有办法来区分,也没有办法在关机充电时显示电量。这样对于手机的功能来说当然是得不偿失的。

五、结束

我们还是要搞清楚自己的终极目的:做好产品。
写代码,就像养孩子一样,总是像把它做的是最好。但是很多时候,我们的“孩子”也有自己的想法,比如他是一个智能手机,这个时候为了他的智能,我们要牺牲很多别的方面。当然,这方面应该是产品经理的责任。但是作为实际的开发者,终究是要搞清楚这个“孩子”是怎么在他的是世界里面(市场)立足。这样才能优化他的长处,补足他的短处。

stm32之低功耗总结帖:文章分享、官方文档、个人经验相关推荐

  1. Bootstrap4官方文档 | v4核心 -- 组件(一)

    本文翻译于bootstrap官网,主要用于查看文档,方便学习,文章比较长! 阅读目录 入门Bootstrap4 组件 警报 链接颜色 附加内容 解除 JavaScript行为 事件 徽章 药丸徽章 链 ...

  2. redisson使用全解——redisson官方文档+注释(上篇)

    文章目录 官方文档 Redisson项目介绍 一.概述 二.配置方法 2.1. 程序化配置方法 2.2. 文件方式配置 2.2.1 通过YAML格式配置 2.3. 常用设置 2.4. 集群模式 2.4 ...

  3. 鸿蒙构建系统——gn官方FAQ翻译,以及gn官方文档分享

    GN FAQ 翻译 (PS:花了将近半个小时,把GN的官方FAQ翻译了一遍,有错漏之处欢迎大家指正.) GN 的文档在哪里? GN有大量的内置的帮助文档,所以你可以运行gn help命令查阅,但是你同 ...

  4. tensorflow官方文档_开源分享:最好的TensorFlow入门教程

    如果一门技术的学习曲线过于陡峭,那么我们在入门时的场景往往是,一鼓作气,没入门,再而衰,三而竭.演绎一出从入门到放弃的败走麦城. 今天发现一个入门TensorFlow的宝藏,迫不及待的分享给大家.这个 ...

  5. pywin32官方说明文档_为什么你应该看官方文档而不是搜索博客文章

    摄影:产品经理寿喜锅 很多人在学习一门新技术的时候,不去看官方文档,而是喜欢直接在网上搜索别人的教程.如果运气不好搜索到了CSDN上面的装逼货辣鸡文章,那么你的学习生涯可能就此终止.即使搜索到写得很详 ...

  6. Stable Diffusion攻略集(Stable Diffusion官方文档、kaggle notebook、webui资源帖)

    文章目录 第一部分 一. Features:Textual Inversion(文本反转) 1.1 Textual Inversion 简介 1.1.1 摘要 1.1.2 算法 1.1.3 模型效果 ...

  7. 别被官方文档迷惑了!这篇文章帮你详解yarn公平调度

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由@edwinhzhang发表于云+社区专栏 FairScheduler是yarn常用的调度器,但是仅仅参考官方文档,有很多参数和概念文 ...

  8. 分享一个包含一些前端技术官方文档的网页-印记中文

    当我们需要查找一写前端框架的官方文档的时候,可以在这个网址里面查找,同时还提供中文文档,学习起来能够节约时间.(ps:最好的学习资料还是原版英文文档). 印记中文:https://docschina. ...

  9. TensorFlow 官方文档中文版发布啦(持续维护)

    TensorFlow 是 Google 研发的第二代人工智能学习系统,是 Google 为了帮助全球开发者们更加方便和高效地开发机器学习 (Machine Learning)和人工智能 (AI) 应用 ...

  10. clickhouse官方文档_clickhouse分析:结合grafana和metabase完成监控和数据分析

    点击上方蓝字关注我们 " 关于clickhouse的监控和可视化界面,想必刚接触到ch的人是一头雾水,大厂往往会给ch集群定制各种监控和可视化分析,普通用户就需要我们自己寻求现成的开源工具, ...

最新文章

  1. php链接数据库地址填写ip地址,PHP使用IP地址联接MySQL数据库
  2. gradle加载spring包
  3. Servlet--06--解决乱码问题; 请求转发; 重定向;
  4. 易语言基础编程知识〖E语言手册〗
  5. php简单网站源码包含数组_PHP 数组
  6. python mysql library popular_python之mysql入门详解(四)
  7. SAP Fiori Elements - Account F4 help - how value help dialog is populated
  8. 硬核 | 关于Linux内核的简明知识
  9. 字符设备驱动0:一个简单但完整的字符设备驱动程序
  10. Qt工作笔记-两种方法从容器中筛选出父类和子类(继承法、typeid法)
  11. YOLOv3目标检测有了TensorFlow实现,可用自己的数据来训练
  12. 地铁线路图的设计与实现
  13. PetShop之表示层设计
  14. Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?
  15. spring读取properties配置文件_spring简介
  16. Fabric学习--环境搭建
  17. Python3中的md5加密
  18. 服务器两个内存为何只显示4g_win10系统插入2个4G内存条却只显示4G的解决方法
  19. 客户管理系统(SSM版):bs_typeahead动态的自动补全文本框的内容
  20. maven自定义插件-mojo标注和参数

热门文章

  1. JavaWeb传统商城(MVC三层架构)的评价模块增删改查(CURD)的详细开发过程以及原理详解
  2. Java精品项目源码第113期健身器材商城系统
  3. ICSharpCode.TextEditor 实现获取光标所在行,在某行或某字符 处插入文本
  4. X Chen笔记---Centos安装锐速
  5. 在Hibernate中Query的uniqueResult查询。
  6. 今日份大瓜,美团和饿了么打起来了!
  7. multipart/form-data的使用注意
  8. Bottleneck
  9. PostgreSQL日志管理
  10. “一谷补一脏” 五谷是养生的好食材