cancel
Showing results for 
Search instead for 
Did you mean: 

What am I missing? ADC again...

jamsoft
Associate II
Posted on April 27, 2013 at 13:07

Hi all,

I've the following problem. I need to measure signal on the PC.00 pin and with the code bellow it doesn't work. :( However, if I change the pin to PC.02 and Channel 12 , everything works fine and I get the proper value for voltage on the PC.02 pin. What am I missing that on PC.00 it doesn't work and od the PC.02 is everything OK? Note, I've created a new project for test and nothing else is using the PC.00 pin. The board in question is STM32F4 Discovery.

Code:

#include ''stm32f4xx.h''

#include ''stm32f4_discovery.h''

#define ADC_CDR_ADDRESS    ((uint32_t)0x40012308)

__IO uint16_t ADCTripleConvertedValueUS0[3];

uint16_t ADC_Val; //Stores the calculated ADC value

double voltage1; //Used to store the actual voltage calculated by ADC for the 1st channel

double voltage2; //Used to store the actual voltage calculated by ADC for the 2nd channel

double voltage3; //Used to store the actual voltage calculated by ADC for the 3rd channel

ADC_InitTypeDef       ADC_InitStructure;

ADC_CommonInitTypeDef ADC_CommonInitStructure;

DMA_InitTypeDef       DMA_InitStructure;

GPIO_InitTypeDef      GPIO_InitStructure;

int main(void)

{

  /* Enable peripheral clocks */

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 |

                         RCC_APB2Periph_ADC3, ENABLE);

  /* Configure ADC Channel 10 pin as analog input */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIO C.00

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;

  GPIO_Init(GPIOC, &GPIO_InitStructure);

    

  /* DMA2 Stream0 channel0 configuration */

  DMA_InitStructure.DMA_Channel = DMA_Channel_0;  

  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CDR_ADDRESS;

  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCTripleConvertedValueUS0;

  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

  DMA_InitStructure.DMA_BufferSize = 3;

  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;

  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;

  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         

  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;

  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;

  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

  DMA_Init(DMA2_Stream0, &DMA_InitStructure);

  /* DMA2_Stream0 enable */

  DMA_Cmd(DMA2_Stream0, ENABLE);

    

/******************************************************************************/

/*  ADCs configuration: triple interleaved with 5cycles delay to reach 6Msps  */

/******************************************************************************/

  /* ADC Common configuration *************************************************/

  ADC_CommonInitStructure.ADC_Mode = ADC_TripleMode_Interl;

  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;

  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_2;  

  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;

  ADC_CommonInit(&ADC_CommonInitStructure);

  /* ADC1 regular channel 10 configuration ************************************/

  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

  ADC_InitStructure.ADC_ScanConvMode = DISABLE;

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

  ADC_InitStructure.ADC_NbrOfConversion = 1;

  ADC_Init(ADC1, &ADC_InitStructure);

  ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_3Cycles); 

 

  /* Enable ADC1 DMA */

  ADC_DMACmd(ADC1, ENABLE);

  /* ADC2 regular channel 10 configuration ************************************/

  ADC_Init(ADC2, &ADC_InitStructure);

 

    /* ADC2 regular channel 10 configuration */

    ADC_RegularChannelConfig(ADC2, ADC_Channel_10, 1, ADC_SampleTime_3Cycles); 

  /* ADC3 regular channel 10 configuration ************************************/

  ADC_Init(ADC3, &ADC_InitStructure);

 

  /* ADC3 regular channel 10 configuration *************************************/

  ADC_RegularChannelConfig(ADC3, ADC_Channel_10, 1, ADC_SampleTime_3Cycles);   

  /* Enable DMA request after last transfer (multi-ADC mode) ******************/

  ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);

  /* Enable ADC1 **************************************************************/

  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC2 **************************************************************/

  ADC_Cmd(ADC2, ENABLE);

  /* Enable ADC3 **************************************************************/

  ADC_Cmd(ADC3, ENABLE);

    

  /* Start ADC1 Software Conversion */

  ADC_SoftwareStartConv(ADC1);

    

    

    //Led Init

    STM_EVAL_LEDInit(LED3);

    STM_EVAL_LEDInit(LED4);

    STM_EVAL_LEDInit(LED5);

    STM_EVAL_LEDInit(LED6);

    

  while (1)

  {

     STM_EVAL_LEDOff(LED3);

     STM_EVAL_LEDOff(LED4);

     STM_EVAL_LEDOff(LED5);

     STM_EVAL_LEDOff(LED6);

     ADC_Val = ADCTripleConvertedValueUS0[0];

     voltage1 = (3.3 * ADC_Val) / 4096;

     ADC_Val = ADCTripleConvertedValueUS0[1];

     voltage2 = (3.3 * ADC_Val) / 4096;

        

     ADC_Val = ADCTripleConvertedValueUS0[1];

     voltage3 = (3.3 * ADC_Val) / 4096;    

        

     voltage1 = (voltage1 + voltage2 + voltage3)/3;    

     if ((voltage1 >= 0) && (voltage1 < 0.2)) {

         STM_EVAL_LEDOn(LED3);

     } else if ((voltage1 >= 0.2) && (voltage1 < 0.4)) {

         STM_EVAL_LEDOn(LED4);

     } else if ((voltage1 >= 0.4) && (voltage1 < 0.5)) {

         STM_EVAL_LEDOn(LED5);

     } else {//voltage1 >= 0.5

         STM_EVAL_LEDOn(LED6);

     }    

         

  }

}

