類似的問題
為什么我采集5條通道的電壓,而采集到的值卻都是第一條的呢?
我什么時候需要使用DMA功能?
Ⅰ
關(guān)于ADC的一些知識
STM32的ADC是一種12位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器。它有多達(dá)18條通道,可測量16個外部和2個內(nèi)部信號源。
各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。 ADC的結(jié)果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器ADC_DR中。
其實就是說,一個ADC,可檢測18條通道,我們外接的只有16條。而結(jié)果只保存在一個寄存器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)換的結(jié)果只能保存在ADC_DR中。因為規(guī)則通道轉(zhuǎn)換的值儲存在一個僅有的數(shù)據(jù)寄存器中,所以當(dāng)轉(zhuǎn)換多個規(guī)則通道時需要使用DMA,這可以避免丟失已經(jīng)存儲在ADC_DR寄存器中的數(shù)據(jù)。
只有在規(guī)則通道的轉(zhuǎn)換結(jié)束時才產(chǎn)生DMA請求,并將轉(zhuǎn)換的數(shù)據(jù)從ADC_DR寄存器傳輸?shù)接脩糁付ǖ哪康牡刂贰?/p>
也就是說,如不使用DMA,我們采用規(guī)則轉(zhuǎn)換,中間有些存儲在ADC_DR寄存器中的數(shù)據(jù)可能被(下一條通道采集的數(shù)據(jù))覆蓋掉。這就是有人說的“采集到的數(shù)據(jù)不對應(yīng)其通道的值”的原因。
同理,需要這種規(guī)則轉(zhuǎn)換多條通道,就需要使用DMA功能才能完成。
Ⅲ
不使用DMA方式
看了上面使用DMA的情況,相信都應(yīng)該明白:如果使用規(guī)則轉(zhuǎn)換,就最好使用DMA功能。
不使用DMA方式,就需要使用非常奇葩的處理方式:單通道單次轉(zhuǎn)換方式,需要切換通道,不然就會像上面說的,采集不到對應(yīng)通道的數(shù)據(jù)。
STM32的ADC功能非常強大,感興趣的朋友可深入理解一下。
-
STM32
+關(guān)注
關(guān)注
2305文章
11120瀏覽量
371161 -
dma
+關(guān)注
關(guān)注
3文章
577瀏覽量
105353 -
ADC1
+關(guān)注
關(guān)注
0文章
3瀏覽量
8539
發(fā)布評論請先 登錄
自己DIY的STM32F103C8T6最小系統(tǒng)板+ADC使用的是F103的ADC1
STM32G030K6Tx使用ADC+DMA進行6通道ADC采集,DMA傳輸錯位怎么解決?
STM32F405RGT6 ADC2+TIM4觸發(fā)+DMA(DMA2_Stream2_CH1)+DMA中斷會死機,怎么解決?
無法配置 ADC1 來觸發(fā) DMA 傳輸,怎么解決?
【微五科技CF5010RBT60開發(fā)板試用體驗】+A/D數(shù)據(jù)采集
基于APM32F411 DMA_ADC Handler模式分析及解決

STM32的ADC1采集多條通道 可以不使用DMA功能嗎?
評論