OpenEdv-开源电子网

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

F407开发板ADC例程测GND读出0.7V电压这是怎么回事?

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-10-14
在线时间
6 小时
发表于 2018-1-28 08:35:24 | 显示全部楼层 |阅读模式
5金钱
直接下的ADC例程不知道为什么,还有用多路ADC的时候PA1的ADC接VCC或GND其他的ADC也显示3.3V或0,不知道为什么之前还好好的,不会是板子烧坏了吧?我用MINI板子试103的例程就没有问题

原子哥能解释一下吗@正点原子
这是ADC的程序:
#include "adc.h"
#include "delay.h"                 

//使能GPIOA、GPIOB、GPIOC、GPIOF、ADC1和ADC3时钟
//初始化所需引脚
//初始化ADC1和ADC3       
//使能ADC1和ADC3
void  Adc_Init(void)
{   
  GPIO_InitTypeDef  GPIO_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  ADC_InitTypeDef       ADC_InitStructure;
       
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB
        |RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOA时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PA5 通道5
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
       
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
       
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4|GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
  GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化

  ADC_DeInit();
       
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz
  ADC_CommonInit(&ADC_CommonInitStructure);//初始化
       
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式       
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐       
  ADC_InitStructure.ADC_NbrOfConversion = 1;//9个转换在规则序列中 也就是只转换规则序列1
  ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化

  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;//非扫描模式       
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//关闭连续转换
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐       
  ADC_InitStructure.ADC_NbrOfConversion = 2;//2个转换在规则序列中 也就是只转换规则序列1
  ADC_Init(ADC3, &ADC_InitStructure);//ADC初始化
       
  ADC_Cmd(ADC1, ENABLE);
  ADC_Cmd(ADC3, ENABLE);  

}                                  
//获得ADC值
//case0-10:设置不同的ADC规则通道
//分别获得ADC1和ADC3的转换结果并存入数组ADCConvertedValue
//返回值:转换结果
u16 ADCConvertedValue[11];
void Get_Adc(void)   
{
        int i;
        for(i=0;i<11;i++)
        {
                switch(i)
                {
                        case 0:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_480Cycles );
                        case 1:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_480Cycles );
                        case 2:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 3, ADC_SampleTime_480Cycles );
                        case 3:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 4, ADC_SampleTime_480Cycles );
                        case 4:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 5, ADC_SampleTime_480Cycles );
                        case 5:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 6, ADC_SampleTime_480Cycles );
                        case 6:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 7, ADC_SampleTime_480Cycles );
                        case 7:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 9, ADC_SampleTime_480Cycles );
                        case 8:
                        ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 8, ADC_SampleTime_480Cycles );
                        case 9:
                        ADC_RegularChannelConfig(ADC3, ADC_Channel_14, 1, ADC_SampleTime_480Cycles );
                        case 10:
                        ADC_RegularChannelConfig(ADC3, ADC_Channel_15, 2, ADC_SampleTime_480Cycles );                    
                }
                if(i<=8)
                {
                        ADC_Cmd(ADC1, ENABLE);
                ADC_SoftwareStartConv(ADC1);                       
                while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
                ADCConvertedValue= ADC_GetConversionValue(ADC1);        //返回最近一次ADC1规则组的转换结果
                        ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
                        ADC_Cmd(ADC1, DISABLE);
                }
                else
                {               
            ADC_Cmd(ADC3, ENABLE);
                ADC_SoftwareStartConv(ADC3);                //使能指定的ADC1的软件转换启动功能       
                while(!ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC ));//等待转换结束
                ADCConvertedValue= ADC_GetConversionValue(ADC3);        //返回最近一次ADC3规则组的转换结果
                        ADC_ClearFlag(ADC3,ADC_FLAG_EOC);
                        ADC_Cmd(ADC3, DISABLE);                       
                }
        }
}

最佳答案

查看完整内容[请看2#楼]

找到问题了,是硬件没连接好,参考电压vref和vdda端口没连上,连上就正常了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-10-14
在线时间
6 小时
 楼主| 发表于 2018-1-28 08:35:25 | 显示全部楼层
找到问题了,是硬件没连接好,参考电压vref和vdda端口没连上,连上就正常了
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-10-14
在线时间
6 小时
 楼主| 发表于 2018-1-28 08:47:18 | 显示全部楼层
这是买的开发板
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-1-29 01:30:24 | 显示全部楼层
不要改代码,用我们例程测试,看正常么?
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-10-14
在线时间
6 小时
 楼主| 发表于 2018-1-29 08:31:51 | 显示全部楼层
正点原子 发表于 2018-1-29 01:30
不要改代码,用我们例程测试,看正常么?

用例程试过了,接GND是0.7V左右,接3.3V的话正常
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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