在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