OpenEdv-开源电子网

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

ADC双通道DMA

[复制链接]

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
发表于 2013-5-29 09:44:17 | 显示全部楼层 |阅读模式




程序是自己写的,采集的数据也是对的,就是通道1和通道2采集的数据位置会交换,而且无规律的交换。求大神帮忙解决

ADC_DMA.rar

419.46 KB, 下载次数: 273

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-29 10:34:28 | 显示全部楼层
把你的TIM2定时器中断去掉,只留下DMA,在DMA里面重启数据转换.再测试下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
 楼主| 发表于 2013-5-29 14:28:17 | 显示全部楼层
回复【2楼】正点原子:
--------------------------------
我就是需要定时定时采集AD。项目要求每隔一秒刷新一下数据。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-29 17:48:45 | 显示全部楼层
这不你现在是有问题嘛...有问题的时候,总得慢慢查啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
 楼主| 发表于 2013-5-29 18:04:50 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
问题已经解决啦,灵感来自于本论坛。DMA传输结束中断后直接关闭AD(ADC_Cmd(ADC1, DISABLE))处理数据,然后在定时器中在开启AD(ADC_Cmd(ADC1, ENABLE);ADC_SoftwareStartConvCmd(ADC1, ENABLE);)这样顺序就不会乱了,不过不知道这样做好不好。
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
 楼主| 发表于 2013-5-31 11:26:43 | 显示全部楼层
上传修改好的工程

ADC_DMA.rar

420.27 KB, 下载次数: 592

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-31 14:06:27 | 显示全部楼层
回复【6楼】dll_epdc:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
 楼主| 发表于 2013-5-31 16:33:25 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
共同学习,共同进步。今天刚刚买了开发板,正在等待收货。
回复 支持 反对

使用道具 举报

7

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2011-9-3
在线时间
4 小时
发表于 2013-6-5 07:56:41 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
 楼主| 发表于 2013-6-5 10:33:40 | 显示全部楼层
回复【9楼】wanglituan:
---------------------------------
不用客气,从这拿了不少东西,也算是回馈一下
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-7-8 16:28:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-9-3
在线时间
3 小时
发表于 2013-12-4 15:21:00 | 显示全部楼层
回复【5楼】dll_epdc:
-------------------------请教一下 你的程序 我试了 但是我没找到 哪行代码是控制往串口传数据的啊  我是新手  多多关照啊 ! 

我理解你的程序  有双AD的 值 给DMA 然后DMA 给vu16  AD_Value[36][2];     然后怎么传给串口的 没看到啊 

  void filter(void)
{
   u32  sum = 0;
u8  count;
u8 i=0;
u8 m,n;
u16 temp=0;
   for(i=0;i<2;i++)
{
for(m=0;m<35;m++)
{
for(n=m+1;n<36;n++)
{
if(AD_Value[m]>=AD_Value[n])
{
temp=AD_Value[m];
AD_Value[m]=AD_Value[n];
AD_Value[n]=temp;
}
}
}
}
for(i=0;i<2;i++)
    {
        for ( count=3;count<33;count++)
{
           sum += AD_Value[count];
        }
        After_filter=sum/30;
sum=0;
     }

}这个函数 是干嘛呢  比较 然后求和 难道是取平均值呢吗
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
 楼主| 发表于 2014-1-10 17:41:32 | 显示全部楼层
回复【12楼】pinghaowin:
---------------------------------是有多次采集再求平均值的。
回复 支持 反对

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
 楼主| 发表于 2014-1-10 17:46:32 | 显示全部楼层
回复【12楼】pinghaowin:
---------------------------------
你可以在DMA中断处理中看到数据到串口发送的处理的。好几个月前的代码了,都忘了很多。
回复 支持 反对

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2014-12-19 13:10:49 | 显示全部楼层
谢分享,参考了一下楼主的方法可以,另外不用DMA中断,判断通道1是否完成标志也行:
while(!DMA_GetFlagStatus(DMA1_FLAG_TC1));  //等待通道1传输完成
DMA_ClearFlag(DMA1_FLAG_TC1);   //清除通道1传输完成标志 
DMA_Cmd(DMA1_Channel1, DISABLE);
ADC_Cmd(ADC1, DISABLE);
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2016-7-24
在线时间
14 小时
发表于 2016-8-17 17:09:27 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-2 20:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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