在配置低功耗的时候,遇到了一个比较奇怪的现象。 硬件是LDO+单片机最小系统+1个LED+adc引脚接电阻到地,没有外部晶振。 在stop模式下,电流是2.4uA,但是约过2分45秒后,电流突然增大到70uA,每次都是这样。弄了两天也没弄好。求助各位大佬。 贴出代码,初始化是cube生成的,ADC为PA4, 按键唤醒在啥时间上都可以,唤醒后灯会闪烁,电流是5mA - MX_GPIO_Init();
- MX_ADC_Init();
- HAL_ADC_MspInit(&hadc);
- /* USER CODE BEGIN 2 */
- for(i=0;i<50;i++)
- {
- HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
- HAL_Delay(50);
- }
- InitEnterHaltMode();
复制代码- void InitEnterHaltMode(void) //进入低功耗
- {
- HAL_ADC_Stop(&hadc);
- HAL_ADC_MspDeInit(&hadc); //执行了PA4的 DeInit(),关闭了ADC时钟
- InitPinEnterHaltMode(); //设置IO ,不使用的设置为模拟
- HAL_SuspendTick();
- /* Enable Power Control clock */
- __HAL_RCC_PWR_CLK_ENABLE();
- HAL_PWR_EnableBkUpAccess();
- HAL_PWR_DisablePVD();
- HAL_PWREx_EnableUltraLowPower();//使能超低功耗
- HAL_PWREx_EnableFastWakeUp(); //使能快速唤醒
- // 若需要在低功耗模式下调试程序,可以打开此函数
- // HAL_DBGMCU_DBG_DisableLowPowerConfig(DBGMCU_SLEEP | DBGMCU_STOP | DBGMCU_STANDBY);
-
- __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI);
- __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//清除所有相关的唤醒标志
- HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_SLEEPENTRY_WFI);
- }
- void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
- {
- if(adcHandle->Instance==ADC1)
- {
- __HAL_RCC_ADC1_CLK_DISABLE();
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4);
- }
- }
复制代码
|
就是ADC的问题,如果屏蔽adc初始化,是一直维持在2uA的,
执行过了这个函数哦HAL_ADC_MspDeInit,具体代码在上面。其他的IO口,除了LED和一个使能脚,都设置为了模拟输入
进入休眠之前,执行过了这个函数哦HAL_ADC_MspDeInit,具体代码在上面。其他的IO口,除了LED和一个使能脚,都设置为了模拟输入。adc这个引脚也设置成为输出高位置输出低,但是没有用,一样的电流增加