OpenEdv-开源电子网

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

求帮理清adc和通道的概念

[复制链接]

20

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2016-7-14
在线时间
49 小时
发表于 2016-7-20 11:36:26 | 显示全部楼层 |阅读模式
1金钱
如图,PA1对应了ADC123_IN1。。本人新手,摸索了好几天了。。IN1就是所谓的通道1,意思就是如果我使用PA1口作为接收信号的口,(1)那么配置寄存器的时候只能将这个口设置为ADC1或者2或者3,然后通道只能是1,对么?。。(2)不是说每个ADC都对应了十几个通道么,那么这里为什么只能是一个通道呢?(3)如果哪个大神好心人,帮我看下,我该怎么修改以下一段配置PA1为ADC1的代码。。变成配置PA2为ADC2的效果。我不知道改哪些地方啊void  Adc_Init(void){   
       
        RCC->APB2ENR|=1<<2;   
        GPIOA->CRL&=0XFFFFFF0F;
                                 
        RCC->APB2ENR|=1<<9;      
        RCC->APB2RSTR|=1<<9;   
        RCC->APB2RSTR&=~(1<<9);            
        RCC->CFGR&=~(3<<14);   
       
       
        RCC->CFGR|=2<<14;               
        ADC1->CR1&=0XF0FFFF;   
        ADC1->CR1|=0<<16;      
        ADC1->CR1&=~(1<<8);              
        ADC1->CR2&=~(1<<1);   
        ADC1->CR2&=~(7<<17);          
        ADC1->CR2|=7<<17;          
        ADC1->CR2|=1<<20;     
        ADC1->CR2&=~(1<<11);   
        ADC1->SQR1&=~(0XF<<20);
        ADC1->SQR1|=0<<20;                               
       
        ADC1->SMPR2&=~(7<<3);           
        ADC1->SMPR2|=7<<3;      
        ADC1->CR2|=1<<0;                   
        ADC1->CR2|=1<<3;      
        while(ADC1->CR2&1<<3);                  
                    
        ADC1->CR2|=1<<2;         
        while(ADC1->CR2&1<<2);  
         
}


u16 Get_Adc(u8 ch)   
{
                         
        ADC1->SQR3&=0XFFFFFFE0;
        ADC1->SQR3|=ch;                                              
        ADC1->CR2|=1<<22;      
        while(!(ADC1->SR&1<<1));          
        return ADC1->DR;               
}

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;
}

522E.tmp.jpg

最佳答案

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

1,是的 。2,后面的IN2,IN3就是其他通道... 3,配置参考ADC1的即可,知识换ADC123_IN2这个通道。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-7-20 11:36:27 | 显示全部楼层
1,是的 。2,后面的IN2,IN3就是其他通道... 3,配置参考ADC1的即可,知识换ADC123_IN2这个通道。
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-7-20 16:28:22 | 显示全部楼层
帮顶  寄存器看不懂
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-7-20 17:15:23 | 显示全部楼层
我的理解,通道和几路ADC没太大关系吧。
ADC123是指有三路ADC,之前看到说需要实时性强就用两路ADC,数据可以有先有后就用一路ADC。PA0就是0号通道,这个脚可以配置成三路ADC中的任意一路。只是配置而已,配置完了用例程中的代码就可以直接连续读数据了,比如把PA0、1、2都使能ADC功能,然后都配成ADC1,连续读取,DMA采集,就是说通道0使用ADC1,通道1使用ADC1,通道2也使用ADC1,当然也可以配置成通道2使用ADC2。
代码我也没用过寄存器的,论坛里有很多可用的代码,库函数的也有,抄来就是了。
自在随心
回复

使用道具 举报

20

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2016-7-14
在线时间
49 小时
 楼主| 发表于 2016-7-21 09:05:39 | 显示全部楼层
正点原子 发表于 2016-7-20 11:36
1,是的 。2,后面的IN2,IN3就是其他通道... 3,配置参考ADC1的即可,知识换ADC123_IN2这个通道。

原子老师啊,我用PA2口做ADC2修改那个代码的时候,改APB2ENR中的PORTA使能和ADC2 使能以及复位,下面全把ADC1改成了ADC2,可是运行过后ADC2不能采集数据,,我难道少改了什么么,求原子老师帮我仔细看看
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 00:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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