STM32L1x停止模式+ RTC电流过大

时间:2016-04-06 11:15:34

标签: c timer stm32 real-time-clock

我能够在运行RTC的情况下将stm32L1xDiscovery板置于STOP模式。 根据数据表,这应该吸收大约1.3μA。但是我的应用程序吸收了3.3μA。

我注意到我在睡眠期间没有将FLASH置于低功耗模式。但是当我这样做时,没有任何改变。

这是我用于进入STOP模式的方法:

SCB->SCR |= ((uint32_t)SCB_SCR_SLEEPDEEP);

RCC->APB1ENR |= RCC_APB1Periph_PWR;
PWR->CR |= ((uint32_t)(PWR_CR_LPSDSR|PWR_CR_ULP)); // ULP seems to have no effect on power consumption
RCC->APB1ENR &= ~RCC_APB1Periph_PWR;

FLASH->ACR |= SLEEP_PD; // seems to have no effect at all on power consumption

__WFI();

知道我在这里缺少什么吗?

2 个答案:

答案 0 :(得分:1)

如果您使用发现板,您的测量可能不明确,因为许多其他组件消耗了一些能量。它可能是3.3V线路的保护二极管,驱动器或带有ST-LINK / V2嵌入式调试工具的第二个MCU。

答案 1 :(得分:1)

您在哪里测量功耗?你应该在JP1引脚1和1之间做到这一点。 2(引脚2直接连接到Vdd)。这应该显示MCU所消耗的功率,当然还有任何由输出引脚供电的功能。

诀窍是正确断开和关闭所有引脚(唤醒源除外)以及所有不需要的时钟。

  • 设置FLASH->ACR |= SLEEP_PD
  • 启用所有GPIO时钟
  • 将所有不需要的引脚置于模拟模式
  • 禁用除RCC_APB1ENR_PWREN以外的所有时钟并唤醒RCC->xxxLPENR
  • 中的GPIO
  • 然后在没有调试器的情况下启动它,移除ST-Link(CN3)跳线。

......可能还有其他问题。这很难做到。