我们知道,使用ADC规则组(常规组)多通道采样时,必须要配合DMA使用,但有的小伙伴遇到这种应用下数据错位的情况,比如预设的转换顺序是通道0->通道1->通道2,但定义的数据buffer中的采样值却是通道1->通道2->通道0,那这是为什么呢?
出现这种情况的一个可能原因是——ADC先使能再去配置DMA。我们来看下面的时序:

如果先配置并使能ADC,当触发信号来临,ADC开始转换,若ADC转换到通道1的时候,DMA才配置并使能,那么DMA是不会搬运通道0的数据的,而是当通道1的转换结束后,DMA才开始搬运第一个数据到buffer[0],所以buffer中的数据顺序就变成了数据1->数据2->数据0。
我们再来看下先配置DMA再配置ADC的时序:

ADC在转换第一个通道时,DMA已经准备好搬运数据,所以DMA的第一次搬运发生在ADC的第一个通道转换完成后,故数据将不会错位。
所以小伙伴知道了吗?ADC+DMA使用的时候,一定要先配置DMA,再配置ADC哦。
-
单片机
+关注
关注
6074文章
45340浏览量
663562 -
adc
+关注
关注
100文章
7392浏览量
553802 -
GD32
+关注
关注
7文章
429浏览量
26939 -
muc
+关注
关注
0文章
15浏览量
11691
发布评论请先 登录
GD32F310-ADC规则组连续采样
在GD32F427开发板上实现ADC规则组连续采样
STM32G070 DMA ADC通道数据错位
【GD32】GD32读取ADC数据
【GD32】GD32 DMA+ADC多通道扫描
如何通过GD32 MCU内部ADC参考电压通道提高采样精度?
GD32 ADC转换时间如何计算?

GD32 ADC规则组多通道采样,数据发生错位?
评论