我能够在运行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();
知道我在这里缺少什么吗?
答案 0 :(得分:1)
如果您使用发现板,您的测量可能不明确,因为许多其他组件消耗了一些能量。它可能是3.3V线路的保护二极管,驱动器或带有ST-LINK / V2嵌入式调试工具的第二个MCU。
答案 1 :(得分:1)
您在哪里测量功耗?你应该在JP1引脚1和1之间做到这一点。 2(引脚2直接连接到Vdd)。这应该显示MCU所消耗的功率,当然还有任何由输出引脚供电的功能。
诀窍是正确断开和关闭所有引脚(唤醒源除外)以及所有不需要的时钟。
FLASH->ACR |= SLEEP_PD
RCC_APB1ENR_PWREN
以外的所有时钟并唤醒RCC->xxxLPENR
......可能还有其他问题。这很难做到。