STM32L1x 停止模式 + RTC 电流过大

STM32L1x Stop mode + RTC too much current

我可以使用 RTC 运行 将我的 stm32L1xDiscovery 板置于停止模式。 根据数据表,这应该消耗大约 1.3 µA。但我的应用程序消耗 3.3 µA。

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

这是我用来进入停止模式的方式:

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();

知道我在这里遗漏了什么吗?

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

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

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

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

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