類似的問題
為什么我采集5條通道的電壓,而采集到的值卻都是第一條的呢?
我什么時候需要使用DMA功能?
Ⅰ
關于ADC的一些知識
STM32的ADC是一種12位逐次逼近型的模擬數字轉換器。它有多達18條通道,可測量16個外部和2個內部信號源。
各通道的A/D轉換可以單次、連續、掃描或間斷模式執行。 ADC的結果可以左對齊或右對齊方式存儲在16位數據寄存器ADC_DR中。
其實就是說,一個ADC,可檢測18條通道,我們外接的只有16條。而結果只保存在一個寄存器ADC_DR中。
要使用ADC1采集多條通道,那么就需要對采集的通道進行分組排序。STM32的ADC可以把轉換組織成兩組:規則組和注入組。
假如我們采集的通道按照如下順序完成轉換:通道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轉換的結果只能保存在ADC_DR中。因為規則通道轉換的值儲存在一個僅有的數據寄存器中,所以當轉換多個規則通道時需要使用DMA,這可以避免丟失已經存儲在ADC_DR寄存器中的數據。
只有在規則通道的轉換結束時才產生DMA請求,并將轉換的數據從ADC_DR寄存器傳輸到用戶指定的目的地址。
也就是說,如不使用DMA,我們采用規則轉換,中間有些存儲在ADC_DR寄存器中的數據可能被(下一條通道采集的數據)覆蓋掉。這就是有人說的“采集到的數據不對應其通道的值”的原因。
同理,需要這種規則轉換多條通道,就需要使用DMA功能才能完成。
Ⅲ
不使用DMA方式
看了上面使用DMA的情況,相信都應該明白:如果使用規則轉換,就最好使用DMA功能。
不使用DMA方式,就需要使用非常奇葩的處理方式:單通道單次轉換方式,需要切換通道,不然就會像上面說的,采集不到對應通道的數據。
STM32的ADC功能非常強大,感興趣的朋友可深入理解一下。
-
STM32
+關注
關注
2272文章
10924瀏覽量
357599 -
dma
+關注
關注
3文章
566瀏覽量
100963 -
ADC1
+關注
關注
0文章
3瀏覽量
8339
發布評論請先 登錄
相關推薦
評論