How to get data from ADC with STM32F7
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 dont 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 dont want to use the dma because it conflicts with the lcd. Thank you.
#stm32 #stm32f7 #adc