zoukankan      html  css  js  c++  java
  • 第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 的连接。
    测试低功耗的时候,一定不要连接调试器,更不能边调试边测电流。

  • 相关阅读:
    继承与派生
    函数,迭代器,生成器
    面向对象
    函数
    模块与包
    python面试题(转自https://www.cnblogs.com/wupeiqi/p/9078770.html)
    python学习大纲目录(转自alex博客https://www.cnblogs.com/alex3714/)
    Mysql(基础篇)
    初识HTML和CSS2
    初识前端作业1
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7351679.html
Copyright © 2011-2022 走看看