我们知道,使用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哦。
全部0条评论
快来发表一下你的评论吧 !