STM8L15x 低功耗运行模式疑问
1)根据手册步骤,进入此模式需要7个步骤:步骤3. Jump to RAM;这个步骤怎么实现?2)退出此模式:没法退出
请问一下,官方有相关例程没?
1
http://bbs.21ic.com/icview-176724-1-1.html
1 我也在学习这块 low power run mode
这种模式程序在RAM中执行,EEPROM和FLASH是在IDDQ(低功耗模式),时钟切换到低速时钟。
进入此模式的步骤如下:
进入RAM
切换系统时钟到LSE或LSI
关闭高速时钟、外设和ADC
屏蔽中断
通过设置FLASH_CR1的EEPM位来关闭FLASH和EEPROM
等待FLASH和EEPROM关闭
通过设置CLK_REGCSR的REGOFF位进入校准低功耗模式
退出low power run mode的步骤如下:
通过重置CLK_REGCSR的REGOFF位进入主校准模式,延时等待主校准稳定。
通过设置FLASH_CR1的EEPM位来打开FLASH和EEPROM,延时等待FLASH和EEPROM打开。
屏蔽所有中断。
程序如下:
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
//}
}
之前参加过ST的低功耗培训,虽然用的是L476,不过推荐你了解一下;
https://www.stmcu.org.cn/module/forum/thread-612479-1-1.html
低功耗对MCU的控制程序逻辑要很费心的。 简单地来说,就是:
1)wait(等待模式):时钟关闭、外设可用。通过中断、外部中断、复位,能退出本模式。
2)Active-halt(活跃停机模式):时钟关闭、外设关闭、RTC开启。通过RTC中断、外部中断、复位,能退出本模式。
3)Halt(停机模式)(功耗最低):时钟关闭、外设关闭。通过外部中断、复位,能退出本模式。
页:
[1]