STM8 低功耗模式 STM8应用笔记

发布者:Changsheng520最新更新时间:2021-10-14 来源: eefocus关键字:STM8  低功耗模式  中断向量表 手机看文章 扫描二维码
随时随地手机看文章

四种STM8低功耗模式的主要特性如表12。

STM8四种低功耗模式
(表12:STM8S低功耗模式管理)

1.如果外设时钟未被关闭
2.包括通讯外设的中断(参见中断向量表)


STM8等待(Wait)模式

在运行模式下执行WFI(等待中断)指令,可进入等待模式。此时CPU停止运行,但外设与中断控制器仍保持运行,因此功耗会有所降低。等待模式可与PCG(外设时钟门控),降低CPU时钟频率,以及选择低功耗时钟源(LSI,HSI)相结合使用,以进一步降低系统功耗。参见时钟控制(CLK)的说明。


在等待模式下,所有寄存器与RAM的内容保持不变,之前所定义的时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。

当一个内部或外部中断请求产生时,CPU从等待模式唤醒并恢复工作。


STM8停机(Halt)模式

在该模式下主时钟停止。即由fMASTER提供时钟的CPU及所有外设均被关闭。因此,所有外设均没有时钟,MCU的数字部分不消耗能量。
在停机模式下,所有寄存器与RAM的内容保持不变,默认情况下时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。
MCU可通过执行HALT指令进入停机模式。外部中断可将MCU从停机模式唤醒。外部中断指配置为中断输入的GPIO端口或具有触发外设中断能力的端口。
在这种模式下,为了节省功耗主电压调节器关闭。仅低电压调节器(及掉电复位)处于工作状态。

  • 快速时钟启动
    HSI RC的启动速度比HSE快(参见数据手册中电特性参数)。因此,为了减少MCU的唤醒时间,建议在进入暂停模式前选择HSI做为fMASTER的时钟源。
    在进入停机模式前可通过设置内部时钟寄存器CLK_ICKR的FHWU位选择HSI做为fMASTER的时钟源,而无需时钟切换。参见时钟控制章节。

STM8活跃停机(Active Halt)模式

活跃停机模式与停机模式类似,但它不需要外部中断唤醒。它使用AWU,在一定的延时后产生一个内部唤醒事件,延迟时间是用户可编程的。


在活跃暂停模式下,主振荡器、CPU及几乎所有外设都被停止。如果AWU和IWD已被使能,则只有LSI RC与HSE仍处于运行状态,以驱动AWU和IWD计数器。为进入活跃停机模式,需首先使能AWU(如AWU章节所述),然后执行HALT指令。

  • 主电压调节器自动关闭
    默认情况下,为了从活跃停机模式快速唤醒,主电压调节器处于激活状态。但其电流消耗是不可忽视的。
    为进一步降低功耗,当MCU进入活跃停机模式时,主电压调节器可自动关闭。通过设置内部时钟寄存器CLK_ICKR的REGAH位可实现此功能。此时:

    • MCU内核由低功耗电压调节器(LPVR)供电(如同停机模式)。

    • 仅LSI时钟源可用,因为HSE时钟源对于LPVR来说电流消耗太大。

在唤醒时主电压调节器重新被打开,这需要一个比较长的唤醒时间(参见STM8数据手册电特性部分唤醒时间与电流消耗的相关数据)。

  • 快速唤醒时钟
    如停机模式所述,为了缩短唤醒时间,建议使用HSI做为fMASTER的时钟源。FHWU位也可用于缩短切换时间。
    在活跃停机模式下,快速唤醒是很重要的。这可以提高CPU的执行效率,使MCU处于运行状态与低功耗模式之间的时间最短,从而减少整体平均功耗。


关键字:STM8  低功耗模式  中断向量表 引用地址:STM8 低功耗模式 STM8应用笔记

上一篇:一个STM8串口**程序教程
下一篇:STM8 FOR IAR 中实现绝对地址跳转

推荐阅读最新更新时间:2024-11-17 05:20

