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

如果先配置并使能ADC,當(dāng)觸發(fā)信號(hào)來臨,ADC開始轉(zhuǎn)換,若ADC轉(zhuǎn)換到通道1的時(shí)候,DMA才配置并使能,那么DMA是不會(huì)搬運(yùn)通道0的數(shù)據(jù)的,而是當(dāng)通道1的轉(zhuǎn)換結(jié)束后,DMA才開始搬運(yùn)第一個(gè)數(shù)據(jù)到buffer[0],所以buffer中的數(shù)據(jù)順序就變成了數(shù)據(jù)1->數(shù)據(jù)2->數(shù)據(jù)0。
我們?cè)賮砜聪孪扰渲肈MA再配置ADC的時(shí)序:

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