第21章 RTX 低功耗之睡眠模式
低功耗是 MCU 的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路
消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验。
本章节为大家讲解 M3/4的低功耗方式之睡眠模式在 RTX 操作系统上面的实
现方法(RTX 本身支持的 tickless 低功耗模式在第 24 章节讲解)
STM32F103 睡眠模式介绍
说明:在 RTX 系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请
看 STM32F103 参考手册和 Cortex-M3 权威指南。
在系统或电源复位以后,微控制器处于运行状态。当 CPU 不需继续运行时,可以利用多种低功耗模
式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源
等条件,选定一个最佳的低功耗模式。
STM32F103 有三种低功耗模式:
睡眠模式(Cortex™-M3 内核停止,所有外设包括 Cortex-M3 核心的外设,如 NVIC、系统滴答定时
器 Systick 等仍在运行)。
停止模式(所有的时钟都已停止)。
待机模式(1.8V 电源关闭)。
本章节我们主要讲解睡眠模式,而在实际的睡眠模式编程时我需要清楚那些问题呢?请继续往下看。
如何进入睡眠模式
通过执行 WFI(等待中断)或 WFE(等待事件)指令进入睡眠状态。根据 Cortex™-M3 系统控制
寄存器中的 SLEEPONEXIT 位的值,有两种选项可用于选择睡眠模式进入机制:
SLEEP-NOW:如果 SLEEPONEXIT 位被清除,当 WRI 或 WFE 被执行时,微控制器立即进入睡眠模
式。
SLEEP-ON-EXIT:如果 SLEEPONEXIT 位被置位,系统从最低优先级的中断处理程序中退出时,微控
制器就立即进入睡眠模式。
小结:本章节配套的睡眠例子我们采用 WFI 指令进入睡眠模式,睡眠模式的进入机制是采用的
SLEEP-NOW。 因为系统复位上电后 SLEEPONEXIT 位是被清除的,所有这个位也不需要专门的去设置。
另外在睡眠模式下,所有的 I/O 引脚都保持它们在运行模式时的状态。
在 RTX 系统上,我们可以将 WFI 指令放到空闲任务里面实现。
如何退出睡眠模式
由于我们是采用指令 WFI 进入睡眠模式,那么任意一个被嵌套向量中断控制器 NVIC 响应的外设中断
都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
在 RTX 系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意
中断也可以将其从休眠态唤醒。
STM32F407 睡眠模式介绍
说明:在 RTX 系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请
看 STM32F407 参考手册和 Cortex-M4 权威指南。
默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU 通过 HCLK 提
供时钟,并执行程序代码。系统提供了多个低功耗模式,可在 CPU 不需要运行时(例如等待外部事件时)
节省功耗。由用户根据应用选择具体的低功耗模式,以在低功耗、短启动时间和可用唤醒源之间寻求最佳
平衡。 STM32F407 有三个低功耗模式:
睡眠模式(Cortex™-M4F 内核停止,外设保持运行)
停止模式(所有时钟都停止)
待机模式(1.2 V 域断电)
本章节我们主要讲解睡眠模式,而在实际的休眠模式编程时我需要清楚那些问题呢?请继续往下看。
低功耗模式的调试支持
使用 WFI 和 WFE 可以进入低功耗模式。
MCU 支持多种低功耗模式,分别可以关闭 CPU 时钟,或降低 CPU 的能耗。内核不允许在调试期间
关闭 FCLK 或 HCLK。这些时钟对于调试操作是必要的,因此在调试期间,它们必须工作。 MCU 使用一种
特殊的方式,允许用户在低功耗模式下调试代码。为实现这一功能,调试器必须先设置一些配置寄存器来
改变低功耗模式的特性。
在睡眠模式下,调试器必须先置位 DBGMCU_CR 寄存器的 DBG_SLEEP 位。这将为 HCLK 提供与
FCLK(由代码配置的系统时钟)相同的时钟。
调用库函数:DBGMCU_Config(DBGMCU_SLEEP, ENABLE);即可
在停止模式下,调试器必须先置位 DBG_STOP 位。这将激活内部 RC 振荡器,在停止模式下为 FCLK
和 HCLK。
调用库函数:DBGMCU_Config(DBGMCU_STOP, ENABLE);即可
如何有效降低休眠模式下的功耗
设计低功耗主要从以下几方面着手:
关闭可以关闭的外设时钟。
降低系统主频。
注意 I/O 的状态,因为休眠模式下,所有的 I/O 引脚都保持它们在运行模式时的状态。
如果此 I/O 口带上拉,请设置为高电平输出或者高阻态输入。
如果此 I/O 口带下拉,请设置为低电平输出或者高阻态输入。
注意 I/O 和外设 IC 的连接。
测试低功耗的时候,一定不要连接调试器,更不能边调试边测电流。
第21章 RTX 低功耗之睡眠模式的更多相关文章
- 第22章 RTX 低功耗之停机模式
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php STM32F103 停机模式介绍 本章节我们主要讲解停机模式,停机模式是在 Cortex™-M3 的深睡 ...
- 第23章 RTX 低功耗之待机模式
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php STM32F103 待机模式介绍 本章节我们主要讲解待机模式,待机模式可实现系统的最低功耗.该模式是在 ...
- ESP8266的低功耗方案-睡眠模式
在某些时候我们设计的产品可能不具备持久供电的环境,那通常会采用锂电池.干电池一类的轻便型的非持久性电源.当遇到这种情况时,产品的续航能力可能就会成用户评估产品的一个重要指标,加大电池容量当然是最为直接 ...
- FreeRTOS 低功耗之睡眠模式
以下转载自安富莱电子: http://forum.armfly.com/forum.php 低功耗是 MCU 的一项重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话 ...
- FreeRTOS 低功耗之 tickless 模式
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 本身支持的低功耗模式 tickless 实现方法,tickless 低功 ...
- 第21章 策略模式(Strategy Pattern)
原文 第21章 策略模式(Strategy Pattern) 策略模式 导读:策略模式看完之后,大多数人都会感觉有点混了,包括我,感觉策略模式是一种OO思想的体现(纯属个人拙见). 概述: ...
- 设计模式之第21章-状态模式(Java实现)
设计模式之第21章-状态模式(Java实现) “what are you 干啥了?怎么这么萎靡不振?”“昨晚又是补新番,又是补小笼包,睡得有点晚啊.话说杨过的那个雕兄真是太好了,每天给找蛇胆,又陪练武 ...
- 【RL-TCPnet网络教程】第21章 RL-TCPnet之高效的事件触发框架
第21章 RL-TCPnet之高效的事件触发框架 本章节为大家讲解高效的事件触发框架实现方法,BSD Socket编程和后面章节要讲解到的FTP.TFTP和HTTP等都非常适合使用这种方式 ...
- 【二代示波器教程】第13章 RTX操作系统版本二代示波器实现
第13章 RTX操作系统版本二代示波器实现 本章教程为大家讲解RTX操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务栈,系统栈以及全局 ...
随机推荐
- LVS基本原理
LVS基本原理 简介 负载调度器.真实服务器群节点一起被称为LVS.LVS负载调度器(有时也称为负载平衡器),接收所服务的所有接入服务集群的请求,并决定集群中的哪个节点应该回复其请求. 1)负载调度器 ...
- HTML 5 应用程序缓存(Application Cache)cache manifest 文件使用 html5 中创建manifest缓存以及更新方法 一个manifest文件会创建一份缓存,不同的manifest文件其缓存的内容是互不干扰的
HTML5 离线缓存-manifest简介 HTML 5 应用程序缓存 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. 什么是应用程序缓存(A ...
- 【HTML】input标签中alt属性和title属性的比较
经常用到这两个属性,但是一直没有总结他们的区别.现在我对他们两个的用法做一下总结: 相同点:他们都会飘出一个小浮层,显示文本内容. 不同点: 1.alt只能是元素的属性,而title即可以是元素的属性 ...
- Fastjson是一个Java语言编写的高性能功能完善的JSON库。
简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...
- label 赋值 , 隐藏 , 显示
<label name='by_stages_number' id='by_stages_number'></label> document.getElementById(&q ...
- Android Support Library 23.2介绍(翻译自官方文档)
Android Support Library 23.2 (译者注:本文标注了部分文字链接,但须要***,要查看全部链接.请查看sukey=014c68f407f2d3e181b6b5e665f26a ...
- RGB 常用颜色对照表
http://blog.csdn.net/xiaoting451292510/article/details/8226325
- IAR注释的快捷键
1.注释的快捷键:Ctrl+K;取消注释:Ctrl+Shfit+K ... IAR注释代码的时候和MDK有很大的不同,以下简要说之:在注释代码的时候,你需如此操作: 注释一行,直接使用双斜杠”//“即 ...
- ADS错误the session file 'C:\user\username\default-1-2-0-0.ses' could not be loaded解决办法
问题描述:用ADS1.2 + H-JTAG或者是H-Jlink,每次调试的时候都会出现“the session file could not be loaded”这个错误,寻求解决办法?问题解答:用户 ...
- 【转载】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
转自:[欧阳鹏]http://blog.csdn.net/ouyang_peng Android 设备的CPU类型(通常称为”ABIs”) armeabiv-v7a: 第7代及以上的 ARM 处理器. ...