STM32L0低功耗设计6: STOP_RTC模式下的休眠时间
本文介绍STOP_RTC模式下,设置进入低功耗休眠时间的方法。 低功耗的休眠时间的设置首先需要确定RTC的基准时间,我们一般将其设置为1秒,这在《STM32L0低功耗设计4: RTC模块1秒时钟的产生方法》中已经介绍过,大家看一下就好。 接下来,就需要对HAL_RTCEx_SetWakeUpTimer_IT函数的第2个参数进行设置了。 具体计算公式:数值 = 定时时间(秒)*(RTC时钟)/16,其中16为该参数的第2个参数,RTC时钟要看具体的时钟源,在我设计的项目中,使用的是LSI,则为37000。 进一步计算:数值 = 定时时间(秒) * 37000 / 16 = 定时时间(秒)* 231
[单片机]
STM8学习笔记——定时器定时功能和中断相关
定时器都差不多,无非就是计数,溢出了标志置位,如果中断允许的话产生一个中断。说到中断,STM8S105的中断向量表如下 时基单元: 在选用内部时钟的情况下,CK_PSC是由fmaster提供的,经过定时器预分频器分频产生CK_CNT时钟,然后作为一次计数的时基,举个例子,16M的内部RC,经过16分频,则CK_CNT为1M,那么定时1ms只需计数1000次。 计数模式: 共有三种:向上,向下,中央对齐 以向上计数为例:计数器从0计数到用户定义的比较值(TIMx_ARR寄存器的值),然后重新从0开始计数并产生一个计数器溢出事件,同时,如果TIM1_CR1寄存器的UDIS位是0,将会产生一个更新事件(U
[单片机]
STM8学习笔记(二):GPIO的输入
这两天有点忙,焊了四个按键,在LED灯的基础上,实现GPIO的输入 这次用的是ST公司的官方库 组要的还是要理解GPIO的几个寄存器的功能 同时,要好好的理解它官方库里面的函数定义和用法 /**************************************************************/ void GPIO_Configuration(void) { GPIO_Init(LEDS_PORT, (LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN | LED5_PIN | LED6_PIN | LED7_PIN | LED8_PIN), GPIO_MODE_OUT_
[单片机]
STM8开发环境搭建(修订版)
之前写的有些步骤是狗屁不通,不知道为何没有人反馈,我主要是记录给自己看,本来我是想好好写的,写到最后一步,删除的时候用了Backspace键,结果尼玛返回到上一页了,还有上传图片还自己手动输入宽度,要不然不显示,希望有关人员能够改进,否则都没有人写博客了...... 编译的时候会出现这样的错误(我之前写的6,7,8都是废话,请忽视掉) 解决方法是: 如上图所示,就那么简单填写下,什么库丢失啊,这些问题都可以解决掉.
[单片机]
<font color='red'>STM8</font>开发环境搭建(修订版)
STM8如何使用自带的bootloader
1,首先确认你使用的STM8有没有自带的bootloader。参考下表 2,STM8空器件可以直接使用自带的bootloader。 3,STM8在使用SWIM烧录后,要想继续使用自带的bootloader,必须设置可选字节为0x55AA。如下图: 设置这两个字节的方法,可以使用ST Visual Programmer修改,如下图: 不过这个软件显示只能修改487Eh为0x55,487Fh没更改。官方提供的软件,很奇怪。所以,我采用下一种方法 在程序中设定,然后用SWIM下载一次,一次就够了。使用库函数如下: /* Define FLASH programming time */ FLASH_SetProgrammi
[单片机]
<font color='red'>STM8</font>如何使用自带的bootloader
RTC唤醒低功耗(standby)模式
这段时间在公司最一个低功耗的项目,采用的的STM32F103的最低功耗standby模式,进入最低功耗模式后,电流降到了3uA,和芯片手册上的大致相同。对进入低功耗模式,网上有很多程序,我在这里把我的粘贴上来,仅供参考,io口的具体配置要通过电路原理图来设置。 void enter_standby_mode(void) { //IO口配置 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); R
[单片机]
RTC唤醒<font color='red'>低功耗</font>(standby)<font color='red'>模式</font>
STM8的数据@near@tiny定义
如何分配变量到指定的地址 举例: unsigned char temp_A@0x00; //定义无符号变量temp_A,强制其地址为0x00 unsigned char temp_B@0x100; //定义无符号变量temp_B,强制其地址为0x100 @tiny unsigned char temp_C; //定义无符号变量temp_C,由编译器自动在地址小于0x100的RAM中为其分配一个地址 @near unsigned char temp_D; //定义无符号变量temp_D,由编译器自动在地址大于0xFF的RAM中为其分配一个地址 另外也可以采用伪指令 pragma 将函数或者变量定义到指定的se
[单片机]

推荐帖子

Merging GSM with WLAN in a mobile handset needn''t cause int
WhenGSMistransmitting,theWLANsubsystemcan\'\'treceiveWLANpackets(Fig.1).Likewise,whenGSMisinreceiveormonitormode,theWLANcan\'\'transmit,asitwilldesensitizetheGSMreceiver.Inaddition,oneradiochainmustbeturnedoff
JasonYoo RF/无线
FPGA/CPLD之问????????
小弟想学FPGA或CPLD,但不知选哪一个,各位师兄,师姐给点建议啊假如想和单片机一起使用,FPGA或CPLD哪个更好?假如想和DSP一起使用,哪个又更全程啊?大家说说啊,小弟在此先谢了啊FPGA/CPLD之问????????两个基本差不多单片机+cpld较多dsp也可以如果想做比较大一点的系统可以选择fpga其实都是可以的差不多,建议先从CPLD学起,完了,FPGH很好上手没有太大的区别吧。CPLD比FPGA使用起来更方便。cpld程序编写好以后烧进片子后断电程序不
wq7610 FPGA/CPLD
MakerBot 3D打印基础技巧--EEWORLD大学堂
MakerBot3D打印基础技巧:https://training.eeworld.com.cn/course/1971深入了解MakerBot3D打印机,并提供一些成功的3D打印技巧和窍门。MakerBot3D打印基础技巧--EEWORLD大学堂前排围观。。。。。574433742发表于2015-8-610:05前排围观。。。。。 知道一个多少钱不,挺好玩的
chenyy 工控电子
请教关于FLASH保存参数数据
我用的单片机是STM32F103RBT6,128Kflash,我想实现掉电保存数据,flash一页1KB,我想分成30份,每份32字节数据,第一次就擦除该页数据,掉电直接写入32字节数据,以后只要断电,不再进行擦除flash整页的操作,就立马接着上次存数据的后面写入此时的32字节数据,直到写完30份,然后才进行一次擦除该页数据操作。这样来说可行么???对了掉电检测使用PVD检测电压值,初步设定为2.9v,只要掉电,就直接执行写寄存器操作。因为看网上都说写之前一定要进行擦除性操作。所以想确
a19911103hsy stm32/stm8
有奖DIY-测量人体发出的50HZ方波(DIY示波器)
今天DIY时录制的,请看视频~有奖DIY-测量人体发出的50HZ方波(DIY示波器)哪来的淫荡的笑声啊?视频后期合成的fxyc87发表于2015-1-3116:10哪来的淫荡的笑声啊?justforlaugh笑声不淫荡啊,分明是来捧场的嘛额...这个真是人体发出的?还是方波...楼主的触发是怎么弄的,用软件实现的吗?这还是第一次听说人体发出的方波这个不是人体发出的方波,是工频干扰信号,我做心电的时候这个信号经常出现人体就相当于一个巨大的天线
kejoy stm32/stm8
新手上路
新手上路,开始接触单片机,论坛里面好多学习资料,向大师们学习,谢谢大家。新手上路我也是新手,论坛里面好多学习资料(虽然不全),向大师们学习,谢谢大家。单片机不如树莓派玩起来吧CODESYS刚装好了,搞起来
zfpf 测试/测量
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved