你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G070RBT ADC关闭后无法降低ADC开启产生的功耗

[复制链接]
HaiyangYu 提问时间:2020-8-8 14:03 /
        各位大神:
       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 */

}

收藏 评论7 发布时间:2020-8-8 14:03

举报

7个回答
陌路夕颜 回答时间:2020-8-10 09:04:05
这个函数HAL_ADC_DeInit(&hadc1)能关闭ADC吗 ,印象中应该有stop一类的函数,还有你的ADC时钟关闭了吗

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

yklstudent 回答时间:2020-8-10 09:17:46
ADC时钟没有关闭

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

小小超 回答时间:2020-8-10 15:55:40
ADC时钟没有关闭吧。ADC外设也应该没关闭。HAL_ADC_DeInit(&hadc1)印象中只是把ADC的值都恢复默认设置而已。。。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

废鱼 回答时间:2020-8-10 19:21:27
还要注意关闭IO的配置。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

butterflyspring 回答时间:2020-8-13 11:16:27
综合一下,停止ADC模块,关闭ADC外设时钟,配置好需要的IO口模式(估计你的电路应该是模拟输入)

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

HaiyangYu 回答时间:2020-8-18 09:33:01
问题已解决,需要关闭ADC电源。
HaiyangYu 回答时间:2020-8-18 09:34:17
找ST原厂,问题已解决,需要关闭ADC电源才可以降低ADC功耗。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版