天天看點

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

STM32外設之ADC

ADC是我們可開發工程中必須掌握的外設。

ADC簡介(具體看stm32中文參照手冊)

STM32f103 系列有 3 個 ADC,精度為 12 位,每個 ADC 最多有 16 個外部通道。其中ADC1 和 ADC2 都有 16 個外部通道, ADC3 根據 CPU 引腳的不同通道數也不同,一般都有8 個外部通道。

*今天我們例八步驅動ADC,掌握如何看參考資料和庫函數指導

根據功能框圖分成八步!!*重點内容*

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

(引用自野火零角度玩轉STM32)

1. 第一步:電壓輸入

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

我們這裡的VDD=3.3V,Vref- 、’Vref+其實就是接着我們的轉換通道

2. 第二步:輸入通道選擇

● 規則組:就是我們平時用的通道,老老實實的。選用應寫入ADC_CR1的DISCEN位。

● 注入組:就是可以插隊轉換。由應寫入ADC_CR1的JDISCEN。

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

3. *第三步:确定轉換順序

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

規則組轉換順序是通過SQR1、2、3控制決定的

SQR3控制第1-6次轉換;

SQR2控制7-12次轉化;

SRQ1控制第13-18次轉換;

(我也不知道為什麼會反過來的)

那麼我們有十六個通道要轉換,(通道1、2、3。。。16)

如果通道8想最先轉換,就配置SQR3的SQ1【4:0】為8

同理通道2想第8個轉換 ,就配置SQR2的SQ8【4:0】為2

(自己可以對着寄存器帶代入)

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

注入組轉換順序由JSQR決定,如果 JL 的 值小于 4 的話,則 JSQR 跟 SQR 決定轉換順序的設定,當JL=4的時候跟SQR一樣

例如:

有一個轉換通道的時候,第一個轉換應該是配置JSQR4-1即是JSQR3,

有四個的時候就配置JSQR1.

4. 第四步:觸發源配置

ADC有三個打開方式:

1直接控制ADC_CR2的ADON、STRT、JSTRT

2外部io觸發

3定時器觸發

具體根據需求進行選擇

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

5. 第五步:轉換時間

時鐘配置:

根據時鐘樹可知道,ADC_CLK有PCLK2分頻得到,最大為14M

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

通過配置ADCPRC這是2/4/6/8分頻。(我們的PCLK2一般為72M)

采樣時間配置:

采樣的周期數可通過 ADC采樣時間寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位設定, ADC_SMPR2 控制的是通道 0~9, ADC_SMPR1 控制的是通道 10~17。

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

公式為: Tconv = 采樣時間 +12.5 個周期。

假如配置為100 則Tconv=12.5+41.5=54個周期(12M下大約4.5us)

!!轉換時間越短,誤差越大。

7. 第七步:資料寄存器

規則組:ADC_DR。

STM32學習之路 X 八步掌握ADCSTM32外設之ADCADC簡介(具體看stm32中文參照手冊)

由手冊我們知道這話四32位的寄存器,而我們的轉換精度是12位,是以單模式下隻用低16位置,一般要右對齊。

注入組:ADC_JDRX(有四個,自行查詢手冊)

8. 第七步:中斷

轉換結束後有三種中斷:規則通道結束中斷,注入通道結束中斷,模拟看門狗中斷。前兩個中斷跟平常的中斷很相似,我們講一下模拟看門狗中斷。模拟看門狗就是設定一個高低門檻值,由ADC_LCR和ADC_HTR決定,超過門檻值同樣發生中斷。

9.第八步:電壓轉換

前面也提到過ADC精度為12位數字。我們把它轉換成模拟電壓。

輸入電壓是3.3v,假設轉換後數值x,模拟電壓:y

公式

x212=y3.3 x 2 12 = y 3.3

我們通過寄存器了解整個ADC的轉換過程,看起來很複雜,其實我們用到庫函數的時候就很簡答了。在這個學習過程中,我們要學會檢視寄存器,檢視庫函數幫助手冊。下次将更新庫函數配置ADC!!