cancel
Showing results for 
Search instead for 
Did you mean: 

ADC value is not being read

SIDDHARTH
Associate

Hi all, I am new to stm32cube ide and this is my first project. I am currently working on stm32f103c8. I am taking the input from ADC1 pin PA0 which is connected to a potentiometer. I am controlling LEDs through a potentiometer and a button. The problem I am facing is that the value of the potentiometer is not being read. I have also shared the code below.

/* USER CODE BEGIN 0 */ uint32_t adcVal; /* USER CODE END 0 */ while (1) { //HAL_ADC_Start_IT (&hadc1); if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == 0) { HAL_ADC_Start_IT(&hadc1); if (adcVal > 2048) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET); } else { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET); } HAL_Delay(200); //HAL_ADC_Start_IT (&hadc1); } else { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); } /* USER CODE BEGIN 4 */ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { adcVal = HAL_ADC_GetValue(&hadc1); }
View more

 

The problem I am facing is in the while loop part in the second if and else statement where I have given the commands to toggle respective LEDs. Only the else statement is being used. The value from hadc1 is not being compared.

if (adcVal > 2048) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET); }

This part does not seem to work. can someone please share as to where I am going wrong

2 REPLIES 2
TDK
Super User

Use polling and get the value as in the example here:

https://github.com/STMicroelectronics/STM32CubeF1/blob/e226c47ca625df6a36dedbbc3f588017e4d94a45/Drivers/BSP/STM32F1xx_Nucleo/stm32f1xx_nucleo.c#L819

 

You can use interrupts, but then you need to wait for the operation to complete before using the value. Your current code doesn't wait at all.

 

If you feel a post has answered your question, please click "Accept as Solution".

Hi @TDK I did try as you suggested but the error still persists.

I have also shared the code with the modifications I made as you suggested through the link.

while (1) { HAL_ADC_Start(&hadc1); if (HAL_ADC_PollForConversion(&hadc1,10) != HAL_TIMEOUT) { adc_val = HAL_ADC_GetValue(&hadc1); if ((adc_val>0) && (adc_val <2048)) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET); } else { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET); } return adc_val; } else { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); }