STM32G070RBT ADC关闭后无法降低ADC开启产生的功耗
各位大神:STM32G070RBT 进入STOP1低功耗模式时,电流为4uA左右,但是打开ADC,功耗变为18uA,调用HAL_ADC_DeInit(&hadc1)来关闭ADC,功耗还是18uA,无法降低ADC产生的功耗,求解;
以下为STM32CubeMx产生的ADC代码。
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
uint16_t adc_value = 0;
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
HAL_ADC_DeInit(&hadc1);
while (1)
{
/* USER CODE END WHILE */
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
static void MX_ADC1_Init(void)
{
/* USER CODE BEGIN ADC1_Init 0 */
/* USER CODE END ADC1_Init 0 */
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC1_Init 1 */
/* USER CODE END ADC1_Init 1 */
/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV8;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.LowPowerAutoPowerOff = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_7CYCLES_5;
hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_7CYCLES_5;
hadc1.Init.OversamplingMode = DISABLE;
hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC1_Init 2 */
/* USER CODE END ADC1_Init 2 */
}
这个函数HAL_ADC_DeInit(&hadc1)能关闭ADC吗 ,印象中应该有stop一类的函数,还有你的ADC时钟关闭了吗 ADC时钟没有关闭 ADC时钟没有关闭吧。ADC外设也应该没关闭。HAL_ADC_DeInit(&hadc1)印象中只是把ADC的值都恢复默认设置而已。。。 还要注意关闭IO的配置。 综合一下,停止ADC模块,关闭ADC外设时钟,配置好需要的IO口模式(估计你的电路应该是模拟输入):lol 问题已解决,需要关闭ADC电源。 找ST原厂,问题已解决,需要关闭ADC电源才可以降低ADC功耗。
页:
[1]