Skip to main content
lclor
Associate III
Oct 1, 2025 6:56 AM UTC
Question

ADC 1 channel with circular DMA of 16 bytes: array [0] stay at '0'

Hello,

I have an issue and until now didn't find the solution :

Using ADC2, one channel IN12, triggered by timer every 100µs, using circular DMA sized of 16 half-words, the array [0] value is always 0, the array's index used by DMA is from 1 to 16, not 0 to 15. See below screen shots :

lclor_0-1759301515100.png 

lclor_1-1759301548256.png

lclor_2-1759301607776.png

code : 

volatile uint16_t _v_Adc2Values [18]; // Define to 18 to see the shift

HAL_ADC_Start_DMA (&hadc2, (uint32_t *) _v_Adc2Values, 16);
HAL_TIM_Base_Start_IT (&htim15);

result :

lclor_3-1759302377277.png

When I starts my software this morning to make the screen shots, the 1st start, I have not the issue, the values comes from 0 to 15 in array. Then I restarted my software several times, and all these tries the array result was shifted like the screen shot.

Thank for your help.

Best regards,

Laurent

 

 

 

 

 

 

This topic has been closed for replies.

6 replies

Ozone
Principal
Oct 1, 2025 7:12 AM UTC

I think the DMA settings are missing in your description.

> Then I restarted my software several times, and all these tries the array result was shifted like the screen shot.

Does "restart" mean a reset without power cycle ?
Perhaps you inadvertendly change the DMA settings somewhere.
I would check and compare the relevant DMA register contents for both cases, i.e. before and after a restart.

lclor
lclorAuthor
Associate III
Oct 1, 2025 7:17 AM UTC

yes restart is without power cycle.

I do again the same test : power off, power on, launch in debug and run, and this time, the array is shifted.

 

Ozone
Principal
Oct 1, 2025 7:40 AM UTC

> ... the array is shifted.

Not exactly. The values have shifted within the array.

Which indicates the DMA target address has changed.