【RTX操作系统教程】第21章 RTX低功耗之睡眠模式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32F103 有三种低功耗模式: 睡眠模式(Cortex™-M3 内核停止,所有外设包括 Cortex-M3 核心的外设,如 NVIC、系统滴答定时
器 Systick 等仍在运行)。 停止模式(所有的时钟都已停止)。 待机模式(1.8V 电源关闭)。
本章节我们主要讲解睡眠模式,而在实际的睡眠模式编程时我需要清楚那些问题呢?请继续往下看。
RTX 任务调试信息:
在休眠模式下,无法动态的查看任务的调试信息。下面的是单步调试时状态查看:
2015年12月10日
版本:1.0
第 6 页 共 20 页
武汉安富莱电子有限公司 WWW.ARMFLY.COM
安富莱 STM32-V4 开发板 RTX 教程
本章节我们主要讲解睡眠模式,而在实际的休眠模式编程时我需要清楚那些问题呢?请继续往下看。
2015年12月10日
版本:1.0
第 2 页 共 20 页
武汉安富莱电子有限公司 WWW.ARMFLY.COM
21.2.1 如何进入睡眠模式
安富莱 STM32-V4 开发板 RTX 教程
执行 WFI(等待中断)或 WFE(等待事件)指令即可进入睡眠模式。根据 Cortex™-M4F 系统控 制寄存器中 SLEEPONEXIT 位的设置,可以通过两种方案选择睡眠模式进入机制: 立即休眠:如果 SLEEPONEXIT 位清零, MCU 将在执行 WFI 或 WFE 指令时立即进入睡眠模式。 退出时休眠:如果 SLEEPONEXIT 位置 1,MCU 将在退出优先级最低的 ISR 时立即进入睡眠模式。
本章教程配套的例子含 Cortex-M3 内核的 STM32F103 和 Cortex-M4 内核的 STM32F407。 21.1 STM32F103 睡眠模式介绍 21.2 STM32F407 睡眠模式介绍 21.3 低功耗模式的调试支持 21.4 如何有效降低休眠模式下的功耗 21.5 实验例程说明 21.6 总结
21.2.2 如何退出睡眠模式
由于我们是采用指令 WFI 进入睡眠模式,那么任意一个被嵌套向量中断控制器 NVIC 响应的外设中断 都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
在 RTX 系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意 中断也可以将其从休眠态唤醒。
RTX 配置:
RTX 配置向导详情如下:
2015年12月10日
版本:1.0
第 5 页 共 20 页
武汉安富莱电子有限公司 WWW.ARMFLY.COM
安富莱 STM32-V4 开发板 RTX 教程
Task Configuration Number of concurrent running tasks 允许创建 4 个任务,实际创建了如下四个任务: AppTaskUserIF 任务 :按键消息处理。 AppTaskLED 任务 :LED 闪烁。 AppTaskMsgPro 任务 :消息处理,等待任务 AppTaskUserIF 发来的消息邮箱数据。 AppTaskStart 任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 Number of tasks with user-provided stack 创建的 4 个任务都是采用自定义堆栈方式。
21.4 如何有效降低休眠模式下的功耗
设计低功耗主要从以下几方面着手:
2015年12月10日
版本:1.0
第 3 页 共 20 页
武汉安富莱电子有限公司 WWW.ARMFLY.COM
安富莱 STM32-V4 开发板 RTX 教程
关闭可以关闭的外设时钟。
降低系统主频。
注意 I/O 的状态,因为休眠模式下,所有的 I/O 引脚都保持它们在运行模式时的状态。
武汉安富莱电子有限公司 WWW.ARMFLY.COM
安富莱 STM32-V4 开发板 RTX 教程
第21章 RTX 低功耗之睡眠模式
低功耗是 MCU 的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路 消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验。
本章节为大家讲解 STM32F103 和 STM32F407 的低功耗方式之睡眠模式在 RTX 操作系统上面的实 现方法(RTX 本身支持的 tickless 低功耗模式在第 24 章节讲解)
21.1 STM32F103 睡眠模式介绍
说明:在 RTX 系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请 看 STM32F103 参考手册和 Cortex-M3 权威指南。
在系统或电源复位以后,微控制器处于运行状态。当 CPU 不需继续运行时,可以利用多种低功耗模 式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源 等条件,选定一个最佳的低功耗模式。
2015年12月10日
版本:1.0
第 1 页 共 20 页
武汉安富莱电子有限公司 WWW.ARMFLY.COM
21.1.1 如何进入睡眠模式
安富莱 STM32-V4 开发板 RTX 教程
通过执行 WFI(等待中断)或 WFE(等待事件)指令进入睡眠状态。根据 Cortex™-M3 系统控制 寄存器中的 SLEEPONEXIT 位的值,有两种选项可用于选择睡眠模式进入机制: SLEEP-NOW:如果 SLEEPONEXIT 位被清除,当 WRI 或 WFE 被执行时,微控制器立即进入睡眠模
式可以使用的低功耗方式有休眠模式,待机模式,停机模式。
2. 选择了低功耗方式后就是关闭可以关闭的外设时钟。
3. 降低系统主频。
4. 注意 I/O 的状态。
如果此 I/O 口带上拉,请设置为高电平输出或者高阻态输入;
Βιβλιοθήκη Baidu
如果此 I/O 口带下拉,请设置为低电平输出或者高阻态输入;
a. 在睡眠模式下,所有的 I/O 引脚都保持它们在运行模式时的状态。
21.1.2 如何退出睡眠模式
由于我们是采用指令 WFI 进入睡眠模式,那么任意一个被嵌套向量中断控制器 NVIC 响应的外设中断 都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
在 RTX 系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意 中断也可以将其从休眠态唤醒。
(1) STM32F10x 有三种低功耗模式: a. 睡眠模式(Cortex-M3 内核停止,所有外设包括 Cortex-M3 核心的外设,如 NVIC、系统时 钟(SysTick)等仍在运行) b. 停止模式(所有的时钟都已停止) c. 待机模式(1.8V 电源关闭)
(2) 通过指令__WFI 进入休眠模式,可以通过任意中断唤醒。 (3) 降低系统主频或者关闭外设时钟也可有效降低系统功耗。
2015年12月10日
版本:1.0
第 4 页 共 20 页
武汉安富莱电子有限公司 WWW.ARMFLY.COM
安富莱 STM32-V4 开发板 RTX 教程
(4) 进入低功耗状态前,设置使用的 I/O 引脚不产生拉电流和灌电流也可有效降低功耗。
5. 本例程的低功耗实现方法是在空闲任务中调用__WFI 指令来进入低功耗模式。未做关闭外设时钟和
式。 SLEEP-ON-EXIT:如果 SLEEPONEXIT 位被置位,系统从最低优先级的中断处理程序中退出时,微控
制器就立即进入睡眠模式。 小结:本章节配套的睡眠例子我们采用 WFI 指令进入睡眠模式,睡眠模式的进入机制是采用的 SLEEP-NOW。因为系统复位上电后 SLEEPONEXIT 位是被清除的,所有这个位也不需要专门的去设置。 另外在睡眠模式下,所有的 I/O 引脚都保持它们在运行模式时的状态。 在 RTX 系统上,我们可以将 WFI 指令放到空闲任务里面实现。
21.3 低功耗模式的调试支持
使用 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 和外设 IC 的连接。
测试低功耗的时候,一定不要连接调试器,更不能边调试边测电流。
21.5 实验例程说明
21.5.1STM32F103 开发板实验
配套例子:
任务 AppTaskMsgPro 接收到消息后进行消息处理。 3. 各个任务实现的功能如下:
AppTaskUserIF 任务 :按键消息处理。 AppTaskLED 任务 :LED 闪烁。 AppTaskMsgPro 任务 :消息处理,等待任务 AppTaskUserIF 发来的信号量同步信号。 AppTaskStart 任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 4. 关于低功耗的说明:
b. 在停止模式下,所有的 I/O 引脚都保持它们在运行模式时的状态。
c. 在待机模式下,所有的 I/O 引脚处于高阻态,除了以下的引脚:
● 复位引脚(始终有效)
● 当被设置为防侵入或校准输出时的 TAMPER 引脚
● 被使能的唤醒引脚
5. 注意 I/O 和外设 IC 的连接。
6. 测低功耗的时候,一定不要连接调试器,更不能边调试边测电流。
小结:本章节配套的休眠例子我们采用 WFI 指令进入睡眠模式,睡眠模式的进入机制是采用的立即休 眠。因为系统复位上电后 SLEEPONEXIT 位是被清除的,所有这个位也不需要专门的去设置。另外在睡眠 模式下,所有的 I/O 引脚都保持它们在运行模式时的状态。
在 RTX 系统上,我们可以将 WFI 指令放到空闲任务里面实现。
设置 I/O 引脚处理。在文件 RTX_Conf_CM.C 文件中的函数 os_idle_demon 里面调用函数__WFI。
6. 实际项目中推荐采用官方的 tickless 模式。
设计低功耗主要从以下几个方面着手:
1. 用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模
V4-421_RTX 实验_低功耗(睡眠模式)
实验目的:
1. 学习 RTX 实验低功耗(睡眠模式)。 2. 通过函数 DBGMCU_Config(DBGMCU_SLEEP, ENABLE);保证睡眠模式下调试器正常连接使用。
实验内容:
1. K1 按键按下,串口打印。 2. K2 键按下,直接发送信号量同步信号给任务 AppTaskMsgPro。
21.2 STM32F407 睡眠模式介绍
说明:在 RTX 系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请 看 STM32F407 参考手册和 Cortex-M4 权威指南。
默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU 通过 HCLK 提 供时钟,并执行程序代码。系统提供了多个低功耗模式,可在 CPU 不需要运行时(例如等待外部事件时) 节省功耗。由用户根据应用选择具体的低功耗模式,以在低功耗、短启动时间和可用唤醒源之间寻求最佳 平衡。STM32F407 有三个低功耗模式: 睡眠模式(Cortex™-M4F 内核停止,外设保持运行) 停止模式(所有时钟都停止) 待机模式(1.2 V 域断电)
相关文档
最新文档