wgcrdg 发表于 2018-2-9 10:48:30

本帖最后由 wgcrdg 于 2018-2-9 10:53 编辑

好的,试下,唤醒后再重新配置时钟。我是这样使用的。
int main(void)
{
    ......
   
    LCD_Init();
    RTC_Init();   //RTC定时唤醒停止模式下的单片机
    ADC_Init();
    ......
    while (1)
    {
         ......                                    if(采集数据=1)
      {
          采集数据=0;
          采集完成=0;
          EnableADC();
      }
      ......
      if(采集完成=1)
      {
          采集完成=0;
          DisableADC();
      }      
      ......      
      if(无数据采集)
      {      
          __WFI();      
      }
    }
}






wgcrdg 发表于 2018-2-9 11:04:11

又看了下参考手册,进入停止模式后,所有高速时钟都停止。退出停止模式时保持其相应配置,我使用的是HSI16。

Tcreat 发表于 2018-2-9 11:37:24

本帖最后由 Tcreat 于 2018-2-9 11:39 编辑

wgcrdg 发表于 2018-2-9 11:04
又看了下参考手册,进入停止模式后,所有高速时钟都停止。退出停止模式时保持其相应配置,我使用的是HSI16 ...
是保持配置,你可以不重新配置时钟, 但是相应外设的时钟还是需要自己开启的 ,

wgcrdg 发表于 2018-2-9 11:56:49

本帖最后由 wgcrdg 于 2018-2-9 12:01 编辑

我在开始初始化的程序中,外设时钟打开,进入停止模式时,没有关闭相应的外设时钟,刚才我试了下,进入停止模式时,关闭相应外设时钟,退出停止模式时,打开相应外设时钟,电流是一样的, 我的RTC+LCD时,停止模式时,电流是28 uA,不知道你们可以最低降到多少。我也感觉电流大了,但是降不下来了。
//程序完成后将调试线置为模拟
GPIOA->MODER |= (GPIO_MODER_MODE13 |GPIO_MODER_MODE14);

//禁止 PVD 电源电压检测器
CLEAR_BIT(PWR->CR, PWR_CR_PVDE);

//使超低功率模式 VREFINT 在低功耗模式下关闭
//SET_BIT(PWR->CR, PWR_CR_ULP);
//从超低功率模式使快醒来
SET_BIT(PWR->CR, PWR_CR_FWU);
//(HSI) 振荡器作为从停止模式唤醒时钟
MODIFY_REG(RCC->CFGR,RCC_CFGR_STOPWUCK, (uint32_t)(RCC_CFGR_STOPWUCK) );   

RCC->CFGR |= RCC_CFGR_STOPWUCK;//(HSI) 振荡器作为从停止模式唤醒时钟
//CLEAR_BIT(PWR->CR, PWR_CR_LPRUN);
CLEAR_BIT(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPSDSR |PWR_CR_LPRUN));//清除标志
SET_BIT(PWR->CR, (PWR_CR_LPSDSR|PWR_CR_LPRUN));//设置标志低功率运行模式下调压器进入低功耗模式
// SET_BIT(PWR->CR, PWR_CR_LPRUN);
SET_BIT(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk);
SET_BIT(SCB->SCR, SCB_SCR_SLEEPONEXIT_Msk);
__WFI();


chi1997 发表于 2018-2-11 18:02:05

你可以用Jlink调试看看哪里的问题,看看时钟有没有再次打开,或者ADC转换有没有延时

jy04706985 发表于 2019-8-12 16:29:27

学习~~~~~~~~~~

wo1357997531 发表于 2019-8-26 11:02:11

楼主 后来搞定了没
页: 1 [2]
查看完整版本: STM32L053 低功耗采集时,ADC打开与关闭有时出现问题