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) 跳线。
...可能还有其他问题。很难做到正确。
我可以使用 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) 跳线。
...可能还有其他问题。很难做到正确。