打印
[STM32F1]

stm32 多路ADC+DMA 在内存中各路ADC的数据是如何界定的

[复制链接]
6258|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzp3758|  楼主 | 2015-1-14 17:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
配置好七路ADC 通道为规则转换以及DMA 的寄存器等等操作,把七路ADC的数据放到如下的二维数组中

#define N 50 //每通道采50次
#define M 7 //为7个通道
uint32_t         ADC_ConvertedValue[N][M];

其中
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;/* 内存地址*/
DMA_InitStructure.DMA_BufferSize =  N*M;        //DMA通道的DMA缓存的大小

这里DMA 知道往 ADC_ConvertedValue[N][M]放数据以及缓存的SIZE,
当把七个通道的ADC 数据通过DMA传送完了,
DMA 是怎样界定ADC_ConvertedValue[49][0]为一个通道的数据?ADC_ConvertedValue[49][1]为另一个通道的数据?ADC_ConvertedValue[49][3]。ADC_ConvertedValue[49][3]。。。等等?
而不会出现ADC_ConvertedValue[40][0]为一个通道的数据,
ADC_ConvertedValue[41][0]到ADC_ConvertedValue[49][0]到ADC_ConvertedValue[40][1]为另一个通道的数据这样的情况?

沙发
airwill| | 2015-1-14 18:48 | 只看该作者
本帖最后由 airwill 于 2015-1-14 18:50 编辑

嗯, 这个问题好, 在应用中是必须得弄清楚的
DMA 其实很简单, 里面有个指针, 有个计数器, 当 ADC 完成时, 应该发送给 DMA 一个请求, DMA 执行 ADC 结果寄存器内容放到指针的位置, 再更新指针和计数器.
所以结果是依次顺序放置转换结果

使用特权

评论回复
板凳
mmuuss586| | 2015-1-14 19:06 | 只看该作者

F1的库有参考程序;
采多路AD,放到缓冲区里的;

使用特权

评论回复
地板
mengyu139| | 2015-1-14 19:36 | 只看该作者
DMA是不管那个通道的ADC的数据的,只要有ADC触发,就会把寄存器的值传送到制定内存,如果DMA内存设定为自增模式,则内存中数据排列为ADC采集先后顺序

使用特权

评论回复
5
lzp3758|  楼主 | 2015-1-15 10:22 | 只看该作者
谢谢楼上各位大大,大致明白,原理可以这样理解(还没有验证的)
首先需要按照规定的字节顺序进行DMA存储与CPU读取(比如两个字节)。
假如用一维数组A[]做缓冲区存七个ADC通道,则A[0]到A[6]为各个通道的一次ADC值,A[7]到A[13]为各个通道的下一次的ADC值
以此类推,用二维数组B[N][7]  B[N][0]为一个通道,B[N][1]为另一个通道,N为一个通道的数据,想取多一点就设大一点
这样DMA只管做自已的工作发送各通道的ADC值而在内存的整个数据结构自然就出来了。

使用特权

评论回复
6
wangxiansen| | 2015-12-30 23:05 | 只看该作者
本帖最后由 wangxiansen 于 2015-12-30 23:18 编辑

是这样的吧,DMA向内存写数据的时候按照地址连续递增的方式(地址递增多少与数据的类型有关),然后呢,7个规则通道,每一次转换7个值,需要7个连续的内存域存放转换值(暂且不管几个字节),然后 ADC_ConvertedValue[N][M]为一个二维数组(数据类型决定了数组元素占几个字节),N行M列,行的M列元素地址连续增加而排列,其下一行依然按照这个方式排列,所以N行正好对应N次采样,M对应规则通道数目,采样通道和数组列数对应起来,

使用特权

评论回复
7
snow520_77| | 2016-6-27 08:51 | 只看该作者
跟你ADC的配置有关系,如图;ADC采样一次扫描方式进行采样,DMA存储数据时就按你配置的顺序一次存储;如果定义的二维数组的话,ADC[0][0]~ADC[49][0]为一个通道的数据,ADC[0][1]~ADC[49][1]为第二个通道的数据。就是 这么界定的。

QQ截图20160627084647.png (26.5 KB )

QQ截图20160627084647.png

使用特权

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

本版积分规则

9

主题

19

帖子

1

粉丝