OpenEdv-开源电子网

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

STM32F103,ADC多通道采集问题

[复制链接]

1

主题

12

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-10-21
在线时间
8 小时
发表于 2020-11-30 16:43:01 | 显示全部楼层 |阅读模式
我开启两条通道采集。当通道0 我直接将引脚接到VCC和GND测出数值良好;但是通道2接到VCC时电压值显示2点多伏,接到GND时显示电压值为0.2V左右,这是什么原因导致呀?

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

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4947
金钱
4947
注册时间
2015-1-10
在线时间
620 小时
发表于 2020-12-1 15:14:49 | 显示全部楼层
liubaby 发表于 2020-12-1 15:10
噢,我以为我这样子写就可以直接将两个IO口设置为输入呢。   
         
        GPIO_InitStructure.GPIO_Pi ...

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2;
直接这么写
回复 支持 1 反对 0

使用道具 举报

2

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
679
金钱
679
注册时间
2020-11-21
在线时间
67 小时
发表于 2020-12-1 09:42:13 | 显示全部楼层
  1. #include "adc.h"
  2. #include "delay.h"

  3. void Adc_Init(void)
  4. {
  5.     GPIO_InitTypeDef GPIO_InitStructure;
  6.     ADC_InitTypeDef ADC_InitStructure;

  7.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
  8.     RCC_ADCCLKConfig(RCC_PCLK2_Div6);         //72/6=12 最大不超过14MHz

  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  13.     ADC_DeInit(ADC1);

  14.     ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;                //规则通道模式
  15.     ADC_InitStructure.ADC_ScanConvMode = ENABLE;                        //扫描模式
  16.     ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;                //单次转换
  17.     ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  18.     ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  19.     ADC_InitStructure.ADC_NbrOfChannel = 3;
  20.     ADC_Init(ADC1, &ADC_InitStructure);
  21.        
  22.         ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);                //通道0
  23.         ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_239Cycles5);               
  24.         ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_SampleTime_239Cycles5);       
  25.        
  26.         ADC_DiscModeChannelCountConfig(ADC1,1);                        //间断模式 设置规则组 序列数 每触发一次就转换一个通道
  27.         ADC_DiscModeCmd(ADC1,ENABLE);
  28.        
  29.         ADC_Cmd(ADC1,ENABLE);
  30.        
  31.         ADC_ResetCalibration(ADC1);                                                //开启复位校准
  32.         while(ADC_GetResetCalibrationStatus(ADC1));                //等待复位结束
  33.        
  34.         ADC_StartCalibration(ADC1);                                                //开启AD校准
  35.         while(ADC_GetCalibrationStatus(ADC1));                        //等待校准结束
  36. }

  37. u16 Get_Adc(void)
  38. {
  39.         ADC_SoftwareStartConvCmd(ADC1,ENABLE);
  40.         //此处如果等待标志位的话,程序会卡死  规则通道模式下,所有通道都转换完成之后,EOC标志才会置位
  41.         //while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));                        //等待转换结束
  42.         delay_us(30);
  43.         return ADC_GetConversionValue(ADC1);                                        //返回采样值
  44. }






















复制代码
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-10-21
在线时间
8 小时
 楼主| 发表于 2020-12-1 14:38:24 | 显示全部楼层

非常感谢,今晚我回去测试一番
回复 支持 反对

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4947
金钱
4947
注册时间
2015-1-10
在线时间
620 小时
发表于 2020-12-1 14:57:57 | 显示全部楼层
GPIO_InitStructure.GPIO_Pin赋值这两句覆盖了,先赋值了Pin_2,又覆盖了Pin_0,只有Pin_0配置成功了
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-10-21
在线时间
8 小时
 楼主| 发表于 2020-12-1 15:10:17 | 显示全部楼层
阿侑kevin 发表于 2020-12-1 14:57
GPIO_InitStructure.GPIO_Pin赋值这两句覆盖了,先赋值了Pin_2,又覆盖了Pin_0,只有Pin_0配置成功了

噢,我以为我这样子写就可以直接将两个IO口设置为输入呢。   
         
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;   
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                //模拟输入引脚
        GPIO_Init(GPIOA, &GPIO_InitStructure);          
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                //模拟输入引脚
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
那是不是写成这样子呀? 谢谢兄弟指教
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-10-21
在线时间
8 小时
 楼主| 发表于 2020-12-1 17:58:20 | 显示全部楼层
阿侑kevin 发表于 2020-12-1 15:14
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2;
直接这么写

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 11:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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