stm8低功耗 唤醒

一.MCU耗能因素

现代的MCU一般使用CMOS技术,耗能包括2种,静态消耗和动态消耗。

总电能消耗=静态消耗+动态消耗,

即:IDD=f×IDynamicRun[uA/MHz]+IStatic[uA].

静态消耗:主要是晶体管消耗能量;

因此,电能消耗依赖于:

1.MCU芯片尺寸 或者说晶体管的数目;

2.MCU供电电压 降低电压可以成平方级别地降低电能消耗;

3.时钟频率 可以把时钟频率降低到刚好满足应用需要;

4.外设数目,使能的外设越多,耗能越大;

5.运行模式 合理选择工作模式可以大幅节能,如,全速工作极短时间后进入睡眠模式

二.节能方法

1.关闭不需要使用的外设;

2.所有未使用的引脚必须连接到一个确定的逻辑电平;

3.当有外设必须保持激活时,使用Wait模式来获得低功耗

4.使用合适的VDD值;

5.尽可能地使用低功耗运行模式;

6.如果不能使用低功耗模式,那就将主频降低到满足应用的最小值;

7.如果可能,使用动态控制I/O引脚的上拉功能。

三.低功耗模式

支持低功耗的MCU一般都有好几种运行模式,以ST公司的STM8L为例,它支持5种低功耗模式:

等待、低功耗运行、低功耗等待、主动停止、停止模式。

表1:STM8L低功耗运行模式:每一种模式的进入方式,节能级别和外设工作要求

模式

等待模式(wait)

低功耗运行

低功耗等待

主动停止

停机模式

入口

WF(I由中断唤醒)

WFE(则由事件唤醒)

软件代码

软件代码+WFE

HALT

HALT

晶振

LSI或LSE

LSI或LSE

LSI或LSE

CPU

外设

关,仅RTC开

唤醒

所有内部和外部中断,复位

所有内部和外部中断,复位,唤醒事件

软件代码,复位

内部和外部事件,复位

外部中断,RTC中断,复位

外部中断,复位

电压调节器

MVR

MVR

ULP

ULP

CLK_ICKCR

ULP

程序执行区

FLASH

FLASH

RAM

RAM

FLASH

FLASH

FLASH+E2

中断

允许

允许

禁止

禁止

允许

允许

中断服务后 返回状态

AL=0:main

AL=1:WFI

WFE

/

/

AL=0:main

AL=1主动停止

AL=0:main

AL=1:停止

事件处理后 返回状态

/

Main

/

低功耗运行

/

/

RAM+寄存器

保留

保留

保留

保留

保留

保留

@3V/25℃

5.9uA

5.4uA

3.3uA

1.0uA

0.4uA

特殊事项

/

/

禁止ADC

/

清除外设悬挂中断标志位

单片机中的WFI/WFE指令

进入低功耗模式的两个指令,

WFI进入则可由任意中断唤醒,WFE进入则由事件唤醒

WFI = wait for interrupt 等待中断,即下一次中断发生前都在此hold住不干活
WFE = wait for event 等待事件,即下一次事件发生前都在此hold住不干活
执行这两条语句后CPU功耗会降低,通常用这两条语句来省电。

表2选择合理的STM8L节能模式

节能要求

应用场合

睡眠时长

唤醒方式

恢复时长

运行模式

苛刻

CPU空闲,等待外部信号唤醒

外部中断

≥2.8us

HALT(停机模式)

苛刻

CPU空闲,等待时钟周期唤醒

RTC周期

≥2.8us

Active-halt活跃停机模式

严格

CPU有持续、微负荷任务运行

/

/

≥2.8us

低功耗运行

严格

CPU短暂等待中断发生

任意中断

等待中断

严格

CPU短暂等待事件发生

注册事件

等待事件

需要

CPU有持续、轻负荷任务运行

/

/

/

调整主频

 

 

简单地来说,就是:

1)wait(等待模式):时钟关闭、外设可用。通过中断、外部中断、复位,能退出本模式。

2)Active-halt(活跃停机模式):时钟关闭、外设关闭、RTC开启。通过RTC中断、外部中断、复位,能退出本模式。

3)Halt(停机模式)(功耗最低):时钟关闭、外设关闭。通过外部中断、复位,能退出本模式。

stm8低功耗 唤醒_第1张图片

另外,上图同时说明了默认上电时是运行模式,在运行模式时可通过如下方法降低功耗:

1)降低时钟频率。

2)关闭没用的外设时钟。

3)(香瓜补充)无用的IO口配置为输出低。

 

 

四、调试低功耗的调试一般分为以下几个步骤:

1、休眠模式的设置;2、I/O口状态的配置;3、硬件电路的调试;4、各个功能之间的工作间隙。

 

 

 

五.进入低功耗模式与低功耗唤醒流程的具体步骤?

答:

1)进入低功耗模式的流程

①关闭外设时钟。

②所有IO设置为输出低(注意低电平使能的得设置为输出高)。

③初始化中断口的IO。

④时钟频率降至最低(2M)。

⑤打开中断总开关。

⑥调用停机模式的函数。

 

2)低功耗唤醒的流程

①初始化系统时钟。

②初始化用到的外设。

 

 

所有中断允许处理器从等待模式退出。只有重置或事件允许处理器从低功率等待模式退出。这种模式在低功率运行模式下执行WFE指令。一个事件的唤醒使系统回到低功率运行模式(参见更多细节)。只有外部和其他特定的中断允许处理器从停止和active暂停模式退出(请参阅中断,并在中断向量表中从主动暂停中唤醒。数据表)。当从停止模式中醒来时,当几个未决中断出现时,第一个中断中断服务只能是一种中断模式功能的中断。这是选择通过图30所示的决策过程。如果最高优先级的中断不能从停止模式唤醒设备,它将会被服务。如果有任何内部或外部中断(例如,在计时器中)发生中断指令正在执行,停止指令已经完成,但是中断调用了在停止指令完成后立即启动唤醒进程。在这种情况下MCU实际上是从暂停模式唤醒到运行模式,并有相应的延迟在数据表中指定的tWUH。在执行停止指令之前,用户程序必须清除任何未决的外围设备中断(在相应的外围配置中清除未决的中断寄存器)。否则,停止指令就不会执行,程序执行也不会执行仍在继续。

 

MCU激活级别是通过在cfggcr寄存器中编程AL位来配置的(参见全局配置寄存器(cfggcr))。这个钻头用于控制MCU的低功率模式。在非常低的功率应用中,MCU大部分时间都在wfi/暂停模式下,并被唤醒(通过中断)特定的时刻,以执行特定的任务。其中一些重复的任务是足够短的时间可以直接在ISR中进行处理(中断服务程序),而不是继续回到主程序。为了解决这个问题,你可以在进入低之前设置AL位电源模式(通过执行wfi/停止指令)。因此,中断例程使设备恢复到低功率模式。然后中断例程直接返回到低功耗模式。由于寄存器的事实,运行时/isr的执行减少了上下文只在第一次中断时保存。因此,所有的操作都可以在非常简单的应用程序中在ISR中执行。在更复杂的,中断例程可以通过简单的重置重新启动主程序美联。例如,一个应用程序可能需要被自动唤醒单元(AWU)唤醒。每隔50毫秒,就可以检查一些针/传感器/按钮的状态。大部分的时间,因为这些大头针不活跃,MCU可以在不运行的情况下返回到低功率模式主程序。如果其中一个大头针是活动的,ISR就会决定启动主程序通过重置AL位。

你可能感兴趣的:(stm8)