本文轉載自 http://www.cnblogs.com/LJWJL/p/4593246.html
ADC時鐘:
這個ADC時鐘是從哪來的呢。我們看下面這個STM32的時鐘結構圖:
我們大多使用STM32的最快PCLK2系統時鐘72MHz。
ADCCLK的時鐘由72MHz的6分頻能瞞住14MHz以下的要求 爲12MHz。
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC最大時間不能超過14M
ADC轉換時間:
有如下公式: TCONV = 採樣時間+ 12.5 個週期
其中12.5個週期是採集12位AD時間是固定的,另外一個採樣時間可以取下面幾個參數由SMPx[2:0]寄存器控制,每個通道可以單獨配置。
000:1.5週期
100:41.5週期
001:7.5週期
101:55.5週期
010:13.5週期
110:71.5週期
011:28.5週期
111:239.5週期
當我們選擇1.5週期時。轉換時間 = 1.5+12.5 = 14週期。
當時鍾配置爲12MHz時 轉換時間 = 14/12 = 1.167us.
其中有人就有疑問 爲什麼系統時鐘72MHz 竟然達不到手冊上說的1MHz- 1us的採樣 。
其實我們要了解,真正決定ADC轉換速度的不是系統時鐘72MHz 而是不超過14MHz的 ADCCLK。 當我們配置系統時鐘爲72MHz的時候 ADCCLK 最大爲12MHz.所以轉換速度稍微慢了。
當我們把系統時鐘設置爲56MHz的時候,經過4div正好爲14MHz,此時就能達到1us的採樣。但是測試發現如果按照最快速度轉換ADC結果不是很準確。