cancel
Showing results for 
Search instead for 
Did you mean: 

STM32G071 ADC channel selection

HPATH.1
Associate II

I wanted to know which channel is converted latest. I configured as below

hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.ScanConvMode = ADC_SCAN_SEQ_FIXED;
  hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV; //
  hadc1.Init.LowPowerAutoWait = DISABLE;
  hadc1.Init.LowPowerAutoPowerOff = DISABLE;
  hadc1.Init.ContinuousConvMode = ENABLE;  //
  hadc1.Init.NbrOfConversion = 4;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T6_TRGO; //
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.DMAContinuousRequests = DISABLE;
  hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; //
  hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_1CYCLE_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_0;
  sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_1;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_2;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_3;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_4;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

in the call back function

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
 
{
 
 /* Retrieve ADC conversion data */
 
 uhADCxConvertedData = HAL_ADC_GetValue(hadc);
 
 
 
 /* Computation of ADC conversions raw data to physical values      */
 
 /* using helper macro.                         */
 
 //uhADCxConvertedData_Voltage_mVolt = __ADC_CALC_DATA_VOLTAGE(VDDA_APPLI, uhADCxConvertedData);
 
 
 
 /* Update status variable of ADC unitary conversion           */
 
 ubAdcGrpRegularUnitaryConvStatus = 1;
 
 
 
 ADCcount++;
 
 if(ADCcount > 1000)
 
 {
 
 ADCcount = 0;
 
 HAL_GPIO_TogglePin (LED3_GPIO_Port, LED3_Pin);
 
 }
 
}
 
 

I wanted know which channel was last converted.

1 REPLY 1
raptorhal2
Lead

Since you haven't changed the rank for each channel, you will probably get 4 conversions of Channel 4.

Edit: Unless you really want to reconfigure the ADC after each channel, it is best to use DMA for more than one channel. There is probably a DMA example in the G0 library examples.

Cheers, Hal