OpenEdv-开源电子网

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

求教ADC多通道采集DMA传输的一个问题

[复制链接]

94

主题

260

帖子

0

精华

高级会员

Rank: 4

积分
650
金钱
650
注册时间
2013-10-23
在线时间
48 小时
发表于 2014-8-26 21:25:46 | 显示全部楼层 |阅读模式
5金钱
现在我想实现这样一个功能:ADC1的三个规则通道工作在连续扫描模式,对每个通道每采集10次的值求一个平均值,并通过串口发送。我的办法是定义一个adc_val[10][3]10行3列的数组存放3个通道采集的值,通过DMA传输,DMA的传输数量寄存器设置为30,循环模式,并开启DMA传输完成中断,这样就可以在每个通道采集10次(3个通道共30次)后进DMA中断,在中断函数里对每个通道采集的10个值求平均值,现在我有一个问题,当CPU在中断函数里对adc_val[][]这个数组求平均值的过程中,ADC和DMA也都还在不停的工作,也就是说adc_val[][]数组的值一直在改变,那么有些数据我还没有来得及计算就已经被后面采集的数据给覆盖了,怎样才能避免这个问题呢?

最佳答案

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

1,双buffer. 2,中断后停止DMA采集,计算完,再启动DMA.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-26 21:25:47 | 显示全部楼层
1,双buffer.
2,中断后停止DMA采集,计算完,再启动DMA.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

94

主题

260

帖子

0

精华

高级会员

Rank: 4

积分
650
金钱
650
注册时间
2013-10-23
在线时间
48 小时
 楼主| 发表于 2014-8-26 23:09:45 | 显示全部楼层

再问您一个问题额,这

段代码为什么printf()每次都漏掉一个换行呢
while(1)
{
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
num+=adc_val[j];
}
adc_val_ave=num/M;
num=0;
}
for(i=0;i<N;i++)
{
adc_vol=adc_val_ave/4096.0*3.3;
printf("通道%d:%fV\n",i,adc_vol);
}

delay_ms(1000);

}
搜狗截图14年08月26日2307_1.png
回复

使用道具 举报

27

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2014-8-19
在线时间
0 小时
发表于 2014-10-1 20:55:15 | 显示全部楼层
回复【3楼】骑着蜗牛追梦想:
---------------------------------
一楼问题解决否?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 20:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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