OpenEdv-开源电子网

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

ADC 问题。待测电压接上IO口后发生变化。。。。

[复制链接]

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-7-15
在线时间
0 小时
发表于 2013-7-15 19:14:46 | 显示全部楼层 |阅读模式
使用adc1规则组:ch1,ch2,ch3。三路待测电压,如果不接到引脚上,均是在1.5-2.5V变化
待测电压接到IO口上之后,发现AD测的不准。最后发现,不是程序问题,而是:待测电压接到IO口上之后,再次测量待测电压的电平,接到ch3上的是正常的,ch1待测电压变化范围变成0.1-0.5,ch2待测电压范围变成2.8-3.1。。。。。怎么引脚还能影响电压不成?
把待测电压与IO口分离之后,电压就又正常了。。。。
这是什么情况!!!求解答,谢谢大神。

初始化:
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA , ENABLE); //时钟使能

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2; //ACD1_CH0A0 CH1:PA1 CH2:PA2 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


RCC_ADCCLKConfig(RCC_PCLK2_Div6);                   //设置ADC时钟分频 

    ADC_DeInit(ADC1);                                      //将外设 ADC1 的全部寄存器重设为缺省值

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 = 3;         //3通道
ADC_Init(ADC1, &ADC_InitStructure); //initialization

ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1
ADC_ResetCalibration(ADC1);                //重置ADC1校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //获取ADC1重置校准寄存器状态,等待
ADC_StartCalibration(ADC1);            //开始ADC1的校准
while(ADC_GetCalibrationStatus(ADC1)); //获取ADC1的校准状态,等待
 
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道0,规则采样顺序值为1,采样时间为239.5周期      
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道1,规则采样顺序值为1,采样时间为239.5周期      
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道2,规则采样顺序值为1,采样时间为239.5周期      




主函数中:
     Adc_Init();
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        while(1)
        {
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_STRT)); //stat = 0 时等待   1则转换完成

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); //EOC  = 0 时等待   1则转换完成
temp1 =ADC_GetConversionValue(ADC1);
        LCD_ShowNum(100, 110,temp1,5,12);
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));                //等待第二次转换完成
temp1 = ADC_GetConversionValue(ADC1);
         LCD_ShowNum(100, 120,temp1,5,12);

  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));                //等待第三次转换完成
temp1 = ADC_GetConversionValue(ADC1);
LCD_ShowNum(100, 130,temp1,5,12);   

ADC_ClearFlag(ADC1, ADC_FLAG_STRT);                            
        }

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

使用道具 举报

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-7-15
在线时间
0 小时
 楼主| 发表于 2013-7-15 19:40:40 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-17 15:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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