Skip to main content
Visitor II
June 30, 2026

STM32 ADC multi-channel polling issue

  • June 30, 2026
  • 2 replies
  • 33 views

Hi.

I’m working on a custom board with a C551VET6 and trained on a NUCLEO_C562RE with ADC. I attempted the conversion in polling mode in several ways (mode=single + discountinuous=disabled  /  mode=continuous + discountinuous=3ranks) by varying the implementation of the FOR loop (including or excluding the calls to HAL_ADC_REG_StartConv and HAL_ADC_REG_PollForConv according to the selected mode); no matter what I did, as soon as I needed to convert 3 or more channels, only the first two showed distinct values, while all the other channels in the sequencer returned a value identical to that of the second channel.

I found no example using more than 2 channels in a basic regular sequencer. Have you tried it at ST ?

By the way, I’m working with a CTN temperature sensor and two HDC3120 giving both temperature and humidity, thus 5 channels in my case.

Do I need to lower the resolution or something when the number of channel increases ?

I’m not familiar with ST community mechanisms, shall I open a new topic regarding my issue ? If so I will proceed and delete this comment later.

Best regards

2 replies

ST Technical Moderator
July 2, 2026

Hello ​@guillaume_r 

Please refer to the example below that read ADC values from 3 channels:

STM32CubeC5/examples/hal/adc/multi_channels_dma at main · STMicroelectronics/STM32CubeC5

In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question. Saket_Om
Ozone
Principal
July 2, 2026

> Do I need to lower the resolution or something when the number of channel increases ?

No, I think you would need to understand the design around the STM32 ADC peripheral, and ST’s motivation for doing so.

While each ADC has multiple channels (usually >10), each ADC has only only one single result register.
This is not the case with Cortex M devices of other vendors, which often have individual result registers for each individual channel.

This leaves you two options with STM32 ADCs - either use EOC interrupts to catch individual results (and keep track of channels !), or use DMA.

ST’s ADCs were clearly designed for usage with DMA.
The idea is to configure an arbitrary conversion sequence, assign the appropriate DMA channel with matching settings, and you get the correct sampled data in a memory buffer.
You can trigger the ADC sequence from a timer, and have the DMA “Transfer Complete” interrupt notify you when a buffer with results is ready. This is the approach I use most of the time.

Polling works for single conversions, although it is wasteful.
But it is basically impossible to get polling right with conversion sequences in a meaningful context.