完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 硬汉Eric2013 于 2016-2-18 15:21 编辑
完整PDF教程和例子下载:http://pan.baidu.com/s/1c0V2Why 【安富莱】【RTX操作系统教程】
【RTX操作系统教程】第21章 RTX低功耗之睡眠模式.pdf
(677.63 KB, 下载次数: 13
)
第21章 RTX低功耗之睡眠模式 低功耗是MCU的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验。 本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407。 21.1 STM32F103睡眠模式介绍 21.2 STM32F407睡眠模式介绍 21.3 低功耗模式的调试支持 21.4 如何有效降低休眠模式下的功耗 21.5 实验例程说明 21.6 总结 说明:在RTX系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请看STM32F103参考手册和Cortex-M3权威指南。 在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。 STM32F103有三种低功耗模式: (1)睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统滴答定时器Systick等仍在运行)。 (2)停止模式(所有的时钟都已停止)。 (3)待机模式(1.8V电源关闭)。 本章节我们主要讲解睡眠模式,而在实际的睡眠模式编程时我需要清楚那些问题呢?请继续往下看。 21.1.1 如何进入睡眠模式 通过执行 WFI(等待中断)或WFE(等待事件)指令进入睡眠状态。根据Cortex™-M3系统控制寄存器中的SLEEPONEXIT位的值,有两种选项可用于选择睡眠模式进入机制: (1)SLEEP-NOW:如果SLEEPONEXIT位被清除,当WRI或WFE被执行时,微控制器立即进入睡眠模式。 (2)SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系统从最低优先级的中断处理程序中退出时,微控制器就立即进入睡眠模式。 小结:本章节配套的睡眠例子我们采用WFI指令进入睡眠模式,睡眠模式的进入机制是采用的SLEEP-NOW。因为系统复位上电后SLEEPONEXIT位是被清除的,所有这个位也不需要专门的去设置。另外在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。 在RTX系统上,我们可以将WFI指令放到空闲任务里面实现。 21.1.2 如何退出睡眠模式 由于我们是采用指令WFI进入睡眠模式,那么任意一个被嵌套向量中断控制器NVIC响应的外设中断都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。 在RTX系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意中断也可以将其从休眠态唤醒。 |
|
相关推荐
|
|
21.2 STM32F407睡眠模式介绍
说明:在RTX系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请看STM32F407参考手册和Cortex-M4权威指南。 默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU通过HCLK 提供时钟,并执行程序代码。系统提供了多个低功耗模式,可在CPU不需要运行时(例如等待外部事件时)节省功耗。由用户根据应用选择具体的低功耗模式,以在低功耗、短启动时间和可用唤醒源之间寻求最佳平衡。STM32F407有三个低功耗模式: (1)睡眠模式(Cortex™-M4F 内核停止,外设保持运行) (2)停止模式(所有时钟都停止) (3)待机模式(1.2 V 域断电) 本章节我们主要讲解睡眠模式,而在实际的休眠模式编程时我需要清楚那些问题呢?请继续往下看。 21.2.1 如何进入睡眠模式 执行 WFI(等待中断)或WFE(等待事件)指令即可进入睡眠模式。根据 Cortex™-M4F 系统控制寄存器中SLEEPONEXIT 位的设置,可以通过两种方案选择睡眠模式进入机制: (1)立即休眠:如果SLEEPONEXIT 位清零, MCU将在执行WFI或WFE指令时立即进入睡眠模式。 (2)退出时休眠:如果SLEEPONEXIT位置1,MCU将在退出优先级最低的ISR时立即进入睡眠模式。 小结:本章节配套的休眠例子我们采用WFI指令进入睡眠模式,睡眠模式的进入机制是采用的立即休眠。因为系统复位上电后SLEEPONEXIT位是被清除的,所有这个位也不需要专门的去设置。另外在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。 在RTX系统上,我们可以将WFI指令放到空闲任务里面实现。 21.2.2 如何退出睡眠模式 由于我们是采用指令WFI进入睡眠模式,那么任意一个被嵌套向量中断控制器NVIC响应的外设中断都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。 在RTX系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意中断也可以将其从休眠态唤醒。 |
|
|
|
|
|
21.3 低功耗模式的调试支持
使用WFI和WFE可以进入低功耗模式。 MCU支持多种低功耗模式,分别可以关闭CPU时钟,或降低CPU的能耗。内核不允许在调试期间关闭FCLK或HCLK。这些时钟对于调试操作是必要的,因此在调试期间,它们必须工作。MCU使用一种特殊的方式,允许用户在低功耗模式下调试代码。为实现这一功能,调试器必须先设置一些配置寄存器来改变低功耗模式的特性。 (1)在睡眠模式下,调试器必须先置位DBGMCU_CR寄存器的DBG_SLEEP位。这将为HCLK提供与FCLK(由代码配置的系统时钟)相同的时钟。 调用库函数:DBGMCU_Config(DBGMCU_SLEEP, ENABLE);即可 (2)在停止模式下,调试器必须先置位DBG_STOP位。这将激活内部RC振荡器,在停止模式下为FCLK和HCLK。 调用库函数:DBGMCU_Config(DBGMCU_STOP, ENABLE);即可 |
|
|
|
|
|
21.3 低功耗模式的调试支持
使用WFI和WFE可以进入低功耗模式。 MCU支持多种低功耗模式,分别可以关闭CPU时钟,或降低CPU的能耗。内核不允许在调试期间关闭FCLK或HCLK。这些时钟对于调试操作是必要的,因此在调试期间,它们必须工作。MCU使用一种特殊的方式,允许用户在低功耗模式下调试代码。为实现这一功能,调试器必须先设置一些配置寄存器来改变低功耗模式的特性。 (1)在睡眠模式下,调试器必须先置位DBGMCU_CR寄存器的DBG_SLEEP位。这将为HCLK提供与FCLK(由代码配置的系统时钟)相同的时钟。 调用库函数:DBGMCU_Config(DBGMCU_SLEEP, ENABLE);即可 (2)在停止模式下,调试器必须先置位DBG_STOP位。这将激活内部RC振荡器,在停止模式下为FCLK和HCLK。 调用库函数:DBGMCU_Config(DBGMCU_STOP, ENABLE);即可 |
|
|
|
|
|
21.4 如何有效降低休眠模式下的功耗
设计低功耗主要从以下几方面着手: 1. 关闭可以关闭的外设时钟。 2. 降低系统主频。 3. 注意I/O的状态,因为休眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。 (1)如果此I/O口带上拉,请设置为高电平输出或者高阻态输入。 (2)如果此I/O口带下拉,请设置为低电平输出或者高阻态输入。 4. 注意I/O和外设IC的连接。 5. 测试低功耗的时候,一定不要连接调试器,更不能边调试边测电流。 |
|
|
|
|
|
21.6 总结
本章节主要为大家讲解了RTX低功耗之睡眠模式,这里仅是提供了一种睡眠模式在RTX上的实现思路,有兴趣的同学也可以想一些其它的实现思路。 |
|
|
|
|
|
2183 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2011 浏览 3 评论
4612 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2154 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2687 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 12:29 , Processed in 0.749732 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号