请问STM8L15x低功耗运行模式怎么实现?

2019-07-14 14:53发布

1)根据手册步骤,进入此模式需要7个步骤:步骤3. Jump to RAM;这个步骤怎么实现?

2)退出此模式:没法退出

请问一下,官方有相关例程没?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
Wu雨雨雨
2019-07-14 17:52
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



//}

}

一周热门 更多>