我們知道,使用ADC規(guī)則組(常規(guī)組)多通道采樣時,必須要配合DMA使用,但有的小伙伴遇到這種應用下數(shù)據(jù)錯位的情況,比如預設的轉換順序是通道0->通道1->通道2,但定義的數(shù)據(jù)buffer中的采樣值卻是通道1->通道2->通道0,那這是為什么呢?
出現(xiàn)這種情況的一個可能原因是——ADC先使能再去配置DMA。我們來看下面的時序:

如果先配置并使能ADC,當觸發(fā)信號來臨,ADC開始轉換,若ADC轉換到通道1的時候,DMA才配置并使能,那么DMA是不會搬運通道0的數(shù)據(jù)的,而是當通道1的轉換結束后,DMA才開始搬運第一個數(shù)據(jù)到buffer[0],所以buffer中的數(shù)據(jù)順序就變成了數(shù)據(jù)1->數(shù)據(jù)2->數(shù)據(jù)0。
我們再來看下先配置DMA再配置ADC的時序:

ADC在轉換第一個通道時,DMA已經準備好搬運數(shù)據(jù),所以DMA的第一次搬運發(fā)生在ADC的第一個通道轉換完成后,故數(shù)據(jù)將不會錯位。
所以小伙伴知道了嗎?ADC+DMA使用的時候,一定要先配置DMA,再配置ADC哦。