STM8L051低功耗模式实现说明文档文档格式.docx
《STM8L051低功耗模式实现说明文档文档格式.docx》由会员分享,可在线阅读,更多相关《STM8L051低功耗模式实现说明文档文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
当被事件唤醒后,系统恢复到lowpowerrunmode。
4、Active-Haltmode
在此模式下,除了RTC外,CPU和其他外设的时钟被停止。
系统唤醒是通过RTC中断、外部中断或是复位。
5、Haltmode
在此模式下,CPU和外设的时钟都被停止。
系统唤醒是通过外部中断或复位。
关闭内部的参考电压可以进一步降低功耗。
通过配置ULP位和FWU位,也可以6us的快速唤醒,不用等待内部的参考电压启动。
一、各个低功耗模式的代码实现
1、WAITmode
等待模式分为两种:
WFI和WFE。
1.1WFImode
当执行“wfi”语句时,系统就进入WFI模式,当中断发生时,CPU被从WFI模式唤醒,执行中断服务程序和继续向下执行程序。
通过置位CFG_GCR的AL位,使主程序服务完中断服务程序后,重新返回到WFI模式。
程序如下:
voidMcuwfi()
{
PWR_UltraLowPowerCmd(ENABLE);
//开启电源的低功耗模式
CLK_HSEConfig(CLK_HSE_OFF);
//关闭HSE时钟(16MHz)
#ifdefUSE_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);
#endif//切换时钟到LSI(38KHz)
wfi();
//进入WFI模式
#ifdefOnly_Interrupt//设置CFG_GCR的AL位,服务完中断后回到WFI模式
CFG->
GCR=CFG_GCR_AL;
#endif
}
1.2WFE
当执行“wfe”语句时,系统就进入WFE模式。
WFE有两种唤醒模式,一种是:
中断唤醒,一种是:
事件唤醒。
当中断唤醒时,当执行到wfe时,进入wfe模式休眠。
系统执行步骤如下:
进入WFE模式--->
有中断产生--->
系统唤醒--->
执行中断服务程序--->
继续休眠。
当事件唤醒时,当执行到wfe时,进入wfe模式休眠。
继续往下执行。
这种模式程序在RAM中执行,EEPROM和FLASH是在IDDQ(低功耗模式),时钟切换到低速时钟。
进入此模式的步骤如下:
1、进入RAM
2、切换系统时钟到LSE或LSI
3、关闭高速时钟、外设和ADC
4、屏蔽中断
5、通过设置FLASH_CR1的EEPM位来关闭FLASH和EEPROM
6、等待FLASH和EEPROM关闭
7、通过设置CLK_REGCSR的REGOFF位进入校准低功耗模式
退出lowpowerrunmode的步骤如下:
1、通过重置CLK_REGCSR的REGOFF位进入主校准模式,延时等待主校准稳定。
2、通过设置FLASH_CR1的EEPM位来打开FLASH和EEPROM,延时等待FLASH和EEPROM打开。
3、屏蔽所有中断。
voidLPR_init(void)
/*SwitchtheclocktoLSEanddisableHSI*/
//PWR_UltraLowPowerCmd(ENABLE);
/*ConfigureeventforWAKEUPandFUNCTION,disabletheinterrupts*/
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI,CLK_RTCCLKDiv_1);
//切换系统时钟
//到LSI
sim();
//屏蔽中断
LPR_Ram();
//CallinRAM//程序在RAM里执行
//if(lowpowerwait_flag==1)
//{
//lowpowerwait_flag=0;
//Switchontheregulator
//CLK->
REGCSR=0xb9;
//while(((CLK->
REGCSR)&
0x1)!
=0x1);
/*SwitchtheclocktoHSI*/
CLK_HSICmd(ENABLE);
ICKCR)&
0x02)!
=0x02);
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
//退出Lowpowerrunmode
//}
3、Lowpowerwaitmode
进入Lowpowerwaitmode模式是在MCU进入Lowpowerrunmode后执行wfe指令。
从Lowpowerwaitmode模式退出只能通过外部中断。
退出Lowpowerwaitmode模式后,CPU会返回到Lowpowerrunmode。
__ramfuncvoidLPR_Ram(void)
//voidLPR_Ram(void)
uint8_ti=0;
/*Toreduceconsumptiontominimal
SwithofftheFlash*/
FLASH->
CR1=0x08;
while(((CLK->
0x80)==0x80);
/*SwithofftheRegulator*/
CLK->
REGCSR=0x02;
0x01)==0x01);
if(lowpowerwait_flag==0)
while
(1);
Else//在此处进入Lowpowerwaitmode,进入WFE的配置。
/*SettriggeronGPIOBpin3*/
WFE->
CR2=0x01;
/*Waitforendofcounter*/
wfe();
EXTI->
SR1|=0x10;
SR2|=0x01;
CR2=0x00;
//退出Lowpowerwaitmode,进入Lowpowerrunmode
在Active-Halt模式下,主时钟和CPU,以及大部分的外设都停止了,只剩下LSE或LSI为一部分的外设提供时钟,能在Active-Halt模式运行的外设包括:
SWIM、beeper、IWDG、RTC和LCD。
进入Active-Halt模式,是通过halt语句。
退出是通过外部中断、RTC和复位。
参看代码如下:
voidMcuActive_Halt()
//Halt_Init();
RTC_Config(10000);
//初始化RTC/*
CLK_LSEConfig(CLK_LSE_OFF);
while((CLK->
ECKCR&
0x04)!
=0x00);
CLK_LSICmd(DISABLE);
ICKCR&
#endif*/
halt();
//进入Active-Halt模式}
在Haltmode下,系统时钟停止,CPU和所有的外设停止。
进入Haltmode,是执行halt
语句。
退出此模式,是通过外部中断和复位。
Haltmode和Active-Haltmode的区别是:
Active-Haltmode下的一些外设还在工作。
参考代码如下:
voidMcuHalt()
Halt_Init();
//关闭外设
//进入Halt模式
二、测试功耗
2.1、测试的各个模式下的功耗的测试步骤如下:
1、烧写不同模式下的代码,配置外部中断唤醒。
2、外部不需要的模块,停止供电。
3、把万用电串到电路中测试整个系统的电流。
2.2、各个部分的测试结果如下:
LOWpowermode进入方式手册值