Thank you for your answers.
10 REPLIES 10
Posted on April 27, 2013 at 15:46

DataSize_Word this is 32-bit, not 16-bit. And will damage the array.

PC0 is used on the STM32F4-Discovery for USB/PowerOn. Suggest you read the manual for the board before selecting pins.

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00039084.pdf

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
jamsoft
Associate II
Posted on April 28, 2013 at 18:32

Thank you Clive,

 

what a stupid mistake 🙂 Now it is working.

Still, I don't uderstand well some things in ADC and DMA configuration.

I would like to have 6 channels connected to different voltage sources and to take values from them.

I am not sure if I understand clearly how works the tripple mode.

By my opinion, if I have an array of 18 uint32_t elements then for each channel the 3 values are storred in the tripple mode...so for the channel 0 the values will be placed into array[0], array[1], array[2], for channel 2 it will be array[3], array[4], array[5] and so on.

Am I right?

What about ADC and DMA settings for the tripple mode with 6 channels engaged?

Particularly, is the following settings correct for the above mentioned configuration?

(It was OK for one channel and 3-elements array - all 3 values in the array were filled with right values, but I'm not sure about setting for more channels...)

DMA:

  /* DMA2 Stream0 channel0 configuration */

  DMA_InitStructure.DMA_Channel = DMA_Channel_0;  

  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CDR_ADDRESS; //((uint32_t)0x40012308)

  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&array; //uint32_t array[18]

  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

  DMA_InitStructure.DMA_BufferSize = 18; //6 channels * 3 values

  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;

  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;

  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         

  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;

  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;

  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

  DMA_Init(DMA2_Stream0, &DMA_InitStructure);

  DMA_Cmd(DMA2_Stream0, ENABLE);

ADC:

  /* ADC Common configuration *************************************************/

  ADC_CommonInitStructure.ADC_Mode = ADC_TripleMode_Interl;

  ADC_CommonInitStructure.ADC_TwoSamplingDelay =    ADC_TwoSamplingDelay_5Cycles;

  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_2;  

  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;

  ADC_CommonInit(&ADC_CommonInitStructure);

  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

  ADC_InitStructure.ADC_ScanConvMode = ENABLE;

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

  ADC_InitStructure.ADC_NbrOfConversion = 17; //6 channels = 17 (0, 1, 2...17)

 

    /* ADC1 regular channels 0, 1, 2, 3, 11, 12 configuration ************************************/

    ADC_Init(ADC1, &ADC_InitStructure);

//GPIO pins PA.0 - Channel0, PA.1 - Channel1, PA.2 - Channel2, PA.3 - Channel3, PC.1 - Channel11 and PC.2 - Channel12

    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 5, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 6, ADC_SampleTime_3Cycles);

