硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4147|回复: 4
收起左侧

[FreeRTOS教程] 第30章 FreeRTOS低功耗之睡眠模式

[复制链接]

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2016-9-12 17:08:09 | 显示全部楼层 |阅读模式



第30章      FreeRTOS低功耗之睡眠模式



      低功耗是MCU的一项重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验。
     本章节为大家讲解STM32F103,STM32F407和STM32F429的低功耗方式之睡眠模式的一些知识点,第33章讲解FreeRTOS支持的tickless模式是睡眠模式的具体使用例子。
30.1 STM32F103睡眠模式介绍
30.2 STM32F4xx睡眠模式介绍
30.3 低功耗模式的调试支持
30.4 如何有效降低睡眠模式下的功耗
30.5      总结



30.1  STM32F103睡眠模式介绍  


      说明:在FreeRTOS系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请看STM32F103参考手册和Cortex-M3权威指南。
      在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时,用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。
      STM32F103有三种低功耗模式:
    (1)睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统滴答定时器Systick等仍在运行)
    (2)停机模式(所有的时钟都已停止)
    (3)待机模式(1.8V电源关闭)
      本章节我们主要讲解睡眠模式,而在实际的睡眠模式编程时我们需要清楚哪些问题呢?请继续往下看。

30.1.1 如何进入睡眠模式


      通过执行 WFI(等待中断)或WFE(等待事件)指令进入睡眠状态。根据Cortex™-M3系统控制寄存器中的SLEEPONEXIT位的值,可以通过两种方案选择睡眠模式进入机制:
    (1)SLEEP-NOW:如果SLEEPONEXIT位被清除,当WFI或WFE被执行时,微控制器立即进入睡眠模式。
    (2)SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系统从最低优先级的中断处理程序中退出时,微控制器就立即进入睡眠模式。
       实际应用中我们采用WFI指令进入睡眠模式,睡眠模式的进入机制是采用的SLEEP-NOW。因为系统复位上电后SLEEPONEXIT位是被清除的,所以这个位也不需要专门的去设置。另外在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
      在FreeRTOS系统上,不使用tickless低功耗模式的话,我们可以将WFI指令放到空闲任务里面实现。不过,既然有了tickless模式,基本就不需要采用这种方法了。

30.1.2 如何退出睡眠模式


      由于我们是采用指令WFI进入睡眠模式,那么任意一个被嵌套向量中断控制器NVIC响应的外设中断都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
      在FreeRTOS系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意中断也可以将其从睡眠态唤醒。
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2016-9-12 17:13:26 | 显示全部楼层
30.2 STM32F4xx睡眠模式介绍


      说明:本小节的内容含STM32F407和STM32F429,在FreeRTOS系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请看STM32F4xx参考手册和Cortex-M4权威指南。
      默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU通过HCLK 提供时钟,并执行程序代码。系统提供了多个低功耗模式,可在CPU不需要运行时(例如等待外部事件时)节省功耗。由用户根据应用选择具体的低功耗模式,以在低功耗、短启动时间和可用唤醒源之间寻求最佳平衡。STM32F4xx有三个低功耗模式:
    (1)睡眠模式(Cortex™-M4F 内核停止,外设保持运行)
    (2)停机模式(所有时钟都停止)
    (3)待机模式(1.2 V 域断电)
      本章节我们主要讲解睡眠模式,而在实际的睡眠模式编程时我们需要清楚哪些问题呢?请继续往下看。

30.2.1 如何进入睡眠模式


      执行 WFI(等待中断)或WFE(等待事件)指令即可进入睡眠模式。根据 Cortex™-M4F 系统控制寄存器中SLEEPONEXIT 位的设置,可以通过两种方案选择睡眠模式进入机制:
(1)立即睡眠:如果SLEEPONEXIT 位清零, MCU将在执行WFIWFE指令时立即进入睡眠模式
(2)退出时睡眠:如果SLEEPONEXIT位置1MCU将在退出优先级最低的ISR时立即进入睡眠模式。
      实际应用中我们采用WFI指令进入睡眠模式,睡眠模式的进入机制是采用的立即睡眠。因为系统复位上电后SLEEPONEXIT位是被清除的,所以这个位也不需要专门的去设置。另外在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
      在FreeRTOS系统上,不使用tickless低功耗模式的话,我们可以将WFI指令放到空闲任务里面实现。不过,既然有了tickless模式,基本就不需要采用这种方法了。

30.2.2 如何退出睡眠模式


      由于我们是采用指令WFI进入睡眠模式,那么任意一个被嵌套向量中断控制器NVIC响应的外设中断都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
      在FreeRTOS系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意中断也可以将其从睡眠态唤醒。
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2016-9-12 17:14:25 | 显示全部楼层
30.3 低功耗模式的调试支持


      要进入低功耗模式需要调用指令WFI或WFE。
      STM32 支持多个低功耗模式,这些模式可以禁止CPU时钟或降低CPU功耗。内核不允许在调试期间关闭 FCLK 或 HCLK,因为调试期间需要使用它们进行调试连接,因此必须保持激活状态。STM32集成了特殊方法,允许用户在低功耗模式下调试软件。为实现这一功能,调试器必须先设置一些配置寄存器来改变低功耗模式的特性。
    (1)在睡眠模式下,调试器必须先置位DBGMCU_CR寄存器的DBG_SLEEP位。这将为HCLK提供与FCLK(由代码配置的系统时钟)相同的时钟。
                  调用库函数:DBGMCU_Config(DBGMCU_SLEEP, ENABLE);即可
    (2)在停机模式下,调试器必须先置位DBG_STOP位。这将激活内部RC振荡器,在停止模式下为FCLKHCLK提供时钟。
                  调用库函数:DBGMCU_Config(DBGMCU_STOP, ENABLE);即可
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2016-9-12 17:16:00 | 显示全部楼层
30.4 如何有效降低睡眠模式下的功耗


     设计低功耗主要从以下几方面着手:
    1、关闭可以关闭的外设时钟。
    2、降低系统主频。
    3、注意I/O的状态,因为睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
      (1)如果此I/O口带上拉,请设置为高电平输出或者高阻态输入。
      (2)如果此I/O口带下拉,请设置为低电平输出或者高阻态输入。
    4、注意I/O和外设IC的连接。
    5、测试低功耗的时候,一定不要连接调试器,更不能边调试边测电流。
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2016-9-12 17:16:28 | 显示全部楼层
30.5 总结


     本章节主要为大家讲解了STM32低功耗之睡眠模式,学习了本章节内容后,可为第33章FreeRTOS的低功耗模式tickless的学习打下基础。
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 22:53 , Processed in 0.163960 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表