logo资料库

STM8L051低功耗模式测试文档.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
STM8L051 低功耗模式测试文档 STM8L051 的 五 种 低 功 耗 模 式 wait ,low power run mode ,low power wait mode , Ative-Halt mode,Halt mode。 1、WAIT mode 在等待模式,CPU 的时钟是停止的,被选择的外设继续运行。WAIT mode 分为两种方式: WFE,WFI。WFE 是等待事件发生,才从等待模式中唤醒。WFI 是等待中断发生,才从等 待模式中唤醒。 2、low power run mode 在低功耗运行模式下,CPU 和被选择的外设在工作,程序执行在 LSI 或者 LSE 下,从 RAM 中执行程序,Flash 和 EEPROM 都要停止运行。电压被配置成 Ultra Low Power 模式。进入 此模式可以通过软件配置,退出此模式可以软件配置或者是复位。 3、low power wait mode 这种模式进入是在 low power run mode 下,执行 wfe。在此模式下 CPU 时钟会被停止, 其他的外设运行情况和 low power run mode 类似。在此模式下可以被内部或外部事件、中断 和复位唤醒。当被事件唤醒后,系统恢复到 low power run mode。 4、Active-Halt mode 在此模式下,除了 RTC 外,CPU 和其他外设的时钟被停止。系统唤醒是通过 RTC 中断、 外部中断或是复位。 5、Halt mode 在此模式下,CPU 和外设的时钟都被停止。系统唤醒是通过外部中断或复位。关闭内部 的参考电压可以进一步降低功耗。通过配置 ULP 位和 FWU 位,也可以 6us 的快速唤醒,不 用等待内部的参考电压启动。 一、各个低功耗模式的代码实现 1、 WAIT mode 等待模式分为两种:WFI 和 WFE。 1.1 WFI mode 当执行“wfi”语句时,系统就进入 WFI 模式,当中断发生时,CPU 被从 WFI 模式唤 醒,执行中断服务程序和继续向下执行程序。 通过置位 CFG_GCR 的 AL 位,使主程序服务完中断服务程序后,重新返回到 WFI 模 式。 程序如下: 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(); #ifdef Only_Interrupt CFG->GCR =CFG_GCR_AL; #endif //进入 WFI 模式 //设置 CFG_GCR 的 AL 位,服务完中断后回到 WFI 模式 } 1.2 WFE 当执行“wfe”语句时,系统就进入 WFE 模式。 WFE 有两种唤醒模式,一种是:中断唤醒,一种是:事件唤醒。 当中断唤醒时,当执行到 wfe 时,进入 wfe 模式休眠。系统执行步骤如下:进入 WFE 模式 ---> 有中断产生 --->系统唤醒 --->执行中断服务程序 --->继续休眠 。 当事件唤醒时,当执行到 wfe 时,进入 wfe 模式休眠。系统执行步骤如下:进入 WFE 模式 ---> 有中断产生 --->系统唤醒 --->执行中断服务程序 --->继续往下执行 。 2、low power run mode 这种模式程序在 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 位进入校准低功耗模式 退出 low power run mode 的步骤如下: 1、通过重置 CLK_REGCSR 的 REGOFF 位进入主校准模式,延时等待主校准稳定。 2、通过设置 FLASH_CR1 的 EEPM 位来打开 FLASH 和 EEPROM,延时等待 FLASH 和 EEPROM 打开。 3、屏蔽所有中断。 程序如下:
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 //} }
3、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。 LPR_Ram(void) __ramfunc void LPR_Ram(void) //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 4、Active-Halt mode 在 Active-Halt 模式下,主时钟和 CPU,以及大部分的外设都停止了,只剩下 LSE 或 LSI 为一部分的外设提供时钟,能在 Active-Halt 模式运行的外设包括:SWIM、beeper、IWDG、 RTC 和 LCD。进入 Active-Halt 模式,是通过 halt 语句。退出是通过外部中断、RTC 和复位。
参看代码如下: 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 模式 5、Halt mode 在 Halt mode 下,系统时钟停止,CPU 和所有的外设停止。进入 Halt mode,是执行 halt 语句。退出此模式,是通过外部中断和复位。Halt mode 和 Active-Halt mode 的区别是: Active-Halt mode 下的一些外设还在工作。 参考代码如下: void McuHalt() { Halt_Init(); sim(); halt(); //关闭外设 //屏蔽中断 //进入 Halt 模式 } 二、测试功耗 2.1、测试的各个模式下的功耗的测试步骤如下: 1、烧写不同模式下的代码,配置外部中断唤醒。 2、外部不需要的模块,停止供电。 3、把万用电串到电路中测试整个系统的电流。 2.2、各个部分的测试结果如下:
LOW power mode 进入方式 手册值 实际值 wait for interrupt wait mode wait for event WFI WFE 55uA 87uA 55uA 92uA low power run mode Software Sequence 5.4uA 3.7uA low power wait mode Software sequence + WFE 3.3uA 2.8uA Active-Halt mode HALT 0.8uA 1.02uA low power Active-Hal t Halt Halt mode HALT 0.4uA 0.42uA 2.3、测试时万能表显示数据拍照 1、WFI mode 测试电流如下图所示
2、low power run mode 测试电流如下图所示 3、Halt mode 测试电流如下图所示
4、Ative-Halt mode 测试电流如下图所示 苏州联芯威科技有限公司 研发部 张广辉 2014 年 9 月 16 日
分享到:
收藏