STM32-ADC電壓測試實驗報告_第1頁
STM32-ADC電壓測試實驗報告_第2頁
STM32-ADC電壓測試實驗報告_第3頁
STM32-ADC電壓測試實驗報告_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

STM32ADC電壓測試實驗報告一、實驗目的1.了解STM32的根本工作原理2.通過實踐來加深對ARM芯片級程序開發(fā)的理解3.利用STM32的ADC1通道0來采樣外部電壓值值,并在TFTLCD模塊上顯示出來二、實驗原理STM32擁有1~3個ADC,這些ADC可以獨立使用,也可以使用雙重模式〔提高采樣率〕。STM32的ADC是12位逐次逼近型的模擬數(shù)字轉換器。它有18個通道,可測量16個外部和2個內部信號源。各通道的A/D轉換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結果可以左對齊或右對齊方式存儲在16位數(shù)據存放器中接下來,我們介紹一下執(zhí)行規(guī)那么通道的單次轉換,需要用到的ADC存放器。第一個要介紹的是ADC控制存放器〔ADC_CR1和ADC_CR2〕。ADC_CR1的各位描述如下:ADC_CR1的SCAN位,該位用于設置掃描模式,由軟件設置和去除,如果設置為1,那么使用掃描模式,如果為0,那么關閉掃描模式,ADC_CR1[19:16]用于設置ADC的操作模式我們要使用的是獨立模式,所以設置這幾位為0就可以了。第二個存放器ADC_CR2,該存放器的各位描述如下:ADCON位用于開關AD轉換器。而CONT位用于設置是否進行連續(xù)轉換,我們使用單次轉換,所以CONT位必須為0。CAL和RSTCAL用于AD校準。ALIGN用于設置數(shù)據對齊,我們使用右對齊,該位設置為0。EXTSEL[2:0]用于選擇啟動規(guī)那么轉換組轉換的外部事件,我們這里使用的是軟件觸發(fā)〔SWSTART〕,所以設置這3個位為111。第三個要介紹的是ADC采樣事件存放器〔ADC_SMPR1和ADC_SMPR2〕,這兩個存放器用于設置通道0~17的采樣時間,每個通道占用3個位對于每個要轉換的通道,采樣時間建議盡量長一點,以獲得較高的準確度,但是這樣會降低ADC的轉換速率。ADC的轉換時間可以由下式計算:Tcovn=采樣時間+12.5個周期第四個要介紹的是ADC規(guī)那么序列存放器〔ADC_SQR1~3〕,第五個要介紹的是ADC規(guī)那么數(shù)據存放器(ADC_DR)。最后一個要介紹的ADC存放器為ADC狀態(tài)存放器〔ADC_SR〕,該存放器保存了ADC轉換時的各種狀態(tài)。三.實驗內容一.實驗步驟1〕開啟PA口時鐘,設置PA0為模擬輸入。STM32F103RBT6的ADC通道0在PA0上,所以,我們先要使能PORTA的時鐘,然后設置PA0為模擬輸入。2〕使能ADC1時鐘,并設置分頻因子。要使用ADC1,第一步就是要使能ADC1的時鐘,在使能完時鐘之后,進行一次ADC1的復位。接著我們就可以通過RCC_CFGR設置ADC1的分頻因子。分頻因子要確保ADC1的時鐘〔ADCCLK〕不要超過14Mhz。3〕設置ADC1的工作模式。在設置完分頻因子之后,我們就可以開始ADC1的模式配置了,設置單次轉換模式、觸發(fā)方式選擇、數(shù)據對齊方式等都在這一步實現(xiàn)。4〕設置ADC1規(guī)那么序列的相關信息。接下來我們要設置規(guī)那么序列的相關信息,我們這里只有一個通道,并且是單次轉換的,所以設置規(guī)那么序列中通道數(shù)為1,然后設置通道0的采樣周期。5〕開啟AD轉換器,并校準。在設置完了以上信息后,我們就開啟AD轉換器,執(zhí)行復位校準和AD校準,注意這兩步是必須的!不校準將導致結果很不準確。6〕讀取ADC值。在上面的校準完成之后,ADC就算準備好了。接下來我們要做的就是設置規(guī)那么序列0里面的通道,然后啟動ADC轉換。在轉換結束后,讀取ADC1_DR里面的值就是了。通過以上幾個步驟的設置,我們就可以正常的使用STM32的ADC1來執(zhí)行AD轉換操作了。二,程序代碼voidAdc_Init(void){//先初始化IO口RCC->APB2ENR|=1<<2;//使能PORTA口時鐘GPIOA->CRL&=0XFFFF0000;//PA0123anolog輸入//通道10/11設置RCC->APB2ENR|=1<<9;//ADC1時鐘使能RCC->APB2RSTR|=1<<9;//ADC1復位RCC->APB2RSTR&=~(1<<9);//復位結束RCC->CFGR&=~(3<<14);//分頻因子清零//SYSCLK/DIV2=12MADC時鐘設置為12M,ADC最大時鐘不能超過14M!//否那么將導致ADC準確度下降!RCC->CFGR|=2<<14;ADC1->CR1&=0XF0FFFF;//工作模式清零ADC1->CR1|=0<<16;//獨立工作模式ADC1->CR1&=~(1<<8);//非掃描模式ADC1->CR2&=~(1<<1);//單次轉換模式ADC1->CR2&=~(7<<17);ADC1->CR2|=7<<17;//軟件控制轉換ADC1->CR2|=1<<20;//使用用外部觸發(fā)(SWSTART)!!!必須使用一個事件來觸發(fā)ADC1->CR2&=~(1<<11);//右對齊ADC1->SQR1&=~(0XF<<20);ADC1->SQR1&=0<<20;//1個轉換在規(guī)那么序列中也就是只轉換規(guī)那么序列1//設置通道0~3的采樣時間ADC1->SMPR2&=0XFFFFF000;//通道0,1,2,3采樣時間清空ADC1->SMPR2|=7<<9;//通道3239.5周期,提高采樣時間可以提高精確度ADC1->SMPR2|=7<<6;//通道2239.5周期,提高采樣時間可以提高精確度ADC1->SMPR2|=7<<3;//通道1239.5周期,提高采樣時間可以提高精確度ADC1->SMPR2|=7<<0;//通道0239.5周期,提高采樣時間可以提高精確度ADC1->CR2|=1<<0;//開啟AD轉換器ADC1->CR2|=1<<3;//使能復位校準while(ADC1->CR2&1<<3);//等待校準結束//該位由軟件設置并由硬件去除。在校準存放器被初始化后該位將被去除。ADC1->CR2|=1<<2;//開啟AD校準while(ADC1->CR2&1<<2);//等待校準結束//該位由軟件設置以開始校準,并在校準結束時由硬件去除}//獲得ADC值//ch:通道值0~3u16Get_Adc(u8ch){//設置轉換序列ADC1->SQR3&=0XFFFFFADC1->CR2|=1<<22;//啟動規(guī)那么轉換通道while(!(ADC1->SR&1<<1));//等待轉換結束returnADC1->DR;//返回adc值}。接下來在adc.h文件里面輸入如下代碼:#ifndef__ADC_H#define__ADC_H//MiniSTM32開發(fā)板//ADC驅動代碼//正點原子@ALIENTEK#defineADC_CH00//通道0#defineADC_CH11//通道1#defineADC_CH22//通道2#defineADC_CH33//通道3voidAdc_Init(void);u16Get_Adc(u8ch);#endif該局部代碼很簡單,這里我們就不多說了,這里定義的4個通道的宏定義,我們在main函數(shù)將會用到ADC_CH0。接下來我們在test.c里面,修改main函數(shù)如下:intmain(void){u16adcx;floattemp;Stm32_Clock_Init(9);//系統(tǒng)時鐘設置delay_init(72);//延時初始化uart_init(72,9600);//串口1初始化LED_Init();LCD_Init();Adc_Init();POINT_COLOR=RED;//設置字體為紅色POINT_COLOR=BLUE;//設置字體為藍色LCD_Sho

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論