STM32L0低功耗设计3: Stop模式下的真实功耗

    在12V输入端测量电流时,电流变化比较大,不能确认语句执行的有效性,所以在3.3V稳压前端接入电流表,以测量真实电流功耗。

    main函数中的程序,如下,程序一执行就进入Stop模式。

int main(void)
{
	Target.EnterStopMode();
	while(1)
	{
		
	}
}

    EnterStopMode函数里面做的事情,也很简单,如下:

void CTarget::EnterStopMode(void)
{
  HAL_PWREx_EnableUltraLowPower();
  HAL_PWREx_EnableFastWakeUp();
  __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI);
	HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}

    在main之前,按照ST公司的示例程序,进行了引脚配置,如下:

CTarget::CTarget(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	this->bMilliSecond_1000 = FALSE;
	this->bMilliSecond_100 = FALSE;
	this->bMilliSecond_10 = FALSE;
	
	/* Enable GPIOs clock */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();

  /* Configure all GPIO port pins in Analog Input mode (floating input trigger OFF) */
  GPIO_InitStructure.Pin = GPIO_PIN_All;
  GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStructure.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); 
  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
  HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
  HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
  HAL_GPIO_Init(GPIOH, &GPIO_InitStructure);

  /* Disable GPIOs clock */
  __HAL_RCC_GPIOA_CLK_DISABLE();
  __HAL_RCC_GPIOB_CLK_DISABLE();
  __HAL_RCC_GPIOC_CLK_DISABLE();
  __HAL_RCC_GPIOD_CLK_DISABLE();
  __HAL_RCC_GPIOH_CLK_DISABLE();
}

    按照上述程序是我现阶段能够测得的最低功耗:1.2uA,这与手册上给的0.4uA还是有差距的,考虑2点区别:

    1、我测量电流的位置在3.3V线性稳压前,3.3V线性稳压后,板子上实在不好接入电流表,就没有再测量;

    2、我使用3.3V,手册测得条件是3.0V

    也或许我程序还有需要改进的地方,不过这个数值已经能够满足项目的基本要求了,继续努力。


原创性文章,转载请注明出处      

CSDN:http://blog.csdn.net/qingwufeiyang12346





猜你喜欢

转载自blog.csdn.net/qingwufeiyang12346/article/details/80646697
今日推荐