野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16387|回复: 2

ADC多路采集求组

[复制链接]
发表于 2015-7-26 16:13:31 | 显示全部楼层 |阅读模式
利用ADC做多路采集,出来其他两路是对的,有一路出来总是为0,不知道怎么回事,烦请大家帮忙解决一下问题
  1. /**
  2.   ******************************************************************************
  3.   * @file    main.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @date    2013-xx-xx
  7.   * @brief   adc1 2é¼ˉêμÑé
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * êμÑéƽì¨:ò°»e iSO STM32 ¿a·¢°å
  12.   * ÂÛì3    :http://www.firebbs.cn
  13.   * ìÔ±|    :http://firestm32.taobao.com
  14.   *
  15.   ******************************************************************************
  16.   */

  17. //time : pc1-1 0      1us
  18. //       pc1-2 0 0.5us    1.5us
  19. //                         pc1-3 0 0.5us 0.8us

  20. #include "stm32f10x.h"
  21. #include "bsp_usart1.h"
  22. #include "bsp_adc.h"

  23. // ADC1×a»»μÄμçÑ1Öμí¨1yMDA·½ê½′«μ½SRAM
  24. extern __IO uint16_t ADC_ConvertedValue[3];

  25. // ¾Ö2¿±äá¿£¬óÃóú±£′æ×a»»¼ÆËãoóμÄμçÑ1Öμ          
  26. float ADC_ConvertedValueLocal[3];        

  27. // èí¼tÑóê±
  28. void Delay(__IO uint32_t nCount)
  29. {
  30.   for(; nCount != 0; nCount--);
  31. }

  32. /**
  33.   * @brief  Ö÷oˉêy
  34.   * @param  ÎT
  35.   * @retval ÎT
  36.   */
  37. int main(void)
  38. {       
  39.         uint8_t i;
  40.         /* USART1 config */
  41.         USART1_Config();
  42.        
  43.         /* enable adc1 and config adc1 to dma mode */
  44.         ADC1_Init();
  45.        
  46.         printf("\r\n ----ÕaêÇò»¸öADCêμÑé(DMA′«êä)----\r\n");
  47.        
  48.         while (1)
  49.         {
  50.                 for(i=3;i>0;i--)
  51.                 {
  52.                         ADC_ConvertedValueLocal[i] =(float) ADC_ConvertedValue[i]/4096*3.3; // ¶áè¡×a»»μÄADÖμ
  53.        
  54.                         printf("\r\n The current AD value = 0x%04X \r\n", ADC_ConvertedValue[i]);
  55.                         printf("\r\n The current AD value = %f V \r\n",ADC_ConvertedValueLocal[i]);
  56.                         Delay(0xffffee);
  57.                 }                       
  58.         }
  59. }
  60. /*********************************************END OF FILE**********************/


  61. /**
  62.   ******************************************************************************
  63.   * @file    bsp_usart1.c
  64.   * @author  fire
  65.   * @version V1.0
  66.   * @date    2013-xx-xx
  67.   * @brief   ÖØÏÖc¿aprintfoˉêyμ½usart¶Ë¿ú
  68.   ******************************************************************************
  69.   * @attention
  70.   *
  71.   * êμÑéƽì¨:ò°»e iSO STM32 ¿a·¢°å
  72.   * ÂÛì3    :http://www.firebbs.cn
  73.   * ìÔ±|    :http://firestm32.taobao.com
  74.   *
  75.   ******************************************************************************
  76.   */
  77.   
  78. #include "bsp_usart1.h"

  79. /**
  80.   * @brief  USART1 GPIO ÅäÖÃ,1¤×÷Ä£ê½ÅäÖá£115200 8-N-1
  81.   * @param  ÎT
  82.   * @retval ÎT
  83.   */
  84. void USART1_Config(void)
  85. {
  86.                 GPIO_InitTypeDef GPIO_InitStructure;
  87.                 USART_InitTypeDef USART_InitStructure;
  88.                
  89.                 /* config USART1 clock */
  90.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
  91.                
  92.                 /* USART1 GPIO config */
  93.                 /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  94.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  95.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  96.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  97.                 GPIO_Init(GPIOA, &GPIO_InitStructure);   
  98.                 /* Configure USART1 Rx (PA.10) as input floating */
  99.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  100.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  101.                 GPIO_Init(GPIOA, &GPIO_InitStructure);
  102.                        
  103.                 /* USART1 mode config */
  104.                 USART_InitStructure.USART_BaudRate = 115200;
  105.                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  106.                 USART_InitStructure.USART_StopBits = USART_StopBits_1;
  107.                 USART_InitStructure.USART_Parity = USART_Parity_No ;
  108.                 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  109.                 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  110.                 USART_Init(USART1, &USART_InitStructure);
  111.                 USART_Cmd(USART1, ENABLE);
  112. }

  113. ///Öض¨Ïòc¿aoˉêyprintfμ½USART1
  114. int fputc(int ch, FILE *f)
  115. {
  116.                 /* ·¢Ëíò»¸ö×Ö½úêy¾Yμ½USART1 */
  117.                 USART_SendData(USART1, (uint8_t) ch);
  118.                
  119.                 /* μè′y·¢Ëííê±Ï */
  120.                 while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);               
  121.        
  122.                 return (ch);
  123. }

  124. ///Öض¨Ïòc¿aoˉêyscanfμ½USART1
  125. int fgetc(FILE *f)
  126. {
  127.                 /* μè′y′®¿ú1êäèëêy¾Y */
  128.                 while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

  129.                 return (int)USART_ReceiveData(USART1);
  130. }
  131. /*********************************************END OF FILE**********************/


  132. /**
  133.   ******************************************************************************
  134.   * @file    bsp_xxx.c
  135.   * @author  fire
  136.   * @version V1.0
  137.   * @date    2013-xx-xx
  138.   * @brief   adc1 ó|óÃbsp / DMA Ä£ê½
  139.   ******************************************************************************
  140.   * @attention
  141.   *
  142.   * êμÑéƽì¨:ò°»e iSO STM32 ¿a·¢°å
  143.   * ÂÛì3    :http://www.firebbs.cn
  144.   * ìÔ±|    :http://firestm32.taobao.com
  145.   *
  146.   ******************************************************************************
  147.   */
  148.   
  149. #include "bsp_adc.h"

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

  151. __IO uint16_t ADC_ConvertedValue[3];
  152. //__IO u16 ADC_ConvertedValueLocal;

  153. /**
  154.   * @brief  ê1ÄüADC1oíDMA1μÄê±Öó£¬3õê¼»ˉPC.01
  155.   * @param  ÎT
  156.   * @retval ÎT
  157.   */
  158. static void ADC1_GPIO_Config(void)
  159. {
  160.         GPIO_InitTypeDef GPIO_InitStructure;
  161.        
  162.         /* Enable DMA clock */
  163.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  164.        
  165.         /* Enable ADC1 and GPIOC clock */
  166.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
  167.        
  168.         /* Configure PC.01  as analog input */
  169.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
  170.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  171.         GPIO_Init(GPIOC, &GPIO_InitStructure);                                // PC1,êäèëê±2»óÃéèÖÃËùÂê
  172. }

  173. /**
  174.   * @brief  ÅäÖÃADC1μÄ1¤×÷Ä£ê½ÎaMDAÄ£ê½
  175.   * @param  ÎT
  176.   * @retval ÎT
  177.   */
  178. static void ADC1_Mode_Config(void)
  179. {
  180.         DMA_InitTypeDef DMA_InitStructure;
  181.         ADC_InitTypeDef ADC_InitStructure;
  182.        
  183.         /* DMA channel1 configuration */
  184.         DMA_DeInit(DMA1_Channel1);
  185.        
  186.         DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;                                 //ADCμØÖ·
  187.         DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;        //Äú′æμØÖ·
  188.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  189.         DMA_InitStructure.DMA_BufferSize = 3;
  190.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;        //íaéèμØÖ·1춨
  191.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                  //Äú′æμØÖ·1춨
  192.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //°ë×Ö
  193.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  194.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                //Ñ-»·′«êä
  195.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  196.         DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  197.         DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  198.        
  199.         /* Enable DMA channel1 */
  200.         DMA_Cmd(DMA1_Channel1, ENABLE);
  201.        
  202.         /* ADC1 configuration */       
  203.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                        //¶àá¢ADCÄ£ê½
  204.         ADC_InitStructure.ADC_ScanConvMode = ENABLE ;                                          //½ûÖ1é¨Ãèģ꽣¬é¨ÃèÄ£ê½óÃóú¶àí¨μà2é¼ˉ
  205.         ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                        //¿aÆôá¬Dø×a»»Ä£ê½£¬¼′2»í£μؽøDDADC×a»»
  206.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //2»ê1óÃía2¿′¥·¢×a»»
  207.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;         //2é¼ˉêy¾Yóò¶ÔÆë
  208.         ADC_InitStructure.ADC_NbrOfChannel = 3;                                                                         //òa×a»»μÄí¨μàêyÄ¿1
  209.         ADC_Init(ADC1, &ADC_InitStructure);
  210.        
  211.         /*ÅäÖÃADCê±Öó£¬ÎaPCLK2μÄ8·ÖÆ죬¼′9MHz*/
  212.         RCC_ADCCLKConfig(RCC_PCLK2_DiARM);
  213.         /*ÅäÖÃADC1μÄí¨μà11Îa55.        5¸ö2éÑùÖüÆú£¬DòáDÎa1 */
  214.         ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);
  215.         ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_55Cycles5);
  216.         ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3, ADC_SampleTime_55Cycles5);
  217.         /* Enable ADC1 DMA */
  218.         ADC_DMACmd(ADC1, ENABLE);
  219.        
  220.         /* Enable ADC1 */
  221.         ADC_Cmd(ADC1, ENABLE);
  222.        
  223.         /*¸′λD£×¼¼Ä′æÆ÷ */   
  224.         ADC_ResetCalibration(ADC1);
  225.         /*μè′yD£×¼¼Ä′æÆ÷¸′λíê3é */
  226.         while(ADC_GetResetCalibrationStatus(ADC1));
  227.        
  228.         /* ADCD£×¼ */
  229.         ADC_StartCalibration(ADC1);
  230.         /* μè′yD£×¼íê3é*/
  231.         while(ADC_GetCalibrationStatus(ADC1));
  232.        
  233.         /* óéóúûóD2éóÃía2¿′¥·¢£¬ËùòÔê1óÃèí¼t′¥·¢ADC×a»» */
  234.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  235. }

  236. /**
  237.   * @brief  ADC13õê¼»ˉ
  238.   * @param  ÎT
  239.   * @retval ÎT
  240.   */
  241. void ADC1_Init(void)
  242. {
  243.         ADC1_GPIO_Config();
  244.         ADC1_Mode_Config();
  245. }
  246. /*********************************************END OF FILE**********************/
复制代码


回复

使用道具 举报

发表于 2015-7-27 08:50:19 | 显示全部楼层
你把工程传上来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-27 09:53:41 | 显示全部楼层
fire 发表于 2015-7-27 08:50
你把工程传上来看看

谢谢火哥,问题我已经解决了,数组那里出了问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 03:05 , Processed in 0.050962 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表