adc循环模式,通过dma传输数据,一次传输完成后如何再开始下一次啊

2019-07-20 14:01发布

我设置adc通过dma模式传输数据,想通过定时器控制每隔一段时间开启一次传输,但是发现进入debug里面,数组的数据无法刷新,但是adc寄存器的数据一直都在刷新,也就是说adc的数据无法通过dma传输,如何我重新初始化adc,结果就可以了,数组的数字可以刷新了。 总之就是想问在adc循环模式,通过dma传输数据的情况下,一次传输完成后如何再开始下一次啊,都需要配置什么啊,还是需要调用哪个函数。把adc什么的全重新初始化一次太占用资源了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
oakxing1
1楼-- · 2019-07-20 15:03
ADC_CR2  DDS置1
0:最后一次传输后不发出新的 DMA 请求(在 DMA 控制器中进行配置)
1:只要发生数据转换且 DMA = 1,便会发出 DAM 请求
jiutianshenjian
2楼-- · 2019-07-20 19:51
 精彩回答 2  元偷偷看……
匿名消息
3楼-- · 2019-07-20 20:10
回复【2楼】jiutianshenjian:
---------------------------------
不是单次模式,是循环模式,adc一直都在工作,dma设置采样50次(我想的是采样完成后应该是自动停止),然后在定时器中断里将这50个数处理完后,我想要重新开启dma刷新数组的数,而且ADC_SoftwareStartConvCmd(ADC1, ENABLE);这个函数为什么不能用啊。
jiutianshenjian
4楼-- · 2019-07-20 20:29
1.你定时器用来干嘛,一般用来控制采集间隔时间吧?
   如果是这样,就不能循环,只能单次。不然定时器有什么用,第一次转换完成马上开始另一次转换,定不住啊。
2.dma是随adc完成触发的,处理数据放到dma完成中断里才对。
3.ADC_SoftwareStartConvCmd(ADC1, ENABLE);例程应该有如何使用吧。

你可以把你初始化代码贴出来让论坛的高手给你看看。
中二电子测控汪
5楼-- · 2019-07-20 23:43
 精彩回答 2  元偷偷看……
中二电子测控汪
6楼-- · 2019-07-21 05:34
噗,错了,没注意看你的要求,你需要设置软件触发,只需要在需要ad转换的时候开启,你可以开启扫描和循环模式(此时你的软件触发只需要开启一次),然后注意设置dma的缓存大小,建议设置为n*50(因为你n个通道分别转换50次) 在获取每个ad值赋值给数组,每50个求平均,然后赋给一个一位数组(个数由通道数决定),

一周热门 更多>