老是弄不明白ADC的輸入到底在哪,看了stm32F103Ve的datasheet,將引腳和通道的映射關系貼在下面:
好了,寫到這,我已經看了中文手冊一上午了,可是啥都沒看懂,下午接着看,寫代碼不重要,理論高於實際。
ADC的四種模式:單次轉換模式,連續轉換模式,掃描模式,間斷模式(間斷模式分為規則組和注入組)
單次轉換模式:ADC只執行一次轉換,CONT=0。
連續轉換模式:ADC轉換一結束就啟動另一次轉換,CONT=1。
掃描模式:在每個組的每個通道上執行單次轉換,在每個轉換結束時,同一組的下一個通道被自動轉換。
如果設置了CONT位,轉換不會在選擇組的最后一個通道上停止,而是再次從選擇組的第一個通道繼續轉換。
間斷模式:每一次外部觸發信號可以執行一個短序列的n次轉換(對於規則組n<16,對於注入組n<4),直到此序列的所有轉換完成為 止。
注:當以間斷模式轉換一個規則組時,轉換序列結束后不自動從頭開始。
當所有子組被轉換完成,下一次觸發啟動第一個子組的轉換(下面的第四次觸發)
例如: n=3,被轉換的通道= 0、1、2、3、4、5、6、7
第一次觸發: 轉換的序列為 0、1、2
第二次觸發: 轉換的序列為 3、4、5
第三次觸發: 轉換的序列為 6、7 (此處不從頭開始,此處產生EOC事件)
第四次觸發: 轉換的序列為 0、1、2
放到代碼上看:
單個通道單次轉換:ADC_NbrOfChannel = 1
ADC_ScanConvMode = DISABLE
ADC_ContinuousConvMode = DISABLE
多個通道單次轉換:ADC_NbrOfChannel = n
ADC_ScanConvMode = ENABLE
ADC_ContinuousConvMode = DISABLE
單個通道連續轉換:ADC_NbrOfChannel = 1
ADC_ScanConvMode = DISABLE
ADC_ContinuousConvMode = ENABLE
多個通道連續轉換:ADC_NbrOfChannel = n
ADC_ScanConvMode = ENABLE
ADC_ContinuousConvMode = ENABLE
關於常規掃描模式和注入掃描模式:
先上圖兩張:
規則組是正常的ADC轉換:
注入組實際是通過中斷觸發后來進行掃描轉換。即如下:
總結:關於間斷模式的內容以及注入的內容很少只涉及粗淺的概念,因為我還沒有具體的機會去實踐它,沒有時間去實踐就沒有發言權。。。先把簡單的弄明白好了,有朝一日再相會,千樹萬樹梨花開。