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