Skip to main content
Linda
Associate III
January 9, 2015
Question

2 ADC conflict in SMT32F429-iDisco

  • January 9, 2015
  • 6 replies
  • 887 views
Posted on January 09, 2015 at 05:55

The original post was too long to process during our migration. Please click on the attachment to read the original post.
    This topic has been closed for replies.

    6 replies

    Tesla DeLorean
    Guru
    January 9, 2015
    Posted on January 09, 2015 at 13:07

    Here are the config of ADC3 and ADC2, would you please tell me where I do wrong?

    Wrong DMA Stream/Channel, review RM0090
    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    Linda
    LindaAuthor
    Associate III
    January 11, 2015
    Posted on January 11, 2015 at 15:27

    Dear Sir:

    I Change ADC2 to ACD1, and change DMA Stream/Channel to : DMA2 Stream4 channel5. Please check the code for ADC1 below, code of ADC3 is still the same at before.

    Now ADC3 is working preperly, but ADC1 doesn't work at all.

    ~~~~~~~~

    static void ADC1_CH5_DMA_Config(void)

    {

      ADC_InitTypeDef       ADC_InitStructure;

      ADC_CommonInitTypeDef ADC_CommonInitStructure;

      DMA_InitTypeDef       DMA_InitStructure;

      GPIO_InitTypeDef      GPIO_InitStructure;

      /* Enable ADC1, DMA2 and GPIO clocks ****************************************/

      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

      /* DMA2 Stream4 channel5 configuration **************************************/

      DMA_InitStructure.DMA_Channel = DMA_Channel_5;  

      DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;

      DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&uhADC1ConvertedValueC;

      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

      DMA_InitStructure.DMA_BufferSize = 1;

      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;

      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

      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_Stream4, &DMA_InitStructure);

      DMA_Cmd(DMA2_Stream4, ENABLE);

      /* Configure ADC1 Channel5 pin as analog input ******************************/

      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

      GPIO_Init(GPIOA, &GPIO_InitStructure);

      /* ADC Common Init **********************************************************/

      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);

      /* ADC1 Init ****************************************************************/

      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_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;    

      ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

      ADC_InitStructure.ADC_NbrOfConversion = 1;

      ADC_Init(ADC1, &ADC_InitStructure);

      /* ADC1 regular channel1 configuration *************************************/

      ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_480Cycles);

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

      ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);

      /* Enable ADC1 DMA */

      ADC_DMACmd(ADC1, ENABLE);

      /* Enable ADC1 */

      ADC_Cmd(ADC1, ENABLE);

    }

    Tesla DeLorean
    Guru
    January 11, 2015
    Posted on January 11, 2015 at 17:09

    I Change ADC2 to ACD1, and change DMA Stream/Channel to : DMA2 Stream4 channel5. Please check the code for ADC1 below, code of ADC3 is still the same at before. Now ADC3 is working preperly, but ADC1 doesn't work at all.

    It's like the documentation doesn't apply to you?

    ADC1 would use DMA2 Stream4 Channel0, or DMA2 Stream0 Channel0

    The Common ADC stuff only needs to be done once.
    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    Linda
    LindaAuthor
    Associate III
    January 12, 2015
    Posted on January 13, 2015 at 00:29

    Dear Sir,

    I changed it to chanel0, ADC1 still doesn't work. Now I combine them together, the problem remain the same:

      #define ADC3_DR_ADDRESS     ((uint32_t)0x4001224C)

      #define ADC1_DR_ADDRESS     ((uint32_t)0x40012000)

    __IO uint16_t uhADC3ConvertedValue = 0;

    __IO uint32_t uwADC3ConvertedVoltage = 0;

    __IO uint16_t uhADC1ConvertedValueC = 0;

    __IO uint32_t uwADC1ConvertedVoltageC = 0;

    static void ADC3_CH13_DMA_Config(void)

    {

      ADC_InitTypeDef       ADC_InitStructure;

      ADC_CommonInitTypeDef ADC_CommonInitStructure;

      DMA_InitTypeDef       DMA_InitStructure;

      GPIO_InitTypeDef      GPIO_InitStructure;

      /* Enable ADC3, DMA2 and GPIO clocks ****************************************/

      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);

      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA, ENABLE);

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

      /* DMA2 Stream0 channel2 configuration **************************************/

      DMA_InitStructure.DMA_Channel = DMA_Channel_2;  

      DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_ADDRESS;

      DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&uhADC3ConvertedValue;

      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

      DMA_InitStructure.DMA_BufferSize = 1;

      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;

      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

      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);

        

        DMA_InitStructure.DMA_Channel = DMA_Channel_0;  

      DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_ADDRESS;

      DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&uhADC3ConvertedValue;

      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

      DMA_InitStructure.DMA_BufferSize = 1;

      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;

      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

      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_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;

      DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&uhADC1ConvertedValueC;

      DMA_Init(DMA2_Stream4, &DMA_InitStructure);

      DMA_Cmd(DMA2_Stream4, ENABLE);

      /* Configure ADC3 Channel13 pin as analog input ******************************/

      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

      GPIO_Init(GPIOC, &GPIO_InitStructure);

        

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

      GPIO_Init(GPIOA, &GPIO_InitStructure);

      /* ADC Common Init **********************************************************/

      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);

      /* ADC3 Init ****************************************************************/

      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_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;    

      ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

      ADC_InitStructure.ADC_NbrOfConversion = 1;

      ADC_Init(ADC3, &ADC_InitStructure);

        

      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_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;    

      ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

      ADC_InitStructure.ADC_NbrOfConversion = 1;

        ADC_Init(ADC1, &ADC_InitStructure);

      /* ADC3 regular channel13 configuration *************************************/

      ADC_RegularChannelConfig(ADC3, ADC_Channel_13, 1, ADC_SampleTime_480Cycles);

      ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_480Cycles); //??

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

      ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);

        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);

      /* Enable ADC3 DMA */

      ADC_DMACmd(ADC3, ENABLE);

      ADC_DMACmd(ADC1, ENABLE);

      /* Enable ADC3 */

      ADC_Cmd(ADC3, ENABLE);

      ADC_Cmd(ADC1, ENABLE);

    }

    Tesla DeLorean
    Guru
    January 13, 2015
    Posted on January 13, 2015 at 02:43

    //******************************************************************************
    __IO uint16_t uhADC3ConvertedValue = 0;
    __IO uint16_t uhADC1ConvertedValue = 0;
    static void ADC3_CH13_DMA_Config(void)
    {
    ADC_InitTypeDef ADC_InitStructure;
    ADC_CommonInitTypeDef ADC_CommonInitStructure;
    DMA_InitTypeDef DMA_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
    /* Enable ADC3, DMA2 and GPIO clocks ****************************************/
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC3, ENABLE);
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    DMA_InitStructure.DMA_BufferSize = 1;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    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;
    // ADC3 DMA2 Stream 0 Channel 2
    DMA_InitStructure.DMA_Channel = DMA_Channel_2; 
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC3->DR;
    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&uhADC3ConvertedValue;
    DMA_Init(DMA2_Stream0, &DMA_InitStructure);
    DMA_Cmd(DMA2_Stream0, ENABLE);
    // ADC1 DMA2 Stream 4 Channel 0
    DMA_InitStructure.DMA_Channel = DMA_Channel_0; 
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;
    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&uhADC1ConvertedValue;
    DMA_Init(DMA2_Stream4, &DMA_InitStructure);
    DMA_Cmd(DMA2_Stream4, ENABLE);
    /* Configure ADC3 Channel13 pin as analog input ******************************/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; // PC3 ADC123_IN13
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    /* ADC Common Init **********************************************************/
    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);
    /* ADC3 Init ****************************************************************/
    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_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; 
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfConversion = 1;
    ADC_Init(ADC3, &ADC_InitStructure);
    /* ADC1 Init ****************************************************************/
    ADC_Init(ADC1, &ADC_InitStructure);
    /* ADC3 regular channel13 configuration *************************************/
    ADC_RegularChannelConfig(ADC3, ADC_Channel_13, 1, ADC_SampleTime_480Cycles);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_480Cycles);
    /* Enable DMA request after last transfer (Single-ADC mode) */
    ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);
    ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
    /* Enable ADC3 & ADC1 DMA */
    ADC_DMACmd(ADC3, ENABLE);
    ADC_DMACmd(ADC1, ENABLE);
    /* Enable ADC3 & ADC1 */
    ADC_Cmd(ADC3, ENABLE);
    ADC_Cmd(ADC1, ENABLE);
    /* Start ADC3 and ADC1 Software Conversion */
    ADC_SoftwareStartConv(ADC3);
    ADC_SoftwareStartConv(ADC1);
    }
    //******************************************************************************

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    raptorhal2
    Lead
    January 13, 2015
    Posted on January 13, 2015 at 03:07

    Ms Li:

    Read RM0090, Section 13.9.2 Note.