OpenEdv-开源电子网

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

大佬们求教一个关于ADC使用DMA的问题

[复制链接]

29

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2018-3-2
在线时间
50 小时
发表于 2018-3-27 17:51:18 | 显示全部楼层 |阅读模式
1金钱
怎么开启ADC的DMA传输功能?ADC使用DMA是配置完直接这样开启吗?
pdata是搬运后的数据源还是ADC读取的数据源?
如果是搬运后的数据地址那么ADC的数据DMA会自动读取吗到pdata内存目的地址吗?
ADCSTARTDMA.png
下面两组函数,第一组是ADC的DMA传输完成回调函数,第二组是DMA里面的传输完成回调函数,这两组在ADC配置DMA里面怎么用,应该用哪组?
ADCIR.png ADCIRC.png
DMAI.png DMAIRC.png
折腾了很久啦,没有找到ADC配置DMA的正确步骤,求大神赐教,不胜感激!!!

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

使用道具 举报

29

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2018-3-2
在线时间
50 小时
 楼主| 发表于 2018-3-27 17:55:19 | 显示全部楼层
回复

使用道具 举报

29

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2018-3-2
在线时间
50 小时
 楼主| 发表于 2018-3-27 18:06:37 | 显示全部楼层
ADCSTARTDMA.png
这个函数具体是什么作用啊
回复

使用道具 举报

29

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2018-3-2
在线时间
50 小时
 楼主| 发表于 2018-3-27 20:27:53 | 显示全部楼层
还有HAL_DMAEx_MultiBufferStart这个函数开启双缓冲后,它是一个满后自动跳转到另外个继续缓冲吗?
一个缓冲满后有什么时间触发吗?我是要一边缓冲一边处理数据,信息啊
回复

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
发表于 2018-3-27 20:59:02 | 显示全部楼层
要是你只是用DMA控制数据从ADC到存储器,不用回调函数啊!ADC连续扫描模式 + DMA循环传送 能满足你的需求不?
回复

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
发表于 2018-3-27 21:01:05 | 显示全部楼层
安富莱教程里有讲ADC比较全面,我这有32F4的源码你可以参考一下配置:https://pan.baidu.com/s/1D5WUQ58VPxxDQm9I3wGTpw
不忘初心,方得始终!
回复

使用道具 举报

29

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2018-3-2
在线时间
50 小时
 楼主| 发表于 2018-3-28 16:40:41 | 显示全部楼层
王建峰 发表于 2018-3-27 20:59
要是你只是用DMA控制数据从ADC到存储器,不用回调函数啊!ADC连续扫描模式 + DMA循环传送 能满足你的需求不 ...

好的,回调函数我只是用来测试数据是否真的传输过来。配置DMA,开启HAL_DMA_START();就可以了吗?
回复

使用道具 举报

29

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2018-3-2
在线时间
50 小时
 楼主| 发表于 2018-3-28 16:44:31 | 显示全部楼层
王建峰 发表于 2018-3-27 20:59
要是你只是用DMA控制数据从ADC到存储器,不用回调函数啊!ADC连续扫描模式 + DMA循环传送 能满足你的需求不 ...

我照这样配置,不行啊,怎么验证数据是否传输成功?
回复

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
发表于 2018-3-28 20:51:24 | 显示全部楼层
进无止境6A 发表于 2018-3-28 16:44
我照这样配置,不行啊,怎么验证数据是否传输成功?

在主函数里将保存在内存里的AD转换量printf打印出来查看就好,就像给你发的那个例程那样。有结果就代表传输过来了呗!
不忘初心,方得始终!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-29 01:41:36 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

29

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2018-3-2
在线时间
50 小时
 楼主| 发表于 2018-3-31 22:50:32 | 显示全部楼层
王建峰 发表于 2018-3-28 20:51
在主函数里将保存在内存里的AD转换量printf打印出来查看就好,就像给你发的那个例程那样。有结果就代表传 ...

我参考了例程,并没有发现什么,
dma循环模式,然后在传输完成中断里面打印值,结果只能持续打印ch出adc第一次的值,不知道哪里出错了,
adc调试过了一直在工作,只是我虽然设置一秒触发一次采样,但是调试过程中它是一直在转换DR里面看的,这有问题吗?
回复

使用道具 举报

29

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2018-3-2
在线时间
50 小时
 楼主| 发表于 2018-3-31 22:51:23 | 显示全部楼层
王建峰 发表于 2018-3-28 20:51
在主函数里将保存在内存里的AD转换量printf打印出来查看就好,就像给你发的那个例程那样。有结果就代表传 ...

谢谢啊
回复

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
发表于 2018-4-1 07:52:44 | 显示全部楼层
本帖最后由 王建峰 于 2018-4-1 07:54 编辑

你的问题解决了没?我前几天也在调ADC,已经调好了。ADC1+DMA 4通道连续扫描模式:链接 https://pan.baidu.com/s/1FlrjU-elNEGKvqAj1_hGlA 。你可以参考下配置,看看你的代码哪里出错。
不忘初心,方得始终!
回复

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3441
金钱
3441
注册时间
2015-4-19
在线时间
373 小时
发表于 2020-12-22 15:07:46 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 17:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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