打印
[STM8]

STM8L051低功耗模式测试文档

[复制链接]
2149|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxs0026|  楼主 | 2021-1-30 23:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

STM8L051的五种低功耗模式wait ,low power run mode,low power wait mode,Ative-Halt mode,Halt mode。

  • WAIT  mode

  在等待模式,CPU的时钟是停止的,被选择的外设继续运行。WAIT mode 分为两种方式:WFE,WFI。WFE是等待事件发生,才从等待模式中唤醒。WFI是等待中断发生,才从等待模式中唤醒。

  • low power run mode

  在低功耗运行模式下,CPU和被选择的外设在工作,程序执行在LSI或者LSE下,从RAM中执行程序,Flash和EEPROM都要停止运行。电压被配置成Ultra Low Power模式。进入此模式可以通过软件配置,退出此模式可以软件配置或者是复位。

  • low power wait mode

   这种模式进入是在low power run mode下,执行wfe。在此模式下CPU时钟会被停止,其他的外设运行情况和low power run mode类似。在此模式下可以被内部或外部事件、中断和复位唤醒。当被事件唤醒后,系统恢复到low power run mode。

  • Active-Halt mode

   在此模式下,除了RTC外,CPU和其他外设的时钟被停止。系统唤醒是通过RTC中断、外部中断或是复位。

  • Halt mode

   在此模式下,CPU和外设的时钟都被停止。系统唤醒是通过外部中断或复位。关闭内部的参考电压可以进一步降低功耗。通过配置ULP位和FWU位,也可以6us的快速唤醒,不用等待内部的参考电压启动。


使用特权

评论回复
沙发
lxs0026|  楼主 | 2021-1-30 23:04 | 只看该作者
一、各个低功耗模式的代码实现

1、  WAIT  mode

   等待模式分为两种:WFI和WFE。

  1.1 WFI mode

     当执行“wfi”语句时,系统就进入WFI模式,当中断发生时,CPU被从WFI模式唤醒,执行中断服务程序和继续向下执行程序。

通过置位CFG_GCR的AL位,使主程序服务完中断服务程序后,重新返回到WFI 模式。

使用特权

评论回复
板凳
lxs0026|  楼主 | 2021-1-30 23:06 | 只看该作者
程序如下:
void Mcuwfi()

{

   PWR_UltraLowPowerCmd(ENABLE);  //开启电源的低功耗模式

   CLK_HSEConfig(CLK_HSE_OFF);    //关闭HSE时钟   (16MHz)

   

  #ifdef USE_LSE

    CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSE);

    CLK_SYSCLKSourceSwitchCmd(ENABLE);

    while (((CLK->SWCR)& 0x01)==0x01);

    CLK_HSICmd(DISABLE);

  #else

    CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

    CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);

    CLK_SYSCLKSourceSwitchCmd(ENABLE);            

    while (((CLK->SWCR)& 0x01)==0x01);

    CLK_HSICmd(DISABLE);

  #endif                     //切换时钟到LSI(38KHz)

   

   wfi();                    //进入WFI模式

   #ifdef Only_Interrupt       //设置CFG_GCR的AL位,服务完中断后回到WFI模式

   CFG->GCR =CFG_GCR_AL;

   #endif

}

使用特权

评论回复
地板
lxs0026|  楼主 | 2021-1-30 23:08 | 只看该作者
1.2  WFE

  当执行“wfe”语句时,系统就进入WFE模式。

WFE有两种唤醒模式,一种是:中断唤醒,一种是:事件唤醒。

当中断唤醒时,当执行到wfe时,进入wfe模式休眠。系统执行步骤如下:进入WFE模式 ---> 有中断产生 --->系统唤醒 --->执行中断服务程序  --->继续休眠 。

当事件唤醒时,当执行到wfe时,进入wfe模式休眠。系统执行步骤如下:进入WFE模式 ---> 有中断产生 --->系统唤醒 --->执行中断服务程序  --->继续往下执行 。

使用特权

评论回复
5
lxs0026|  楼主 | 2021-1-30 23:11 | 只看该作者
low power run mode
这种模式程序在RAM中执行,EEPROM和FLASH是在IDDQ(低功耗模式),时钟切换到低速时钟。

进入此模式的步骤如下:

使用特权

评论回复
6
lxs0026|  楼主 | 2021-1-30 23:12 | 只看该作者
退出low power run mode的步骤如下:

使用特权

评论回复
7
lxs0026|  楼主 | 2021-1-30 23:15 | 只看该作者
程序如下:
void LPR_init(void)

{

/*Switch the clock to LSE and disable HSI*/

  CLK_HSEConfig(CLK_HSE_OFF);

  #ifdef USE_LSE

    CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSE);

    CLK_SYSCLKSourceSwitchCmd(ENABLE);

    while (((CLK->SWCR)& 0x01)==0x01);

    CLK_HSICmd(DISABLE);

  #else

    CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

    CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);

    CLK_SYSCLKSourceSwitchCmd(ENABLE);

    while (((CLK->SWCR)& 0x01)==0x01);

    CLK_HSICmd(DISABLE);

  #endif

//PWR_UltraLowPowerCmd(ENABLE);

