打印
[STM32F1]

STM32 ADC问题

[复制链接]
1392|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

我在多路ADC中遇到如下问题,请高手指点一下:
1.多路ADC转换,而不用DMA的情况,如何配置ADC.
例如:3路ADC,我是这样配置的;ADC独立模式,ADC扫描和连续使能,通道数为3,然后规定顺序,软件启动ADC,然后,在获取函数中设一通道变量,查询ADC_FLAG_EOC,如果完成,获取该通道的ADC值,变量加一,如果变量>2,为0,这样重复又查询ADC_FLAG_EOC,.....,但结果不正确,不知道是是什么原因.查询之前,是否需要清ADC_FLAG_EOC呢?还有,ADC_FLAG_EOC是单次的还是所有通道都转换完的
2.如果用DMA方式,如果采取的也是扫描和连续方式,例如也是3个通道,设BUFF[50][3],我如何知道到我要的采集次数(如50次)刚好ADC没有覆盖呢?也就是说我如何每次读取时正好DMA到达一个周期(50次.),如果1通道为10次,2通道为20次,3通道为50次,如何采样
沙发
ar_m_cu| | 2014-7-22 15:08 | 只看该作者
1.不用DMA最好单通道单次转换,毕竟只有一个结果寄存器,STM32的adc转换速度又太快,很容易导致丢失数据
2.可以设置DMA传输数据个数(比如50*3次)
  通道1转换10次,通道2转换20次,通道3转换50次可以这样设置:ADC扫描和连续使能,转换通道次序为 1、2、2、3、3、3、3、3可以试试,我没
  有这样用过,但觉得这样可以

使用特权

评论回复
板凳
mmuuss586| | 2014-7-22 15:47 | 只看该作者
可以用定时器触发ADC+DMA,查询DMA标志位;
DMA完成1次,关闭定时器,读取缓冲区数据;
当然你也不关闭定时器;

用DMA中断也可以;

使用特权

评论回复
地板
mmuuss586| | 2014-7-22 15:50 | 只看该作者
我发过的一些**你也可以看看:





使用特权

评论回复
5
airwill| | 2014-7-23 10:25 | 只看该作者
多个通道连续采样, 可以考虑使用注入方式. 最为高效而简单.
当然由于规则方式的通道多, 还是可能只能用规则方式来, 那么尽量考虑用 DMA 传输吧

最后, 就楼主这个情况, 可以设置规则的间断模式实现.

使用特权

评论回复
6
picasso101| | 2014-9-25 16:22 | 只看该作者
看看先

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

110

帖子

1

粉丝