ADC多路数据采集的问题

2019-10-16 04:04发布

  谈谈我个人的看法(说的有啥不妥的,请指出):            因为ADC的规则通道转换的值储存在一个仅有的数据寄存器中,所以当转换多个规则通道时必须及时将数据读走,否则后面采集到的数据会将前面的数据覆盖掉,我们看起来好像只有一个通道起作用。为了避免这种现象的出现,我们就要用到DMA(直接存贮器访问),需要在adc.c程序里使能ADC_DMA,这样我们就能及时将ADC多路采集的数据读走了。
下面是我写的一个程序
                               
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
tangzhao_01
1楼-- · 2019-10-18 00:19
回复【12楼】一个人的旅程1990:
---------------------------------
数据还是有问题的,今晚我系统的试了一遍,我现在只用两个通道:通道10跟通道11;单独用采电压都是OK的;
(1)当通道10接地,通道11接vcc时:通道10采的数为很大的一个值,通道11采的为0;我让通道10采集电压端悬空,通道11接vcc,两个采的值还跟刚刚的一 样;让通道11悬空,通道10接地,那么通道10采集的就正常了,但是通道11的始终为0;
(2)当通道11接地,通道10接vcc时,两个通道采集的电压为正常的,我让通道10那端悬空,通道11接地后,通道10采的将是一个随机数,通道11采的始终为0(这个没问题);我让通道10接vcc,通道11那端悬空,通道10采集的没问题,但是通道11始终为0;

总结:通道11一直都是有问题的,采的值永远为0,而且只要通道11接vcc会对通道10产生影响,其他情况是没问题的。很费解,程序有问题??
tangzhao_01
2楼-- · 2019-10-18 04:12
回复【13楼】tangzhao_01:
---------------------------------
哥们,问题我已经成功解决了,谢谢你了。就是一个小问题,让我徘徊了好几天,我把定义的数组u32改成__IO uint16_t 就ok,但是真心不明白为什么额
正点原子
3楼-- · 2019-10-18 04:25
哦哦,那是因为你的DMA传输,是16位宽,你u32的数组,每个元素占4个字节,而DMA只传输给你2个字节...
tangzhao_01
4楼-- · 2019-10-18 08:22
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-10-18 09:28
ST有提供吧,不过我都是自己画的.
jonewang
6楼-- · 2019-10-18 12:39
谢谢分享!学习!

一周热门 更多>