Skip to main content
HPATH.1
Associate III
June 18, 2022
Question

STM32G071 ADC channel selection

  • June 18, 2022
  • 1 reply
  • 959 views

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.

This topic has been closed for replies.

1 reply

raptorhal2
Lead
June 18, 2022

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