datasheet中描述最高12 位可編程分辨率的SAR ADC,多達10 路外部輸入通道。 這句話怎麼理解呢?也就是說有10個IO可以設置爲ADC口線了。內部兩路是屬於內部通道了。
1. 首先ADC轉換要明確目標,我要轉換誰?
這個由通道轉換選擇寄存器(ADC_ADCHS)來選擇要轉換的通道,將相關的bit置位就使能,將相關的位復位就失能。
例如將bit0 和bit1 置位 就等於告訴ADC模塊,喂 ADC 聽好了哦 我接下來要轉換通道0 和通道1 。 當然了也可以設置每個通 道的轉換週期。
2. 怎麼轉換啊?
轉換目標明確了,該怎麼轉換? 有3種模式:
1. 單次轉換模式
用戶設置ADST=1 開始轉換“序號最小”的通道, 你可以在第1步使能 轉換通道0 和通道1。但是抱歉只對通道0做轉換
,通道1 我可不轉換。轉換完成後 ADST=0 ,需要用戶設置 ADST=1來啓動第2次轉換!你不啓動我就不轉換了。
2. 單週期掃描模式
用戶設置ADST=1 開始轉換ADC_ADCHS寄存器中使能的通道(第一步我們設置了通道0 和通道1),簡單的說就是將 通道0和1都做轉換,轉換完成後會自動設置ADST=0,並將結果保存到對應通道的數據保存寄存器 ADDR0 和 ADDR1。 DMA搬運時就是從ADDR0和ADDR1中取出數據搬走!
總結單週期掃描模式: 就是轉換你選擇的N個通道轉換,轉換完N個通道後進入ADC空閒狀態。需要需要用戶設置 ADST=1 來啓動第2次轉換!你不啓動我就不轉換了。
3. 連續掃描模式
連續掃描模式,也是轉換你所選擇的N個通道。和單週期掃描唯一不同的是,轉換完N個通道後不會復位ADST
需要用戶手動清除ADST才能停止! 換句話說就是隻要用戶沒有清除ADST,那麼ADC就會一直 轉換通道0 --> 轉換
通道1,繼續 轉換通道0 --> 轉換 通道1 。。。 周而復始的掃描轉換選擇的通道。
4. 切換選擇通道
我們經常在運行中需要重新選擇轉換通道, 只要修改ADC_ADCHS中的值即可。 值得注意的是修改選擇通道需要在 ADC空閒狀態下才能修改,也就是ADST=0時才能修改。 除了連續掃描模式其他兩種模式都會在轉換完成後,硬件自動設 置ADST=0。
最後來個總結: 3種模式可以混搭,例如只在ADC_ADCHS中只使能一個通道(例如通道5)。 當採用連續掃描模式時, ADC將不停的(對通道5)進行轉換。加入DMA和TIMER後,就可以實現定時對某路信號採集N次後再處理。典型應用是
對某路信號採集2n個點做FFT處理,例如對信號採集512個點後做FFT。ADST=1 的動作可以由用戶代碼設置,也可以由外部引腳信號觸發來設置,當然了還可以由定時器事件設置。