Stm32 待机模式电流消耗未降低至预期值

Stm32 待机模式电流消耗未降低至预期值,stm32,Stm32,我试图测量STM32L011F4微控制器中的电流消耗。我尝试了STM在“stm32cubel0”中提供的待机模式示例代码。当我用万用表测量待机模式下的电流消耗时,它约为320µA。数据表显示,在独立看门狗和LSI关闭的情况下,温度在-40°C至25°C之间时,最大电流消耗为0.6µA。代码如下所示。有人知道为什么目前的消费比预期的要多吗 int main(无效) { /*STM32L0xx HAL库初始化*/ HAL_Init(); /*将系统时钟配置为2 MHz*/ SystemClock_C

我试图测量STM32L011F4微控制器中的电流消耗。我尝试了STM在“stm32cubel0”中提供的待机模式示例代码。当我用万用表测量待机模式下的电流消耗时,它约为320µA。数据表显示,在独立看门狗和LSI关闭的情况下,温度在-40°C至25°C之间时,最大电流消耗为0.6µA。代码如下所示。有人知道为什么目前的消费比预期的要多吗

int main(无效)
{
/*STM32L0xx HAL库初始化*/
HAL_Init();
/*将系统时钟配置为2 MHz*/
SystemClock_Config();
/*系统电源配置*/
SystemPower_Config();
/*检查系统是否已从待机模式恢复*/
如果(uuu-HAL\u-PWR\u-GET\u-FLAG(PWR\u-FLAG\u-SB)!=重置)
{
/*清除备用标志*/
__HAL_PWR_CLEAR_标志(PWR_标志_SB);
}
/*插入5秒延迟*/
HAL_延迟(5000);
/*强烈建议在每次进入待机模式之前执行以下唤醒顺序
主要是当使用多个唤醒源时,这是为了不错过任何唤醒事件。
-禁用所有已使用的唤醒源,
-清除所有相关的唤醒标志,
-重新启用所有已使用的唤醒源,
-进入待机模式。
*/
/*禁用所有使用的唤醒源:PWR_wakeup_PIN3*/
HAL_PWR_禁用WakeUppin(PWR_WakeUppin 3);
/*清除所有相关的唤醒标志*/
__HAL_PWR_CLEAR_FLAG_(PWR_FLAG_WU);
/*启用连接至PA.02(Arduino A7)的唤醒引脚PWR_唤醒引脚3*/
HAL_PWR_启用WakeUppin(PWR_WakeUppin 3);
/*进入待机模式*/
HAL_PWR_进入待机模式();
/*此代码将永远无法访问*/
而(1)
{
}
}
/**
*@简要系统时钟配置
*系统时钟配置如下:
*系统时钟源=微秒
*系统时钟(赫兹)=2000000
*HCLK(赫兹)=2000000
*AHB预分频器=1
*APB1预分频器=1
*APB2预分频器=1
*闪存延迟(WS)=0
*主调节器输出电压=比例3模式
*@retval无
*/
无效系统时钟配置(无效)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct={0};
RCC_oscintypedef RCC_OscInitStruct={0};
/*启用MSI振荡器*/
RCC_OscInitStruct.OscillatorType=RCC_OscillatorType_MSI;
RCC_OscInitStruct.MSIState=RCC_MSI_ON;
RCC_OscInitStruct.MSIClockRange=RCC_MSIRANGE_5;
RCC_OscInitStruct.MSICalibrationValue=0x00;
RCC_OscInitStruct.PLL.PLLState=RCC_PLL_NONE;
如果(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK)
{
/*初始化错误*/
而(1),;
}
/*选择MSI作为系统时钟源,并配置HCLK、PCLK1和PCLK2
时钟分频器*/
RCC_ClkInitStruct.ClockType=(RCC_ClockType_SYSCLK | RCC_ClockType | HCLK | RCC_ClockType(PCLK1 | RCC_ClockType)PCLK2);
RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSource_MSI;
RCC\u ClkInitStruct.AHBCLKDivider=RCC\u SYSCLK\u DIV1;
RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;
如果(HAL\U RCC\U时钟配置(&RCC\U ClkInitStruct,闪存\U延迟\U 0)!=HAL\U正常)
{
/*初始化错误*/
而(1),;
}
/*启用电源控制时钟*/
__HAL_RCC_PWR_CLK_ENABLE();
/*电压调整允许在设备运行时优化功耗
时钟低于最大系统频率,以更新电压定标值
关于系统频率,请参阅产品数据表*/
__HAL_PWR_电压缩放_配置(PWR_调节器_电压缩放3);
/*禁用电源控制时钟*/
__HAL_RCC_PWR_CLK_DISABLE();
}
/**
*@简要系统电源配置
*系统电源配置如下:
*+VREFINT关闭,启用快速唤醒
*+无IWDG
*+使用PWR_Wakeup_PIN3唤醒
*@param-None
*@retval无
*/
静态无效系统电源配置(无效)
{
/*启用电源控制时钟*/
__HAL_RCC_PWR_CLK_ENABLE();
/*启用超低功耗模式*/
HAL_PWREx_启用超低功耗();
/*启用超低功耗模式下的快速唤醒*/
HAL_PWREx_启用快速唤醒();
}
/**
*@brief进入待机状态。
*@注意:在待机模式下,除以下情况外,所有I/O引脚均为高阻抗:
*-复位垫(仍然可用)
*-RTC_AF1引脚(PC13),如果配置为篡改、时间戳、RTC
*报警输出或RTC时钟校准输出。
*-RTC_AF2引脚(PC13),如果配置为篡改。
*-WKUP引脚1(PA00)(如果启用)。
*-WKUP引脚2(PC13)(如果启用)。
*-WKUP引脚3(PE06)如果启用,仅适用于stm32l07xxx和stm32l08xxx设备。
*-WKUP引脚3(PA02)如果启用,仅适用于stm32l031xx设备。
*@retval无
*/
无效HAL_PWR_进入待机模式(无效)
{
/*选择待机模式*/
设置位(压水堆->CR,压水堆CR\U PDDS);
/*设置Cortex系统控制寄存器的SLEEPDEEP位*/
设置位(SCB->SCR,SCB\U SCR\U SLEEPDEEP\U Msk);
/*此选项用于确保完成存储操作*/
#如果已定义(uuu CC_uarm)
__force_stores();
#恩迪夫
/*请求等待中断*/
__注射用水();
}

你会发现这些“超低功耗”声称有点诱饵n开关:-)


我一直在使用STML152x和STML071x。>MYI可能会怀疑两件事:1)您的万用表在低电流读数时不准确,2)您的电路板上有其他仍在耗电的组件,并且没有与您的测量隔离。您使用的是什么板和仪表,以及您是如何完成测量的?我使用Voltcraft VC280万用表与µcurrent GOLD组合使用,以提高精度并降低负载电压。我还使用ST-LINK/V2(一种在线调试器和程序员)来调试和加载程序。我搬走了