/*Configure event for WAKEUP and FUNCTION, disable the interrupts*/

  CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1); //切换系统时钟                                                                                            //  到LSI

  

  sim();                                                     //屏蔽中断


  LPR_Ram(); // Call in RAM                                //程序在RAM里执行



  //if(lowpowerwait_flag==1)

// {

//   lowpowerwait_flag=0;

//Switch on the regulator

  // CLK->REGCSR = 0xb9;

  // while(((CLK->REGCSR)&0x1) != 0x1);

   /*Switch the clock to HSI*/

    CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

    CLK_HSICmd(ENABLE);

    while (((CLK->ICKCR)& 0x02)!=0x02);

  

    CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);

    CLK_SYSCLKSourceSwitchCmd(ENABLE);

    while (((CLK->SWCR)& 0x01)==0x01);

    sim();                                   //退出Low power run mode



//}

}

使用特权

评论回复
8
lxs0026|  楼主 | 2021-1-30 23:16 | 只看该作者
Low power wait mode
进入Low power wait mode模式是在MCU进入Low power run mode后执行wfe指令。从Low power wait mode模式退出只能通过外部中断。退出Low power wait mode模式后,CPU会返回到Low power run mode。

使用特权

评论回复
9
lxs0026|  楼主 | 2021-1-30 23:18 | 只看该作者
__ramfunc voidLPR_Ram(void)

//voidLPR_Ram(void)

#endif

{

  uint8_t i = 0;

/* To reduce consumption to minimal

  Swith off the Flash */

  FLASH->CR1 = 0x08;

  while(((CLK->REGCSR)&0x80)==0x80);


/* Swith off the Regulator*/

  CLK->REGCSR = 0x02;

  while(((CLK->REGCSR)&0x01)==0x01);

  

  if(lowpowerwait_flag==0)

       while(1);

  Else                   //在此处进入Low power wait mode,进入WFE的配置。

  {

   

   /* Set trigger on GPIOB pin3*/

     WFE->CR2 = 0x01;

  

/*Wait for end of counter */

    wfe();

    EXTI->SR1 |= 0x10;

    EXTI->SR2 |= 0x01;

    WFE->CR2 = 0x00;   //退出Low power wait mode,进入Low power run mode  

  }

}

使用特权

评论回复
10
lxs0026|  楼主 | 2021-1-30 23:18 | 只看该作者
Active-Halt mode
  在Active-Halt模式下,主时钟和CPU,以及大部分的外设都停止了,只剩下LSE或LSI为一部分的外设提供时钟,能在Active-Halt模式运行的外设包括:SWIM、beeper、IWDG、RTC和LCD。进入Active-Halt模式,是通过halt语句。退出是通过外部中断、RTC和复位。

使用特权

评论回复
11
lxs0026|  楼主 | 2021-1-30 23:19 | 只看该作者
参看代码如下:
void McuActive_Halt()

{

  //Halt_Init();

  PWR_UltraLowPowerCmd(ENABLE);   

  RTC_Config(10000);                       //初始化RTC

/*  

  #ifdef USE_LSE

    CLK_LSEConfig(CLK_LSE_OFF);

    while ((CLK->ECKCR & 0x04) != 0x00);

  #else

    CLK_LSICmd(DISABLE);

    while ((CLK->ICKCR & 0x04) != 0x00);

  #endif*/

      sim();

      halt();                          //进入Active-Halt模式

}

使用特权

评论回复
12
lxs0026|  楼主 | 2021-1-30 23:20 | 只看该作者
Halt mode
   在Halt mode下,系统时钟停止,CPU和所有的外设停止。进入Halt mode,是执行halt语句。退出此模式,是通过外部中断和复位。Halt mode和Active-Halt mode的区别是:Active-Halt mode下的一些外设还在工作。

使用特权

评论回复
13
lxs0026|  楼主 | 2021-1-30 23:21 | 只看该作者
参考代码如下:

void McuHalt()

{

     Halt_Init();    //关闭外设

      sim();      //屏蔽中断

      halt();      //进入Halt模式

}

使用特权

评论回复
14
tfqi| | 2021-2-5 23:22 | 只看该作者
每个模式都介绍的非常详细

使用特权

评论回复
15
wiba| | 2021-2-5 23:25 | 只看该作者
停机模式功耗最低

使用特权

评论回复
16
zljiu| | 2021-2-5 23:28 | 只看该作者
可以按照这个配置 实测一下

使用特权

评论回复
17
coshi| | 2021-2-5 23:32 | 只看该作者
每种模式的唤醒时间一样吗

使用特权

评论回复
18
aoyi| | 2021-2-5 23:33 | 只看该作者
非常感谢楼主的分享哈

使用特权

评论回复
19
lxs0026|  楼主 | 2021-7-15 21:40 | 只看该作者
tfqi 发表于 2021-2-5 23:22
每个模式都介绍的非常详细

谢谢

使用特权

评论回复
20
lxs0026|  楼主 | 2021-7-15 21:41 | 只看该作者
wiba 发表于 2021-2-5 23:25
停机模式功耗最低

是的,停机模式低功耗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

1045

帖子

1

粉丝