我想要实现“掉电数据保存”功能,其中ADC1用于测量5V供电电压(为MCU等的3.3V 芯片供电),如果低于4.5V,MCU就会将512字节的掉电数据保存到专用Adesto AD45DB321的FLASH的PAGE中。这一页已经被预先擦除,所以我可以使用“write without pre erase”的函数来写入,这需要3毫秒时间,而不是正常的15毫秒。我实际测量下来的FLASH写入时间为2.5毫秒。
问题是电量下降的速度有点太快了,就在3毫秒左右,3.3V下降到大约2.3V。这个MCU器件的最小VCC是2.3V。
因此,我正在寻找降低功耗的方法,最直接的方法就是关闭CPU。查了各种文章,最终我发现
HAL _ PWR _ EnterSTANDBYMode();
这个函数:
void HAL_PWR_EnterSTANDBYMode(void) { /* Select Standby mode */ SET_BIT(PWR->CR, PWR_CR_PDDS); /* Set SLEEPDEEP bit of Cortex System Control Register */ SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); /* Request Wait For Interrupt */ __WFI(); }
但出于某种奇怪的原因,这并没有什么效果,也许花的时间反而太长了?
是哪里少做了什么吗?我看到低功耗模式被中断退出,这可能是问题所在。就没有简单的“关机”函数吗?需要保留RTC和RTC RAM。
标签:
#STM32#