OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2621|回复: 3

实时采样8路随时变化的电压

[复制链接]

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-5-20
在线时间
5 小时
发表于 2016-5-25 20:05:54 | 显示全部楼层 |阅读模式
#include "adc.h"
#include "delay.h"
                                                                                                                                  
void  Adc_Init(void)
{        
        ADC_InitTypeDef ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1        , ENABLE );          //ê1ÄüADC1í¨μàê±Öó
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //éèÖÃADC·ÖÆμòò×ó6 72M/6=12,ADC×î′óê±¼ä2»Äü3¬1y14M
                         
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;               
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;               
        GPIO_Init(GPIOB, &GPIO_InitStructure);       
       

        ADC_DeInit(ADC1);  

        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;       
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;       
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;       
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;       
        ADC_InitStructure.ADC_NbrOfChannel = 8;       
        ADC_Init(ADC1, &ADC_InitStructure);       


        ADC_Cmd(ADC1, ENABLE);       
        ADC_ResetCalibration(ADC1);
        while(ADC_GetResetCalibrationStatus(ADC1));       
        ADC_StartCalibration(ADC1);         
        while(ADC_GetCalibrationStatus(ADC1));       
}                                  


u16 Get_Adc(u8 ch)   
{
                switch(ch)
                {
                        case 0:       
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );
                        break;
                        case 1:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 );       
                        break;
                        case 2:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5 );
                        break;
                        case 3:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_239Cycles5 );
                                break;
                        case 4:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_239Cycles5 );
                                break;
                        case 5:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_239Cycles5 );
                                break;
                        case 6:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 7, ADC_SampleTime_239Cycles5 );
                                break;
                        case 7:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 8, ADC_SampleTime_239Cycles5 );
                        default:break;
                }
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);               
         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));

        return ADC_GetConversionValue(ADC1);       
}



int main(void)
{       
         u16 adcx[8],n;         
         delay_init();                   
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(9600);       
        LED_Init();                         
        Adc_Init();                                 
        while(1)
        {         
                LED0=!LED0;
                adcx[0]=Get_Adc(0)*330/4096 ;
                delay_ms(250);
                printf("value[%d]:\t%d\r\n",0,adcx[0]);
               

                adcx[1]=Get_Adc(1)*330/4096 ;
                delay_ms(250);
                printf("value[%d]:\t%d\r\n",0,adcx[1]);
               
               
                adcx[2]=Get_Adc(2)*330/4096 ;
                delay_ms(250);
                printf("value[%d]:\t%d\r\n",1,adcx[2]);
               
               
                adcx[3]=Get_Adc(3)*330/4096;
                delay_ms(250);       
                printf("value[%d]:\t%d\r\n",3,adcx[3]);
               
               
                adcx[4]=Get_Adc(4);
                delay_ms(250);
                printf("value[%d]:\t%d\r\n",4,adcx[4]);
               
               
                adcx[5]=Get_Adc(5);
                delay_ms(250);               
                printf("value[%d]:\t%d\r\n",5,adcx[5]);
               
               
                adcx[6]=Get_Adc(6);
                delay_ms(250);               
                printf("value[%d]:\t%d\r\n",6,adcx[6]);
               
               
                adcx[7]=Get_Adc(7);
                delay_ms(250);
                printf("value[%d]:\t%d\r\n",7,adcx[7]);
                /**/
                printf("\r\n");
               
                for(n=0;n<=8;n++){printf("value[%d]:\t%d\r\n",n,adcx[n]);}
                printf("\r\n");
}
只有第一通道是对的,其他通道结果与通道0相似,这是什么原因??、

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2016-5-25 22:49:30 | 显示全部楼层
ADC_InitStructure.ADC_NbrOfChannel = 8;  改为ADC_InitStructure.ADC_NbrOfChannel = 1;     然后函数ADC_RegularChannelConfig第三个参数全改为1 即ADC_RegularChannelConfig(ADC1, ADC_Channel_x, 1, ADC_SampleTime_239Cycles5 );
回复 支持 反对

使用道具 举报

22

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3983
金钱
3983
注册时间
2015-4-18
在线时间
403 小时
发表于 2016-5-28 09:22:01 | 显示全部楼层
你这个又不是按照顺序转换的。。每次只能转换一个。。所以参照上面版主的方式修改下就行了。。。
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-5-20
在线时间
5 小时
 楼主| 发表于 2016-5-28 17:36:47 | 显示全部楼层
谢谢大神
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 14:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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