OpenEdv-开源电子网

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

读取不了ADC1通道6的值 怎么读取两个通道的值

[复制链接]

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2019-7-12
在线时间
40 小时
发表于 2019-7-20 11:22:40 | 显示全部楼层 |阅读模式
1金钱
#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 );       


        RCC_ADCCLKConfig(RCC_PCLK2_Div6);   

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;               
        GPIO_Init(GPIOA, &GPIO_InitStructure);       

        ADC_DeInit(ADC1);

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


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

        while(ADC_GetCalibrationStatus(ADC1));       

//        ADC_SoftwareStartConvCmd(ADC1, ENABLE);               

}                                  

u16 Get_Adc(u8 ch)   
{
         
        ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 6, ADC_SampleTime_239Cycles5 );                                              

        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                       
         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));

        return ADC_GetConversionValue(ADC1);       
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
        u32 temp_val=0;
        u8 t;
        for(t=0;t<times;t++)
        {
                temp_val+=Get_Adc(ch);
                delay_ms(5);
        }
        return temp_val/times;
}          




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

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14422
金钱
14422
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-7-20 14:40:02 | 显示全部楼层
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2019-7-20 15:22:04 | 显示全部楼层
ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 6, ADC_SampleTime_239Cycles5 );
这里的第三个参数不是6,如果你只是单独的采集通道6那么应该是1.你理解错这个参数的意义了。它是指通道采集序列中的顺序,你通道6就一个序列,那么顺序肯定是1.
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2019-7-12
在线时间
40 小时
 楼主| 发表于 2019-7-20 15:39:48 | 显示全部楼层
谢谢!
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2019-7-12
在线时间
40 小时
 楼主| 发表于 2019-7-20 15:55:50 | 显示全部楼层
ADC1的两路通道采到的值相同,而且只有一个通道有效是为什么
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 17:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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