野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11709|回复: 16

刚出炉的- adc 采集的问题

[复制链接]
发表于 2016-8-2 13:19:27 | 显示全部楼层 |阅读模式
新诞生的 一周的小白一枚 先上图
关于ADC 多通道采集
C:\迷你\adc.jpg[img]
C:\迷你\adc2.jpg
C:\迷你\IMG_20160802_130936(1).jpg[/img]
1: 这个是 ADC1 OR ADC2 OR ADC3 io 口采集的数据
2:多通道 采集为什么 2-4 结果差距那么大
3:为什么0 端口是3.3
4:拔掉跳线帽 只对通道1结果产生影响
5:主板的原理图上 为什么找不到ADC1 ADC2 ADC3 的标识
板子是野火-mini  CPU STM32F103VET6
谢谢 回答
回复

使用道具 举报

 楼主| 发表于 2016-8-2 13:19:59 | 显示全部楼层
本帖最后由 daoyu 于 2016-8-2 13:22 编辑

C:\迷你\IMG_20160802_130936(1).jpg
adc2.jpg
IMG_20160802_130936(1).jpg
adc.jpg
IMG_20160802_130936(1).jpg
adc2.jpg
adc.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-2 13:27:42 | 显示全部楼层
int main(void)
{               
        // ÅäÖô®¿Ú
        USARTx_Config();
       
        // ADC ³õʼ»¯
        ADCx_Init();
       
        printf("\r\n ----ÕâÊÇÒ»¸öADC¶àͨµÀ²É¼¯ÊµÑé----\r\n");
       
        while (1)
        {       
   
                        ADC_ConvertedValueLocal[0] =(float) ADC_ConvertedValue[0]/4096*3.3;
                        ADC_ConvertedValueLocal[1] =(float) ADC_ConvertedValue[1]/4096*3.3;
                        ADC_ConvertedValueLocal[2] =(float) ADC_ConvertedValue[2]/4096*3.3;
                        ADC_ConvertedValueLocal[3] =(float) ADC_ConvertedValue[3]/4096*3.3;
                        ADC_ConvertedValueLocal[4] =(float) ADC_ConvertedValue[4]/4096*3.3;
                        ADC_ConvertedValueLocal[5] =(float) ADC_ConvertedValue[5]/4096*3.3;
               
                        printf("\r\n CH0 value = %f V \r\n",ADC_ConvertedValueLocal[0]);
                        printf("\r\n CH1 value = %f V \r\n",ADC_ConvertedValueLocal[1]);
                        printf("\r\n CH2 value = %f V \r\n",ADC_ConvertedValueLocal[2]);
                        printf("\r\n CH3 value = %f V \r\n",ADC_ConvertedValueLocal[3]);
                        printf("\r\n CH4 value = %f V \r\n",ADC_ConvertedValueLocal[4]);
                        printf("\r\n CH5 value = %f V \r\n",ADC_ConvertedValueLocal[5]);
               
                        printf("\r\n\r\n");
                        Delay(0xffffee);
                 
        }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-2 13:28:31 | 显示全部楼层
#include "bsp_adc.h"

__IO uint16_t ADC_ConvertedValue[macNOFCHANEL]={0,0,0,0};

/**
  * @brief  ADC GPIO ³õʼ»¯
  * @param  ÎÞ
  * @retval ÎÞ
  */
static void ADCx_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        // ´ò¿ª ADC IO¶Ë¿ÚʱÖÓ
        macADC_GPIO_APBxClock_FUN ( macADC_GPIO_CLK, ENABLE );
       
        // ÅäÖà ADC IO Òý½Åģʽ
        // ADC 3¸öͨµÀ
        GPIO_InitStructure.GPIO_Pin = macADC_PIN1;
        GPIO_InitStructure.GPIO_Pin = macADC_PIN2;
        GPIO_InitStructure.GPIO_Pin = macADC_PIN3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
       
        // ³õʼ»¯ ADC IO
        GPIO_Init(macADC_PORT, &GPIO_InitStructure);                               
}

/**
  * @brief  ÅäÖÃADC¹¤×÷ģʽ
  * @param  ÎÞ
  * @retval ÎÞ
  */
