STM32ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第1頁(yè)
STM32ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第2頁(yè)
STM32ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第3頁(yè)
STM32ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第4頁(yè)
STM32ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

STM32ADC電壓測(cè)試實(shí)驗(yàn)報(bào)告STM32AD電C壓測(cè)試實(shí)驗(yàn)報(bào)告?、實(shí)驗(yàn)?的1.了解STM32的基本?作原理2.通過(guò)實(shí)踐來(lái)加深對(duì)ARM芯?級(jí)程序開(kāi)發(fā)的理解3.利?STM32的ADC1通道0來(lái)采樣外部電壓值值,并在TFTLC模D塊上顯?出來(lái)?、實(shí)驗(yàn)原理STM32擁有1~3個(gè)ADC,這些ADC可以獨(dú)?使?,也可以使?雙重模式(提?采樣率)。STM32的ADC是12位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器。它有18個(gè)通道,可測(cè)量16個(gè)外部和2個(gè)內(nèi)部信號(hào)源。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)?。ADC的結(jié)果可以左對(duì)齊或右對(duì)齊?式存儲(chǔ)在16位數(shù)據(jù)寄存器中接下來(lái),我們介紹?下執(zhí)?規(guī)則通道的單次轉(zhuǎn)換,需要?到的ADC寄存器。第?個(gè)要介紹的是ADC和ADC_CR2)。ADC_CR1的各位描述如下:ADC_CR1ADC_CR1的SCAN位,該位?于設(shè)置掃描模式,由軟件設(shè)置和清除,如果設(shè)置為1,則使?掃描模式,如果為0,則關(guān)閉掃描模式,ADC_CR1[19:16]?于設(shè)置ADC的操作模式我們要使?的是獨(dú)?模式,所以設(shè)置這?位為0就可以了。第?個(gè)寄存器ADC_CR2,該寄存器的各位描述如下:ADCON位?于開(kāi)關(guān)AD轉(zhuǎn)換器。?CONT位?于設(shè)置是否進(jìn)?連續(xù)轉(zhuǎn)換,我們使?單次轉(zhuǎn)換,所以CONT位必須為0。CAL和RSTCAL?于AD校準(zhǔn)。ALIGN?于設(shè)置數(shù)據(jù)對(duì)齊,我們使?右對(duì)齊,該位設(shè)置為0。EXTSEL[2:0]?于選擇啟動(dòng)規(guī)則轉(zhuǎn)換組轉(zhuǎn)換的外部事件,我們這?使?的是軟件觸發(fā)(SWSTART),所以設(shè)置這3個(gè)位為111。第三個(gè)要介紹的是ADC采樣事件寄存器(ADC_SMPR1和ADC_SMPR2),這兩個(gè)寄存器?于設(shè)置通道0~17的采樣時(shí)間,每個(gè)通道占?3個(gè)位對(duì)于每個(gè)要轉(zhuǎn)換的通道,采樣時(shí)間建議盡量長(zhǎng)?點(diǎn),以獲得較?的準(zhǔn)確度,但是這樣會(huì)降低ADC的轉(zhuǎn)換速率。ADC的轉(zhuǎn)換時(shí)間可以由下式計(jì)算:Tcovn=采樣時(shí)間+12.5個(gè)周期第四個(gè)要介紹的是ADC規(guī)則序列寄存器(ADC_SQR1~3),第五個(gè)要介紹的是ADC規(guī)則數(shù)據(jù)寄存器(ADC_DR)。最后?個(gè)要介紹的ADC寄存器為ADC狀態(tài)寄存器(ADC_SR),該寄存器保存了ADC轉(zhuǎn)換時(shí)的各種狀態(tài)。三.實(shí)驗(yàn)內(nèi)容?.實(shí)驗(yàn)步驟1)開(kāi)啟PA?時(shí)鐘,設(shè)置PA0為模擬輸?。STM32F103RBT6的ADC通道0在PA0上,所以,我們先要使能PORTA的時(shí)鐘,然后設(shè)置PA0為模擬輸?。2)使能ADC1時(shí)鐘,并設(shè)置分頻因?。要使?ADC1,第?步就是要使能ADC1的時(shí)鐘,在使能完時(shí)鐘之后,進(jìn)??次ADC1的復(fù)位。接著我們就可以通過(guò)RCC_CFGR設(shè)置ADC1的分頻因?。分頻因?要確保ADC1的時(shí)鐘(ADCCLK)不要超過(guò)14Mhz。3)設(shè)置ADC1的?作模式。在設(shè)置完分頻因?之后,我們就可以開(kāi)始ADC1的模式配置了,設(shè)置單次轉(zhuǎn)換模式、觸發(fā)?式選擇、數(shù)據(jù)對(duì)齊?式等都在這?步實(shí)現(xiàn)。4)設(shè)置ADC1規(guī)則序列的相關(guān)信息。接下來(lái)我們要設(shè)置規(guī)則序列的相關(guān)信息,我們這?只有?個(gè)通道,并且是單次轉(zhuǎn)換的,所以設(shè)置規(guī)則序列中通道數(shù)為1,然后設(shè)置通道0的采樣周期。5)開(kāi)啟AD轉(zhuǎn)換器,并校準(zhǔn)。在設(shè)置完了以上信息后,我們就開(kāi)啟AD轉(zhuǎn)換器,執(zhí)?復(fù)位校準(zhǔn)和AD校準(zhǔn),注意這兩步是必須的!不校準(zhǔn)將導(dǎo)致結(jié)果很不準(zhǔn)確。6)讀取ADC值。在上?的校準(zhǔn)完成之后,ADC就算準(zhǔn)備好了。接下來(lái)我們要做的就是設(shè)置規(guī)則序列0??的通道,然后啟動(dòng)ADC轉(zhuǎn)換。在轉(zhuǎn)換結(jié)束后,讀取ADC1_DR??的值就是了。通過(guò)以上?個(gè)步驟的設(shè)置,我們就可以正常的使?STM32的ADC1來(lái)執(zhí)?AD轉(zhuǎn)換操作了。?,程序代碼voidAdc_Init(void){//先初始化IO?RCC->APB2ENR|=1<<2;//使能PORTA?時(shí)鐘GPIOA->CRL&=0XFFFF0000;//PA0123anolog輸?//通道10/11設(shè)置RCC->APB2ENR|=1<<9;//ADC1時(shí)鐘使能RCC->APB2RSTR|=1<<9;//ADC1復(fù)位RCC->APB2RSTR&=~(1<<9);//復(fù)位結(jié)束RCC->CFGR&=~(3<<14);//分頻因?清零//SYSCLK/DIV2=12MADC時(shí)鐘設(shè)置為12M,ADC最?時(shí)鐘不能超過(guò)14M!//否則將導(dǎo)致ADC準(zhǔn)確度下降!RCC->CFGR|=2<<14;ADC1->CR1&=0XF0FFFF;//?作模式清零ADC1->CR1|=0<<16;//獨(dú)??作模式ADC1->CR1&=~(1<<8);//?掃描模式ADC1->CR2&=~(1<<1);//單次轉(zhuǎn)換模式ADC1->CR2&=~(7<<17);ADC1->CR2|=7<<17;//軟件控制轉(zhuǎn)換ADC1->CR2|=1<<20;//使??外部觸發(fā)(SWSTART)必須使??個(gè)事件來(lái)觸發(fā)ADC1->CR2&=~(1<<11);//右對(duì)齊ADC1->SQR1&=~(0XF<<20);ADC1->SQR1&=0<<20;//1個(gè)轉(zhuǎn)換在規(guī)則序列中也就是只轉(zhuǎn)換規(guī)則序列1//設(shè)置通道0~3的采樣時(shí)間ADC1->SMPR2&=0XFFFFF000;//通道0,1,2,3采樣時(shí)間清空ADC1->SMPR2|=7<<9;//通道3239.5周期,提?采樣時(shí)間可以提?精確度ADC1->SMPR2|=7<<6;//通道2239.5周期,提?采樣時(shí)間可以提?精確度ADC1->SMPR2|=7<<3;//通道1239.5周期,提?采樣時(shí)間可以提?精確度ADC1->SMPR2|=7<<0;//通道0239.5周期,提?采樣時(shí)間可以提?精確度ADC1->CR2|=1<<0;//開(kāi)啟AD轉(zhuǎn)換器

ADC1->CR2|=1<<3;//使能復(fù)位校準(zhǔn)while(ADC1->CR2&1<<3);//等待校準(zhǔn)結(jié)束//該位由軟件設(shè)置并由硬件清除。在校準(zhǔn)寄存器被初始化后該位將被清除。ADC1->CR2|=1<<2;//開(kāi)啟AD校準(zhǔn)while(ADC1->CR2&1<<2);//等待校準(zhǔn)結(jié)束//該位由軟件設(shè)置以開(kāi)始校準(zhǔn),并在校準(zhǔn)結(jié)束時(shí)由硬件清除}//獲得ADC值//ch:通道值0~3u16Get_Adc(u8ch){//設(shè)置轉(zhuǎn)換序列ADC1->SQR3&=0XFFFFFADC1->CR2|=1<<22;//啟動(dòng)規(guī)則轉(zhuǎn)換通道while(!(ADC1->SR&1<<1));//等待轉(zhuǎn)換結(jié)束returnADC1->DR;//返回adc值}。接下來(lái)在adc.h?件??輸?如下代碼:#ifndef__ADC_H#define__ADC_H//MiniSTM32開(kāi)發(fā)板//ADC驅(qū)動(dòng)代碼//正點(diǎn)原?@ALIENTEK#defineADC_CH00//通道0#defineADC_CH11//通道1#defineADC_CH22//通道2#defineADC_CH33//通道3voidAdc_Init(void);u16Get_Adc(u8ch);#endif該部分代碼很簡(jiǎn)單,這?我們就不多說(shuō)了,這?定義的4個(gè)通道的宏定義,我們?cè)趍ain函數(shù)將會(huì)?到ADC_CH0。接下來(lái)我們?cè)趖est.c??,修改main函數(shù)如下:intmain(void){u16adcx;

floattemp;Stm32_Clock_Init(9);//系統(tǒng)時(shí)鐘設(shè)置delay_init(72);//延時(shí)初始化uart_init(72,9600);//串?1初始化LED_Init();LCD_Init();Adc_Init();PO

溫馨提示

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

評(píng)論

0/150

提交評(píng)論