Skip to main content
Dick Lin
Senior
August 28, 2018
Solved

STM32L4 ADC1_IN2 and ADC1_IN15

  • August 28, 2018
  • 1 reply
  • 861 views

Hi,

I am having issue reading ADC1_IN2/IN15. The value return from HAL_ADC_GetValue(0 is either 0 or close to 0. Others seems fine. I do use exactly same function to read. The results are list below as iSense last 2 value 0 0.

Is there anything specific to those to channels?

Thx

PC1   ------> ADC1_IN2

PB0   ------> ADC1_IN15

vSense 97 92 89 97 111 97

iSense 2357 2417 2312 2370 0 0

void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{
 GPIO_InitTypeDef GPIO_InitStruct;
 if(adcHandle->Instance==ADC1)
 {
 /* ADC1 clock enable */
 HAL_RCC_ADC_CLK_ENABLED++;
 if(HAL_RCC_ADC_CLK_ENABLED==1){
 __HAL_RCC_ADC_CLK_ENABLE();
 }
 
 /**ADC1 GPIO Configuration 
 PC0 ------> ADC1_IN1
 PC1 ------> ADC1_IN2
 PC2 ------> ADC1_IN3
 PC3 ------> ADC1_IN4
 PC4 ------> ADC1_IN13
 PA0 ------> ADC1_IN5
 PA1 ------> ADC1_IN6
 PA2 ------> ADC1_IN7
 PA3 ------> ADC1_IN8
 PA4 ------> ADC1_IN9
 PA5 ------> ADC1_IN10
 *** ------> ADC1_IN11
 PA7 ------> ADC1_IN12
 *** ------> ADC1_IN14
 PB0 ------> ADC1_IN15
 PB1 ------> ADC1_IN16 
 */
 
 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;
 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 
 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7;
 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 }
}
 
bool stm32_adc::get_adc_data(uint32_t channel, uint32_t *adc_data)
{
	/* Variable used to get converted value */
	__IO uint16_t uhADCxConvertedValue = 0;
	ADC_ChannelConfTypeDef sConfig;
 
	/*##-2- Configure ADC regular channel ######################################*/
	sConfig.Channel = channel; /* Sampled channel number */
	sConfig.Rank = ADC_REGULAR_RANK_1; /* Rank of sampled channel number ADCx_CHANNEL */
	sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5; /* Sampling time (number of clock cycles unit) */
	sConfig.SingleDiff = ADC_SINGLE_ENDED; /* Single-ended input channel */
	sConfig.OffsetNumber = ADC_OFFSET_NONE; /* No offset subtraction */
	sConfig.Offset = 0; /* Parameter discarded because offset correction is disabled */
 
	if (HAL_ADC_ConfigChannel(m_adc, &sConfig) != HAL_OK)
	{
 return false;
	}
 
	// Run the ADC calibration in single-ended mode
	if (HAL_ADCEx_Calibration_Start(m_adc, ADC_SINGLE_ENDED) != HAL_OK)
	{
 return false;
	}
 
	/*##-3- Start the conversion process #######################################*/
	if (HAL_ADC_Start(m_adc) != HAL_OK)
	{
 return false;
	}
 
	/*##-4- Wait for the end of conversion #####################################*/
	/* For simplicity reasons, this example is just waiting till the end of the
 conversion, but application may perform other tasks while conversion
 operation is ongoing. */
	if (HAL_ADC_PollForConversion(m_adc, 10) != HAL_OK)
	{
 return false;
	}
	else
	{
 
 /* ADC conversion completed */
 /*##-5- Get the converted value of regular channel ########################*/
 uhADCxConvertedValue = HAL_ADC_GetValue(m_adc);
	}
 
 	*adc_data = uhADCxConvertedValue;
	return true;
}

This topic has been closed for replies.
Best answer by Dick Lin

Got it now, one of the ADG708 chip (input to ADC channel) on our board is not powered. Thx

1 reply

Dick Lin
Dick LinAuthorBest answer
Senior
August 29, 2018

Got it now, one of the ADG708 chip (input to ADC channel) on our board is not powered. Thx