/* Enable ADC1 DMA */

  ADC_DMACmd(ADC1, ENABLE);

  /* ADC2 regular channels 0,1,2,3,11,12 configuration ************************************/

  ADC_Init(ADC2, &ADC_InitStructure);

 

  ADC_RegularChannelConfig(ADC2, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 2, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 3, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 4, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC2, ADC_Channel_11, 5, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC2, ADC_Channel_12, 6, ADC_SampleTime_3Cycles);

  /* ADC1 regular channels 0,1,2,3,11,12 configuration ************************************/

  ADC_Init(ADC3, &ADC_InitStructure);

 

  ADC_RegularChannelConfig(ADC3, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC3, ADC_Channel_1, 2, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC3, ADC_Channel_2, 3, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC3, ADC_Channel_3, 4, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC3, ADC_Channel_11, 5, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 6, ADC_SampleTime_3Cycles);

    

  /* Enable DMA request after last transfer (multi-ADC mode) ******************/

  ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);

  /* Enable ADC1 **************************************************************/

  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC2 **************************************************************/

  ADC_Cmd(ADC2, ENABLE);

  /* Enable ADC3 **************************************************************/

  ADC_Cmd(ADC3, ENABLE);

And to start conversion...

ADC_SoftwareStartConv(ADC1);

After this configuration, can I read the values from an array and make some average for

values 0 - 2 => voltage one

values 3 - 5  => voltage two

values 6 - 8  => voltage three

values 9 - 11  => voltage four

values 12 - 14  => voltage five

values 15 - 17  => voltage six ?

Thank you in advance for your reply...

Posted on April 28, 2013 at 20:43

ADC_InitStructure.ADC_NbrOfConversion = 6; // You program a list of six channels per ADC

I'm not sure of the usefulness of sampling the same 3 channels, on 3 ADC, and then cycling through 6 others. It would be more efficient to let each ADC do 2 of the 6 channels. Or consider a different scheme.

If you want more accurate results, you'd want to increase the conversion time.
Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
jamsoft
Associate II
Posted on April 28, 2013 at 21:33

The original post was too long to process during our migration. Please click on the provided URL to read the original post. https://st--c.eu10.content.force.com/sfc/dist/version/download/?oid=00Db0000000YtG6&ids=0680X000006I6mu&d=%2Fa%2F0X0000000bvR%2Fm3DtKlRALp.A15bT.ctCFIaS16wJAoy1FOG6hrhILVI&asPdf=false
Posted on April 28, 2013 at 21:44

I understand that, just why dividing the bandwidth amongst 6 channel is useful escapes me.

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
jamsoft
Associate II
Posted on April 28, 2013 at 22:39

Yes, you're right...

I've tried to change the code so that it is as you recommend but no values are stored into the ADCConvertedValues array anymore:-(

Where is the problem?

