STM32多通道ADC操作

2022-08-19 10:18:13 字數 1231 閱讀 8650

**自:

今天嘗試了下stm32的adc取樣,並利用dma實現取樣資料的直接搬運儲存,這樣就不用cpu去參與操作了。

找了不少例子參考,adc和dma的設定了解了個大概,並直接利用開發板來做一些實驗來驗證相關的操作,保證自己對各部分設定的理解。

我這裡用了3路的adc通道,1路外部變阻器輸入,另外兩路是內部的溫度取樣和vrefint,這樣就能組成連續的取樣,來測試多通道adc自動掃瞄了,adc分規則轉換和注入轉換,其實規則轉換就是按照既定的設定來順序轉換,而注入轉換就是可以在這順序佇列中插隊一樣,能夠提前轉換了。

初始化設定:

1

//pc0 for anagle sample

2static

void

protect_clkinit(

void)3

89static

void

protect_gpioinit(

void)10

1819

static

void

protect_adcinit(

void)20

5152

static

void

protect_dmainit(

void)53

設定好後測試,發現乙個比較嚴重的問題,我在調製阻器的時候,發現會影響其他2路取樣的資料,且資料變化比較大,我就先測試adc的參考電壓即vref+和vref-,沒發現變化,那取樣的初始化是否會有問題,在網上找了不少的資料,都沒表明我的設定有問題,不過還是發現了乙個不同,就是adc_sampling_time的時間不同。那麼我就把它設定成:

1     adc_regularchannelconfig(adc1,adc_channel_10,1

,adc_sampletime_239cycles5);

2 adc_regularchannelconfig(adc1,adc_channel_tempsensor,2

,adc_sampletime_239cycles5);

3 adc_regularchannelconfig(adc1,adc_channel_vrefint,3,adc_sampletime_239cycles5);

即最大的取樣時間,結果發現確實是這個問題,後來又試了下其他幾個取樣時間,最短也要adc_sampletime_71cycles5,不然資料都會被影響,大概取樣週期不能太短, 不然dma資料傳輸可能會被影響。

STM32的ADC多通道取樣

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

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

stm32庫開發實戰指南 劉火良,楊森著 原理性質的東西還是少講,因為上面那本書裡面講解的很詳細了,直接來看硬體電路圖 這裡使用的是3362電位器 10k 即用stm32來測量pb0和gnd兩端的電壓,這樣的電路設計比較簡單也容易理解,但是存在一定的弊端,下面給出 stm32庫開發實戰指南 上面配套...

STM32 多通道掃瞄 ADC資料錯亂 HAL

問題 多通道adc掃瞄 單次 dma,發現工作一段時間後,dma資料錯位。按我的理解當前是單次模式,轉換完成後應該自動停止,實際過程不太對。解決辦法 在dma搬運結束中斷中關閉adc void hal adc convcpltcallback adc handletypedef hadc 多通道單次...