STM32的ADC取樣與多通道ADC取樣

2021-07-11 18:23:44 字數 2413 閱讀 1899

《stm32庫開發實戰指南》 劉火良,楊森著

原理性質的東西還是少講,因為上面那本書裡面講解的很詳細了,直接來看硬體電路圖

這裡使用的是3362電位器(10k),即用stm32來測量pb0和gnd兩端的電壓,這樣的電路設計比較簡單也容易理解,但是存在一定的弊端,下面給出《stm32庫開發實戰指南》上面配套的硬體電路圖

如果設計電路圖的話,可以參考這種思路。

我的收穫

1 引腳初始化的時候需要注意

每乙個adc通道都對應乙個gpio引腳,看圖中的adc123_in10,表示這個引腳(pc0)可以配置為adc1的通道10,或者是adc2的通道10,或者是adc3的通道10,這個地方非常重要,涉及到後面adc初始化時函式的呼叫。

比如當我們使能adc時,我們呼叫的函式是

adc_cmd();
如果我們使用的是adc1,那麼上面函式的寫法就應該是

adc_cmd(adc1,enable);
相應的如果是adc2,那麼上面函式的寫法就是

adc_cmd(adc2,enable);
另外需要注意的是,我們這裡的adc使用了dma,所以如果你使用的是adc1,那麼對應的dma就應該是dma1的通道1

如果使用的是adc2或者是adc3就需要自己去查詢手冊,看看對應的是哪個dma的那個通道。

在後面上傳的程式中可以看到dma初始化的時候有這麼一條語句

dma_init(dma1_channel1);
這就是初始化dma1的通道1

相應的

dma_cmd(dma1_channel1,enable);
就是使能dma1的通道1

總結一句,配置的io口不同,對應adc和dma就不同

在單通道的adc取樣中,注意上面這乙個點就可以了,但是多通道取樣還需要注意其他的一些地方

二 多通道取樣

還是看上面的電路圖

這裡我們假設使用pb0和pc0埠來採集電壓。

stm32有三個adc,每個adc對應16個通道,這裡我們只是用其中的兩個通道來做說明。

在程式中pb0設定為adc1的通道8,pc0設定為adc1的通道10。

需要注意的幾個點:

1 引腳的配置,在上面已經說到

2 adc模式的一些配置

對adc模式的配置主要是通過對adc_inittypedef結構體成員的初始化來完成的。

adc_inittypedef adc_initstructure;
adc_initstructure.adc_scanconvmode=enable;
結構體的這個成員主要是用來設定adc的掃瞄模式,我們使用通道8和通道10,當然要允許adc進行通道的掃瞄

adc_initstructure.adc_nbrofchannel=2;
這個結構體成員是用來表明要轉換的通道數目,這裡我們使用通道8和通道10兩個通道,那麼這個值必然是2。

adc_regularchannelconfig();
這是乙個非常重要的函式

這是從《stm32庫函式使用手冊》中截到的圖,關於函式具體引數的使用可以去看該手冊。

下面結合程式來看一下這個函式的使用

函式的第三個引數是用來設定取樣順序的,看我們的程式,也就是說我們設定adc1的通道8先進行取樣,接著adc1的通道10再進行取樣。

寫到這裡,基本上多通道adc取樣程式就差不多了,至於具體的dma使用可以參考我後面上傳的程式。

STM32的ADC多通道取樣

用hal庫寫的好處就是可以不用進行配置io口發步驟.有良好的相容性,更換晶元的時候改 也簡單.rcc我在左側的 裡不用勾選,因為我用的是內部時鐘,不用選.下面是我配置的時鐘 之所以是48m,還要分頻呢.下面直接上 其他的都預設.然後按alt p,設定下工程,格式如下 這個可以把 格式更模組化。建議選...

STM32多通道ADC操作

自 今天嘗試了下stm32的adc取樣,並利用dma實現取樣資料的直接搬運儲存,這樣就不用cpu去參與操作了。找了不少例子參考,adc和dma的設定了解了個大概,並直接利用開發板來做一些實驗來驗證相關的操作,保證自己對各部分設定的理解。我這裡用了3路的adc通道,1路外部變阻器輸入,另外兩路是內部的...

經典 STM32 ADC多通道取樣的例子

stm32 adc多通道轉換 描述 用adc連續採集11路模擬訊號,並由dma傳輸到記憶體。adc配置為掃瞄並且連續轉換模式,adc的時鐘配置為12mhz。在每次轉換結束後,由dma迴圈將轉換的資料傳輸到記憶體中。adc可以連續採集n次求平均值。最後通過串列埠傳輸出最後轉換的結果。程式如下 i nc...