類似的問題
為什么我采集5條通道的電壓,而采集到的值卻都是第一條的呢?
我什么時候需要使用DMA功能?
Ⅰ
關于ADC的一些知識
STM32的ADC是一種12位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器。它有多達18條通道,可測量16個外部和2個內(nèi)部信號源。
各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。 ADC的結果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器ADC_DR中。
其實就是說,一個ADC,可檢測18條通道,我們外接的只有16條。而結果只保存在一個寄存器ADC_DR中。
要使用ADC1采集多條通道,那么就需要對采集的通道進行分組排序。STM32的ADC可以把轉(zhuǎn)換組織成兩組:規(guī)則組和注入組。
假如我們采集的通道按照如下順序完成轉(zhuǎn)換:通道3、通道8、通道2,則需要軟件對其配置:
ADC_RegularChannelConfig(ADC1,ADC_Channel_3,1, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_8,2, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3, ADC_SampleTime_55Cycles5);
Ⅱ
使用DMA方式
從上面的描述中知道,ADC轉(zhuǎn)換的結果只能保存在ADC_DR中。因為規(guī)則通道轉(zhuǎn)換的值儲存在一個僅有的數(shù)據(jù)寄存器中,所以當轉(zhuǎn)換多個規(guī)則通道時需要使用DMA,這可以避免丟失已經(jīng)存儲在ADC_DR寄存器中的數(shù)據(jù)。
只有在規(guī)則通道的轉(zhuǎn)換結束時才產(chǎn)生DMA請求,并將轉(zhuǎn)換的數(shù)據(jù)從ADC_DR寄存器傳輸?shù)接脩糁付ǖ哪康牡刂贰?/p>
也就是說,如不使用DMA,我們采用規(guī)則轉(zhuǎn)換,中間有些存儲在ADC_DR寄存器中的數(shù)據(jù)可能被(下一條通道采集的數(shù)據(jù))覆蓋掉。這就是有人說的“采集到的數(shù)據(jù)不對應其通道的值”的原因。
同理,需要這種規(guī)則轉(zhuǎn)換多條通道,就需要使用DMA功能才能完成。
Ⅲ
不使用DMA方式
看了上面使用DMA的情況,相信都應該明白:如果使用規(guī)則轉(zhuǎn)換,就最好使用DMA功能。
不使用DMA方式,就需要使用非常奇葩的處理方式:單通道單次轉(zhuǎn)換方式,需要切換通道,不然就會像上面說的,采集不到對應通道的數(shù)據(jù)。
STM32的ADC功能非常強大,感興趣的朋友可深入理解一下。
-
STM32
+關注
關注
2270文章
10895瀏覽量
355729 -
dma
+關注
關注
3文章
560瀏覽量
100544 -
ADC1
+關注
關注
0文章
3瀏覽量
8323
發(fā)布評論請先 登錄
相關推薦
評論