怎么一个adcstm32 adc dma 多通道道用或者怎么2个adc一起用

查看: 4572|回复: 8
STM32中关于如何配置两个ADC和如何选择一个ADC的各个通道的问题,求教?
主题帖子精华
新手上路, 积分 47, 距离下一级还需 3 积分
在线时间0 小时
&&&&&&&&&&&&
1db9cbbedae4de_801.jpg (0 Bytes, 下载次数: 21)
22:54 上传
上图可以配置ADC1的通道0~通道3,,但是看了SQR3寄存器如下:
e0ecfeeb680_673.png (0 Bytes, 下载次数: 21)
22:54 上传
那,要用ADC1的通道8、9,该如何配置SQR寄存器啊?
主题帖子精华
在线时间451 小时
单个转换的话,只需要设置SQ1为8/9,然后初始化的时候配置一下8和9通道的采样时间,即可实现了.
对了,还有IO口的状态.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
新手上路, 积分 47, 距离下一级还需 3 积分
在线时间0 小时
回复【2楼】正点原子:
---------------------------------
为什么我用ADC1设置SQ1为8,9,用ADC2设置成SQ2为1,2时,就只有8,9通道有效?配置SQ2,不行吗?我是在例程的基础上进行修改的。
主题帖子精华
在线时间451 小时
不是这么做的。
你想怎么采集?
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
新手上路, 积分 47, 距离下一级还需 3 积分
在线时间0 小时
其实我是不明白SQ2,SQ3,SQ4......等等有什么用?谢谢原子哥了。
主题帖子精华
在线时间451 小时
那在你需要转换多个通道,连续转换的时候,用到。
可以配合DMA,实现多个通道自动数据采集。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
新手上路, 积分 47, 距离下一级还需 3 积分
在线时间0 小时
回复【6楼】正点原子:
---------------------------------
原子哥啊,你有ADC多路数据采集DMA传输的例程吗?我最近玩飞思卡尔小车ADC与PWM有冲突(应该是ADC采样频率过高)我想用DMA传输。不懂啊?
主题帖子精华
在线时间451 小时
主题帖子精华
新手上路, 积分 47, 距离下一级还需 3 积分
在线时间0 小时
恩,搜到了,谢谢!
Powered by查看: 317|回复: 10
一个adc怎么实现接收2个信号输入
主题帖子精华
中级会员, 积分 248, 距离下一级还需 252 积分
在线时间46 小时
是个新手,问:一个adc在配置io口(历程上的寄存器写法,不会库函数写法)时,假如配置一个PA口为多通道AD输入的时候,在硬件电路上,我该怎么连接呢??把两个输入信号的杜邦线都接在一个PA口上么?那板子接收的信号又该怎么区分呢?。。。。。很不解啊
这是原子的代码,一次采样一个通道数据
[mw_shl_code=c,true]//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
//使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC ...
主题帖子精华
金牌会员, 积分 1200, 距离下一级还需 1800 积分
在线时间168 小时
这是原子的代码,一次采样一个通道数据
[C] 纯文本查看 复制代码//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
//使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
所以,如果不是要求严格的同时采样,对延迟要求不高,那么很简单:只要初始化ADC的两个采样通道和相应IO口,然后轮流调用这个函数采样就行了
如果要求实时性高,那就需要使用扫描模式或者多个ADC,最好加上DMA。
如果LZ的意思是硬件原因只能使用一个IO口,那么只能外加多路选择器或者继电器了
主题帖子精华
在线时间97 小时
你是要一个adc采集多个信号?
主题帖子精华
中级会员, 积分 248, 距离下一级还需 252 积分
在线时间46 小时
你是要一个adc采集多个信号?
以我目前的水平好像很难办,现在想知道开2个adc怎么写,,因为我不会写库函数版本的语言,所以网上的都看不懂
主题帖子精华
初级会员, 积分 67, 距离下一级还需 133 积分
在线时间109 小时
一个ADC有多个通道&&每个通道对应不同的IO口
主题帖子精华
高级会员, 积分 545, 距离下一级还需 455 积分
在线时间103 小时
对,STM32有多个ADC,每个ADC又有多个通道,每个通道对应一个IO口,你完全可以使用两个通道去实现
主题帖子精华
高级会员, 积分 515, 距离下一级还需 485 积分
在线时间87 小时
资源很紧张吗?多用几路A/D口不行吗?或者加个继电器切换两路信号,继电器由另一路I/O控制。
主题帖子精华
金牌会员, 积分 1660, 距离下一级还需 1340 积分
在线时间440 小时
,可以开2个通道的,楼主应该是因为没找到直接操作寄存器的多通道例子而不知道怎么配置。
楼主如果感觉自己直接配置寄存器配置不鸟2通道 的话,可以先下寄存器版本的,然后硬件调试,看看别人调试好的ADC和DMA的CR和中断使能那些寄存器的值,然后自己配置
主题帖子精华
中级会员, 积分 293, 距离下一级还需 207 积分
在线时间75 小时
看stm32具体芯片的引脚功能图,找出可以作为ADC的引脚,多通道输入就是你用了多个adc引脚,PA口有很多个引脚的,跟具体芯片有关系
主题帖子精华
中级会员, 积分 248, 距离下一级还需 252 积分
在线时间46 小时
,可以开2个通道的,楼主应该是因为没找到直接操作寄存器的多通道例子而不知道怎么配置。
楼主如果感觉自 ...
恩恩,据说开2个通道要用继电器切换,暂时不想考虑了,然后我现在正在努力调试2个adc一起用的情况,但是总不成功
主题帖子精华
中级会员, 积分 249, 距离下一级还需 251 积分
在线时间76 小时
一个GPIO口去测多个电压,不是手动换电压点了吗?可以一个ADC多个IO口去测量多个电压点啊!多通道模式,我也刚学没试过,貌似里面ADC的参数要改改
Powered bySTM32的ADC采样与多通道ADC采样
STM32的ADC采样与多通道ADC采样
一 单通道采样
参考资料:
《STM32库开发实战指南》
刘火良,杨森著
原理性质的东西还是少讲,因为上面那本书里面讲解的很详细了,直接来看硬件电路图
这里使用的是3362电位器(10K),即用STM32来测量PB0和GND两端的电压,这样的电路设计比较简单也容易理解,但是存在一定的弊端,下面给出《STM32库开发实战指南》上面配套的硬件电路图
如果设计电路图的话,可以参考这种思路。
1 引脚初始化的时候需要注意
每一个ADC通道都对应一个GPIO引脚,看图中的ADC123_IN10,表示这个引脚(PC0)可以配置为ADC1的通道10,或者是ADC2的通道10,或者是ADC3的通道10,这个地方非常重要,涉及到后面ADC初始化时函数的调用。
比如当我们使能ADC时,我们调用的函数是
ADC_Cmd();
如果我们使用的是ADC1,那么上面函数的写法就应该是
ADC_Cmd(ADC1,ENABLE);
相应的如果是ADC2,那么上面函数的写法就是
ADC_Cmd(ADC2,ENABLE);
另外需要注意的是,我们这里的ADC使用了DMA,所以如果你使用的是ADC1,那么对应的DMA就应该是DMA1的通道1
如果使用的是ADC2或者是ADC3就需要自己去查找手册,看看对应的是哪个DMA的那个通道。
在后面上传的程序中可以看到DMA初始化的时候有这么一条语句
DMA_Init(DMA1_Channel1)
这就是初始化DMA1的通道1
DMA_Cmd(DMA1_Channel1,ENABLE)
就是使能DMA1的通道1
总结一句,配置的IO口不同,对应ADC和DMA就不同。
在单通道的ADC采样中,注意上面这一个点就可以了,但是多通道采样还需要注意其他的一些地方
二 多通道采样
还是看上面的电路图
这里我们假设使用PB0和PC0端口来采集电压。
stm32有三个ADC,每个ADC对应16个通道,这里我们只是用其中的两个通道来做说明。
在程序中PB0设置为ADC1的通道8,PC0设置为ADC1的通道10。
需要注意的几个点:
1 引脚的配置,在上面已经说到
2 ADC模式的一些配置
对ADC模式的配置主要是通过对ADC_InitTypeDef结构体成员的初始化来完成的。
ADC_InitTypeDef ADC_InitS
ADC_InitStructure.ADC_ScanConvMode=ENABLE;
结构体的这个成员主要是用来设置ADC的扫描模式,我们使用通道8和通道10,当然要允许ADC进行通道的扫描
ADC_InitStructure.ADC_NbrOfChannel=2;
这个结构体成员是用来表明要转换的通道数目,这里我们使用通道8和通道10两个通道,那么这个值必然是2。
ADC_RegularChannelConfig();
这是一个非常重要的函数
这是从《stm32库函数使用手册》中截到的图,关于函数具体参数的使用可以去看该手册。
下面结合程序来看一下这个函数的使用
函数的第三个参数是用来设置采样顺序的,看我们的程序,也就是说我们设置ADC1的通道8先进行采样,接着ADC1的通道10再进行采样。
写到这里,基本上多通道ADC采样程序就差不多了,至于具体的DMA使用可以参考我后面上传的程序。
现在发现还是不能用复制粘贴功能,所以具体的程序需要到我的资源里下载
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 stm32f103 adc多通道 的文章

 

随机推荐