The code snippet (It is about the same as for the above example except that I've removed the ADC2 and ADC3 parts and changed the ADC mode to Independent):

/* Configure ADC Channels 0, 1, 2, 3, 11, 12 pins as analog inputs */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; //GPIO A, channels 0, 1, 2, 3

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//NOPULL ;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

    

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; //GPIO C, channels 11, 12

  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* DMA2 Stream0 channel0 configuration */

  DMA_InitStructure.DMA_Channel = DMA_Channel_0;  

  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CDR_ADDRESS;

  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValues;

  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

  DMA_InitStructure.DMA_BufferSize = 6;

  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;

  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;

  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         

  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;

  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;

  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

  DMA_Init(DMA2_Stream0, &DMA_InitStructure);

  NVIC_ClearPendingIRQ (DMA2_Stream0_IRQn);

    /* DMA2_Stream0 enable */

  DMA_Cmd(DMA2_Stream0, ENABLE);

  /* ADC Common configuration *************************************************/

  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; //ADC_TripleMode_Interl;

  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;

  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_2;  

  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;

  ADC_CommonInit(&ADC_CommonInitStructure);

  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

  ADC_InitStructure.ADC_ScanConvMode = ENABLE;//DISABLE;

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

  ADC_InitStructure.ADC_NbrOfConversion = 6;

 

    /* ADC1 regular channels 0,1,2,3,11,12 configuration ************************************/

    ADC_Init(ADC1, &ADC_InitStructure);

  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 5, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 6, ADC_SampleTime_3Cycles);

 

  /* Enable ADC1 DMA */

  ADC_DMACmd(ADC1, ENABLE); 

  /* Enable DMA request after last transfer (multi-ADC mode) ******************/

  //ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);

  /* Enable ADC1 **************************************************************/

  ADC_Cmd(ADC1, ENABLE);

 

Posted on April 28, 2013 at 22:54

There may be other issues, but

  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CDR_ADDRESS;

  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValues;

Needs to be

  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;

  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValues[0];

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
jamsoft
Associate II
Posted on April 28, 2013 at 23:16

I've changed it as you say but it is not working :(

Anyway, there is the following defined:

#define ADC_CDR_ADDRESS    ((uint32_t)0x40012308), what stands for the ADC1 base address and everything was working in tripple mode with ADC_CDR_ADDRESS setting...

Also I'Ve tried to add the ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); instead of the original ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE); but no change....The values array is empty... I thing that the problem will lay in the DMA config but I don't know what to change...

jamsoft
Associate II
Posted on April 29, 2013 at 02:54

So, reconnecting the power supply solved the problem of stored values...

But another problem arrised - the array is filled by some values even if the pins are physically disconnected from everything...

What can be the problem? I've already tried to change the GPIO pins frequency to 25MHz but there is no change. Always the array is filled by some strange values...

Everything else is disabled on the board...

The code listing for config ADC1 again:

  /* Configure ADC pins as analog input */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; //GPIO A, channels 0, 1, 2, 3

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_25MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; //GPIO C, channels 11, 12

    GPIO_Init(GPIOC, &GPIO_InitStructure);

// DMA:

         DMA_InitStructure.DMA_Channel = DMA_Channel_0;  

         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;

         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) &ADCConvertedValues[0];

         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

         DMA_InitStructure.DMA_BufferSize = 6;

         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;

         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;

         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

         DMA_InitStructure.DMA_Priority = DMA_Priority_High;

         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;        

         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;

         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;

         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

         DMA_Init(DMA2_Stream0, &DMA_InitStructure);

         DMA_Cmd( DMA2_Stream0, ENABLE);

 

// ADC:

         ADC_DeInit();    

         ADC_CommonInitStructure.ADC_Mode =ADC_Mode_Independent;

         ADC_CommonInitStructure.ADC_Prescaler =ADC_Prescaler_Div2;

         ADC_CommonInitStructure.ADC_DMAAccessMode =ADC_DMAAccessMode_Disabled;

         ADC_CommonInitStructure.ADC_TwoSamplingDelay =ADC_TwoSamplingDelay_5Cycles;

         ADC_CommonInit(&ADC_CommonInitStructure);

         ADC_StructInit(&ADC_InitStructure);

         ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

         ADC_InitStructure.ADC_ScanConvMode = ENABLE;

         ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

         ADC_InitStructure.ADC_NbrOfConversion = 6;

         ADC_Init(ADC1,&ADC_InitStructure);

  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 5, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 6, ADC_SampleTime_3Cycles);

 

  ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);

    

    /* Enable ADC1 DMA */

  ADC_DMACmd(ADC1, ENABLE);

   /* Enable ADC1 **************************************************************/

  ADC_Cmd(ADC1, ENABLE);

Any idea?