static void ADCx_Mode_Config(void)
{
        DMA_InitTypeDef DMA_InitStructure;
        ADC_InitTypeDef ADC_InitStructure;
       
        // ´ò¿ªDMAʱÖÓ
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
        // ´ò¿ªADCʱÖÓ
        macADC_APBxClock_FUN ( macADC_CLK, ENABLE );
       
        // ¸´Î»DMA¿ØÖÆÆ÷
        DMA_DeInit(macADC_DMA_CHANNEL);
       
        // ÅäÖà DMA ³õʼ»¯½á¹¹Ìå
        // ÍâÉè»ùַΪ£ºADC Êý¾Ý¼Ä´æÆ÷µØÖ·
        DMA_InitStructure.DMA_PeripheralBaseAddr = ( u32 ) ( & ( macADCx->DR ) );
       
        // ´æ´¢Æ÷µØÖ·
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_ConvertedValue;
       
        // Êý¾ÝÔ´À´×ÔÍâÉè
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
       
        // »º³åÇø´óС£¬Ó¦¸ÃµÈÓÚÊý¾ÝÄ¿µÄµØµÄ´óС
        DMA_InitStructure.DMA_BufferSize = macNOFCHANEL;
       
        // ÍâÉè¼Ä´æÆ÷Ö»ÓÐÒ»¸ö£¬µØÖ·²»ÓõÝÔö
        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 ´«ÊäͨµÀÓÅÏȼ¶Îª¸ß£¬µ±Ê¹ÓÃÒ»¸öDMAͨµÀʱ£¬ÓÅÏȼ¶ÉèÖò»Ó°Ïì
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;
       
        // ½ûÖ¹´æ´¢Æ÷µ½´æ´¢Æ÷ģʽ£¬ÒòΪÊÇ´ÓÍâÉèµ½´æ´¢Æ÷
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
       
        // ³õʼ»¯DMA
        DMA_Init(macADC_DMA_CHANNEL, &DMA_InitStructure);
       
        // ʹÄÜ DMA ͨµÀ
        DMA_Cmd(macADC_DMA_CHANNEL , ENABLE);
       
        // ADC ģʽÅäÖÃ
        // ֻʹÓÃÒ»¸öADC£¬ÊôÓÚµ¥Ä£Ê½
        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
       
        // ɨÃèģʽ
        ADC_InitStructure.ADC_ScanConvMode = ENABLE ;

        // Á¬Ðøת»»Ä£Ê½
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

        // ²»ÓÃÍⲿ´¥·¢×ª»»£¬Èí¼þ¿ªÆô¼´¿É
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

        // ת»»½á¹ûÓÒ¶ÔÆë
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
       
        // ת»»Í¨µÀ¸öÊý
        ADC_InitStructure.ADC_NbrOfChannel = macNOFCHANEL;       
               
        // ³õʼ»¯ADC
        ADC_Init(macADCx, &ADC_InitStructure);
       
        // ÅäÖÃADCʱÖÓ£Î&#170CLK2µÄ8·ÖƵ£¬¼´9MHz
        RCC_ADCCLKConfig(RCC_PCLK2_Div8);
       
        // ÅäÖÃADC ͨµÀµÄת»»Ë³ÐòºÍ²ÉÑùʱ¼ä
        ADC_RegularChannelConfig(macADCx, macADC_CHANNEL1, 1, ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(macADCx, macADC_CHANNEL2, 2, ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(macADCx, macADC_CHANNEL3, 3, ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(macADCx, macADC_CHANNEL4, 4, ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(macADCx, macADC_CHANNEL5, 5, ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(macADCx, macADC_CHANNEL6, 6, ADC_SampleTime_55Cycles5);
       
        // ʹÄÜADC DMA ÇëÇó
        ADC_DMACmd(macADCx, ENABLE);
       
        // ¿ªÆôADC £¬²¢¿ªÊ¼×ª»»
        ADC_Cmd(macADCx, ENABLE);
       
        // ³õʼ»¯ADC У׼¼Ä´æÆ÷  
        ADC_ResetCalibration(macADCx);
        // µÈ´ýУ׼¼Ä´æÆ÷³õʼ»¯Íê³É
        while(ADC_GetResetCalibrationStatus(macADCx));
       
        // ADC¿ªÊ¼Ð£×¼
        ADC_StartCalibration(macADCx);
        // µÈ´ýУ׼Íê³É
        while(ADC_GetCalibrationStatus(macADCx));
       
        // ÓÉÓÚûÓвÉÓÃÍⲿ´¥·¢£¬ËùÒÔʹÓÃÈí¼þ´¥·¢ADCת»»
        ADC_SoftwareStartConvCmd(macADCx, ENABLE);
}

/**
  * @brief  ADC³õʼ»¯
  * @param  ÎÞ
  * @retval ÎÞ
  */
void ADCx_Init(void)
{
        ADCx_GPIO_Config();
        ADCx_Mode_Config();
}
/*********************************************END OF FILE**********************/
回复 支持 反对

使用道具 举报

发表于 2016-8-2 14:15:12 | 显示全部楼层
STM32有三个ADC,分别为ADC1/2/3,每个ADC有16个外部的通道,MINI板子只引出6路,其他的都已经被用作其他的用途。
问题1、从程序上看,这个是用了ADC1
问题2、2-4 在板子上默认是悬空,悬空的时候大概1.6V,这个正常
问题3、PC0 已经接到了 SPI FLASH 片选,默认是高电平,只能是3.3V,程序上只是为了演示多通道,把PC0的代码写上,实际不能外接,用不了了,已经被占用
问题4、跳线帽连接的是PC1跟 电位器,所以只对通道1有影响
问题5、ADC1/2/3是指芯片有多少个ADC,而每个ADC又有很多IO口,即使是同一个IO口,既可以是ADC1又可以是ADC2又可以是ADC3,那这样我标什么好,我只能标IO口的名称,并不会标ADC1/2/3这样的标识。

光盘配套的程序是没有问题的,针对你你发的这个帖子又又专门测试过,没有问题的,剩下你看看还有什么疑问。
回复 支持 反对

使用道具 举报

发表于 2016-8-2 14:24:50 | 显示全部楼层
要注意引脚占用的影响
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-2 14:41:05 | 显示全部楼层
本帖最后由 daoyu 于 2016-8-2 15:32 编辑

谢谢 火哥 的回答
谢谢 巢易白的回答
新晋小白  很多不懂

按火哥的意思是 如果adc1 要16路采集的话 需要硬件上引出16个针脚啊

另外火哥 如果 我要用 ADC2,ADC3 要用哪个针脚呢 ?

谢谢
QQ截图20160802144702.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-2 14:49:36 | 显示全部楼层
pc0~~pc7 针脚没看懂 貌似和意法的说明书上不一样,
回复 支持 反对

使用道具 举报

发表于 2016-8-2 15:11:36 | 显示全部楼层
我竟然一点都没看懂,实在是惭愧
回复 支持 反对

使用道具 举报

发表于 2016-8-2 15:14:32 | 显示全部楼层
惆怅还依旧 发表于 2016-8-2 15:11
我竟然一点都没看懂,实在是惭愧

我也是看得一脸懵逼啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-2 15:33:25 | 显示全部楼层
败懵逼 我也是新鲜出炉的小白  才一个星期  有什么办法
回复 支持 反对

使用道具 举报

发表于 2016-8-4 16:38:35 | 显示全部楼层
然而只开启了三个io
回复 支持 反对

使用道具 举报

发表于 2016-8-4 16:58:34 | 显示全部楼层
fire 发表于 2016-8-2 14:15
STM32有三个ADC,分别为ADC1/2/3,每个ADC有16个外部的通道,MINI板子只引出6路,其他的都已经被用作其他的 ...

之前项目研究过一个adc模块多通道采集问题,这个没有问题了,有没有多adc模块(就是三个adc都用了)多通道情况呢
回复 支持 反对

使用道具 举报

发表于 2016-8-4 17:09:09 | 显示全部楼层
xifengib 发表于 2016-8-4 16:58
之前项目研究过一个adc模块多通道采集问题,这个没有问题了,有没有多adc模块(就是三个adc都用了)多通 ...

哦哦,看到407的那个文档了,很全
回复 支持 反对

使用道具 举报

发表于 2016-8-4 17:10:25 | 显示全部楼层
xifengib 发表于 2016-8-4 17:09
哦哦,看到407的那个文档了,很全

429...                       
回复 支持 反对

使用道具 举报

发表于 2016-8-4 17:18:50 | 显示全部楼层

装逼失败了吧
回复 支持 反对

使用道具 举报

发表于 2016-8-4 17:24:01 | 显示全部楼层

呵呵                           
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 12:05 , Processed in 0.037270 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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