1

So I wanted to read out multiple channels from adc3 on my stm32f7 discovery. I have been able to read out one channel and set up for multiple ones, but I can't figure out how to read out per channel. I wanted to read them out by interrupt so I set the adc up like this:

  hadc3.Instance          = ADC3;

  hadc3.Init.ClockPrescaler        = ADC_CLOCKPRESCALER_PCLK_DIV4;
  hadc3.Init.Resolution            = ADC_RESOLUTION_12B;
  hadc3.Init.ScanConvMode          = ENABLE;                       /* Sequencer disabled (ADC conversion on only 1 channel: channel set on rank 1) */
  hadc3.Init.ContinuousConvMode    = ENABLE;                       /* Continuous mode enabled to have continuous conversion  */
  hadc3.Init.DiscontinuousConvMode = DISABLE;                       /* Parameter discarded because sequencer is disabled */
  hadc3.Init.NbrOfDiscConversion   = 0;
  hadc3.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;        /* Conversion start trigged at each external event */
  hadc3.Init.ExternalTrigConv      = ADC_EXTERNALTRIGCONV_T1_CC1;
  hadc3.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
  hadc3.Init.NbrOfConversion       = 2;
  hadc3.Init.DMAContinuousRequests = DISABLE;
  hadc3.Init.EOCSelection          = DISABLE;



  if (HAL_ADC_Init(&hadc3) != HAL_OK)
  {
    /* ADC initialization Error */
    Error_Handler();
  }

  /*##-2- Configure ADC regular channel ######################################*/
  sConfig.Channel      = ADC_CHANNEL_8;
  sConfig.Rank         = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
  sConfig.Offset       = 0;

  if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  {
    /* Channel Configuration Error */
    Error_Handler();
  }
    /*##-2- Configure ADC regular channel ######################################*/
  sConfig.Channel      = ADC_CHANNEL_0;
  sConfig.Rank         = 2;
  sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
  sConfig.Offset       = 0;

  if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  {
    /* Channel Configuration Error */
    Error_Handler();
  }

  /*##-3- Start the conversion process #######################################*/
  if(HAL_ADC_Start_IT(&hadc3) != HAL_OK)
  {
    /* Start Conversation Error */
    Error_Handler();
  }

and then I have a callback where it will go when end of conversion, here I wanted to read the data out but I don't know how to read out per channel.

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{

    /* Get the converted value of regular channel */
    ADC3ConvertedValue[0] = HAL_ADC_GetValue(AdcHandle);
    ADC3ConvertedValue[1] = HAL_ADC_GetValue(AdcHandle);
    char disp[50];
    sprintf(disp, "%d%%", ADC3ConvertedValue[0]);
    BSP_LCD_DisplayStringAtLine(1, (uint8_t*) disp);
    char disp1[50];
    sprintf(disp1, "%d%%", ADC3ConvertedValue[1]);
    BSP_LCD_DisplayStringAtLine(2, (uint8_t*) disp1);
}

can anyone help me with reading this out. I don't want to use the DMA because it conflicts with the LCD.

Bence Kaulics
  • 7,066
  • 7
  • 33
  • 63
vera
  • 21
  • 3

0 Answers0