测得数据与实际的不相符啊?是不是dma传的数据有问题呢?

2019-03-23 18:55发布

  1. #include "bsp_adc.h"
  2. #include "stm32f10x_dma.h"
  3. #include "stm32f10x_adc.h"

  4. #define ADC1_DR_Address    ((u32)0x40012400+0x4c)

  5. __IO uint16_t ADC_ConvertedValue[2];

  6. float  ADC_ConvertedValueLocal[2];

  7. /**
  8.   * @brief  ê1ÄüADC1oíDMA1μÄê±Öó£¬3õê¼»ˉPC.01 PC.02
  9.   * @param  ÎT
  10.   * @retval ÎT
  11.   */
  12. static void ADC1_GPIO_Config(void)
  13. {
  14.         GPIO_InitTypeDef GPIO_InitStructure;
  15.        
  16.         /* Enable DMA clock */
  17.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  18.        
  19.         /* Enable ADC1 and GPIOC clock */
  20.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
  21.        
  22.         /* Configure PC.01 PC.02  as analog input */
  23.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
  24.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  25.         GPIO_Init(GPIOC, &GPIO_InitStructure);                                // PC1,êäèëê±2»óÃéèÖÃËùÂê
  26. }

  27. /**
  28.   * @brief  ÅäÖÃADC1μÄ1¤×÷Ä£ê½ÎaMDAÄ£ê½
  29.   * @param  ÎT
  30.   * @retval ÎT
  31.   */
  32. static void ADC1_Mode_Config(void)
  33. {
  34.         DMA_InitTypeDef DMA_InitStructure;
  35.         ADC_InitTypeDef ADC_InitStructure;
  36.        
  37.         /* DMA channel1 configuration */
  38.         DMA_DeInit(DMA1_Channel1);
  39.        
  40.         DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;                                 //ADCμØÖ·
  41.         DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;        //Äú′æμØÖ·
  42.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;                 //dma′«êä·½Ïò
  43.         DMA_InitStructure.DMA_BufferSize = 2;                      //DMA»o3åÇøμÄ3¤¶è word
  44.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;        //íaéèμØÖ·1춨
  45.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                  //Äú′æμØÖ·1춨
  46.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //°ë×Ö
  47.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  48.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                //Ñ-»·′«êä
  49.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  50.         DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  51.         DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  52.        
  53.         /* Enable DMA channel1 */
  54.         DMA_Cmd(DMA1_Channel1, ENABLE);
  55.        
  56.         /* ADC1 configuration */       
  57.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                        //¶àá¢ADCÄ£ê½
  58.         ADC_InitStructure.ADC_ScanConvMode =  ENABLE ;                                          //½ûÖ1é¨Ãèģ꽣¬é¨ÃèÄ£ê½óÃóú¶àí¨μà2é¼ˉ
  59.         ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                        //¿aÆôá¬Dø×a»»Ä£ê½£¬¼′2»í£μؽøDDADC×a»»
  60.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;         //2»ê1óÃía2¿′¥·¢×a»»
  61.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;         //2é¼ˉêy¾Yóò¶ÔÆë
  62.         ADC_InitStructure.ADC_NbrOfChannel = 2;                                                                         //òa×a»»μÄí¨μàêyÄ¿2
  63.         ADC_Init(ADC1, &ADC_InitStructure);
  64.        
  65.         /*ÅäÖÃADCê±Öó£¬ÎaPCLK2μÄ8·ÖÆ죬¼′9MHz*/
  66.         RCC_ADCCLKConfig(RCC_PCLK2_Div8);
  67.         /*ÅäÖÃADC1μÄí¨μà11Îa55.        5¸ö2éÑùÖüÆú£¬DòáDÎa1 */
  68.         ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_55Cycles5);
  69.         /*ÅäÖÃADC1μÄí¨μà12Îa55.        5¸ö2éÑùÖüÆú£¬DòáDÎa2 */
  70.         ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 2, ADC_SampleTime_55Cycles5);
  71.        
  72.         /* Enable ADC1 DMA */
  73.         ADC_DMACmd(ADC1, ENABLE);
  74.        
  75.         /* Enable ADC1 */
  76.         ADC_Cmd(ADC1, ENABLE);
  77.        
  78.         /*¸′λD£×¼¼Ä′æÆ÷ */   
  79.         ADC_ResetCalibration(ADC1);
  80.         /*μè′yD£×¼¼Ä′æÆ÷¸′λíê3é */
  81.         while(ADC_GetResetCalibrationStatus(ADC1));
  82.        
  83.         /* ADCD£×¼ */
  84.         ADC_StartCalibration(ADC1);
  85.         /* μè′yD£×¼íê3é*/
  86.         while(ADC_GetCalibrationStatus(ADC1));
  87.        
  88.         /* óéóúûóD2éóÃía2¿′¥·¢£¬ËùòÔê1óÃèí¼t′¥·¢ADC×a»» */
  89.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  90. }

  91. /**
  92.   * @brief  ADC13õê¼»ˉ
  93.   * @param  ÎT
  94.   * @retval ÎT
  95.   */
  96. void ADC1_Init(void)
  97. {
  98.         ADC1_GPIO_Config();
  99.         ADC1_Mode_Config();
  100. }

  101. void filter (void)
  102. {
  103.   int i = 0;

  104.   for(i = 0;i < 2;i++)
  105.   {
  106.           ADC_ConvertedValueLocal[i] = ADC_ConvertedValue[i]*3.3/4096 ;
  107.   }
  108. }
复制代码 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。