Skip to main content
ABIZO.1
Associate II
November 22, 2022
Question

Multi-channel on STM32F429DISCO not working

  • November 22, 2022
  • 2 replies
  • 773 views

Hello,

I use a STM32F429DISCO REVE01 with a MCU STM32F429ZI.

I have to use the ADC. On PA0, I connect a sensor with an amplifier and it's work, but when I want tu use ither channel like channel 1 with PA1 pin, that's not work, my value is around 0.

Why I have this error and how to fix it ?

Thank you for all

This topic has been closed for replies.

2 replies

Tesla DeLorean
Guru
November 22, 2022

Are you sure the pin is free to use? Very few pins on that board.

Show the code, especially all related to initialization of pins and ADC

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
ABIZO.1
ABIZO.1Author
Associate II
November 22, 2022

On CubeMX the pin is free.

static void MX_ADC1_Init(void)
{
 
 /* USER CODE BEGIN ADC1_Init 0 */
 
 /* USER CODE END ADC1_Init 0 */
 
 ADC_ChannelConfTypeDef sConfig = {0};
 
 /* USER CODE BEGIN ADC1_Init 1 */
 
 /* USER CODE END ADC1_Init 1 */
 
 /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
 */
 hadc1.Instance = ADC1;
 hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
 hadc1.Init.Resolution = ADC_RESOLUTION_12B;
 hadc1.Init.ScanConvMode = ENABLE;
 hadc1.Init.ContinuousConvMode = DISABLE;
 hadc1.Init.DiscontinuousConvMode = DISABLE;
 hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
 hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
 hadc1.Init.NbrOfConversion = 2;
 hadc1.Init.DMAContinuousRequests = DISABLE;
 hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
 if (HAL_ADC_Init(&hadc1) != HAL_OK)
 {
 Error_Handler();
 }
 
 /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
 */
 sConfig.Channel = ADC_CHANNEL_0;
 sConfig.Rank = 1;
 sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
 if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
 
 /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
 */
 sConfig.Channel = ADC_CHANNEL_1;
 sConfig.Rank = 2;
 if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
 {
 Error_Handler();
 }
}

And this is when I start the ADC : (My project is combine with a Touchgfx project)

void Model::tick()
{
	tickcounter++;
 
	if(tickcounter % 63 == 0)
	{
		HAL_ADC_Start(&hadc1);
		HAL_ADC_Start_DMA(&hadc1, ADC_Val, 2);
 
		modelListener->updateTempGraph();
	}
}

Regards