PC0/PC1 DMA配置ADC采样值总是不对

2019-07-20 04:03发布

__IO uint16_t ADCDualConvertedValue[2];

void Init_ADC12(void)
{
       
        GPIO_InitTypeDef  GPIO_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  ADC_InitTypeDef       ADC_InitStructure;
        DMA_InitTypeDef DMA_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);                  
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);                       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);                

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;                               
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;               
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;       
  GPIO_Init(GPIOC, &GPIO_InitStructure);                                                                                 
        DMA_InitStructure.DMA_Channel = DMA_Channel_0;                                                                  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;                                                       
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCDualConvertedValue;         
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                                                              
        DMA_InitStructure.DMA_BufferSize = 2;                                                                                                                     
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                                                        
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                                 
        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);             
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;                                                                               
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles;       
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;                
  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 = 2;               
        ADC_Init(ADC1, &ADC_InitStructure);       
  ADC_RegularChannelConfig(ADC1, ADC_Channel_10 , 1, ADC_SampleTime_15Cycles);        //éèÖÃí¨μà1Îaμúò»¸ö×a»»Ë3Dò
        ADC_RegularChannelConfig(ADC1, ADC_Channel_11 , 2, ADC_SampleTime_15Cycles);        //éèÖÃí¨μà2Îaμú¶t¸ö×a»»Ë3Dò
  ADC_DMACmd(ADC1, ENABLE);
       
        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
  ADC_Cmd(ADC1, ENABLE);      
  ADC_SoftwareStartConv(ADC1);                       
}

初始化,如下所示,                TP4Voltage=ADCDualConvertedValue[0]*3.3/4096;TP3Voltage=ADCDualConvertedValue[1]*3.3/4096;获取的电平值不对,哪位指点下看看配置哪里有问题


0条回答

一周热门 更多>