第15章 模擬數(shù)字轉(zhuǎn)換器ADC(自學(xué)內(nèi)容)_第1頁
第15章 模擬數(shù)字轉(zhuǎn)換器ADC(自學(xué)內(nèi)容)_第2頁
第15章 模擬數(shù)字轉(zhuǎn)換器ADC(自學(xué)內(nèi)容)_第3頁
第15章 模擬數(shù)字轉(zhuǎn)換器ADC(自學(xué)內(nèi)容)_第4頁
第15章 模擬數(shù)字轉(zhuǎn)換器ADC(自學(xué)內(nèi)容)_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第15章模擬/數(shù)字轉(zhuǎn)換器(ADC)12位ADC是一種逐次逼近型模擬數(shù)字轉(zhuǎn)換器。它有18個通道,可測量16個外部和2個內(nèi)部信號源。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器中。模擬看門狗特性允許應(yīng)用程序檢測輸入電壓是否超出用戶定義的高/低閥值值。一、ADC的構(gòu)成1、主要特征12位分辨率轉(zhuǎn)換結(jié)束,注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時產(chǎn)生中斷單次和連續(xù)轉(zhuǎn)換模式從通道0到通道n的自動掃描模式自校準(zhǔn)帶內(nèi)嵌數(shù)據(jù)一致的數(shù)據(jù)對齊通道之間采樣間隔可編程規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項間斷模式雙重模式(帶2個ADC的器件)ADC轉(zhuǎn)換速率1MHzADC供電要求:2.4V到3.6VADC輸入范圍:VREF-≤VIN≤VREF+規(guī)則通道轉(zhuǎn)換期間有DMA請求產(chǎn)生。2、內(nèi)部框圖名稱信號類型注解VREF+輸入,模擬參考正極ADC使用的高端/正極參考電壓,VSSA≤VREF+≤VDDAVDDA輸入,模擬電源等效于VDD的模擬電源且:2.4V≤VDDA≤VDD(3.6V)VREF-輸入,模擬參考負(fù)極ADC使用的低端/負(fù)極參考電壓,VREF-=VSSAVSSA輸入,模擬電源地等效于VSS的模擬電源地ADC_IN[15:0]模擬輸入信號16個模擬輸入通道EXTSEL[2:0]輸入,數(shù)字開始規(guī)則成組轉(zhuǎn)換的六個外部觸發(fā)信號JEXTSEL[2:0]輸入,數(shù)字開始注入成組轉(zhuǎn)換的六個外部觸發(fā)信號3、引腳描述二、ADC的功能描述1、ADC開關(guān)控制通過設(shè)置ADC_CR1寄存器的ADON位可給ADC上電。當(dāng)?shù)谝淮卧O(shè)置ADON位時,它將ADC從斷電狀態(tài)下喚醒;ADC上電延遲一段時間后(tSTAB),再次設(shè)置ADON位時開始進(jìn)行轉(zhuǎn)換;通過清除ADON位可以停止轉(zhuǎn)換,并將ADC置于斷電模式。2、ADC時鐘 由時鐘控制器提供的ADCCLK時鐘和PCLK2(APB2時鐘)同步,CLK控制器為ADC時鐘提供一個專用的可編程預(yù)分頻器。3、通道選擇有16個多路通道??梢园艳D(zhuǎn)換分成兩組:規(guī)則組和注入組。可以在任意多個通道上以任意順序進(jìn)行的一系列轉(zhuǎn)換構(gòu)成成組轉(zhuǎn)換。例如,可以如下順序完成轉(zhuǎn)換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。規(guī)則組由多達(dá)16個轉(zhuǎn)換組成。規(guī)則通道和它們的轉(zhuǎn)換順序在ADC_SQRx寄存器中選擇。規(guī)則組中轉(zhuǎn)換的總數(shù)寫入ADC_SQR1寄存器的L[3:0]位中。注入組由多達(dá)4個轉(zhuǎn)換組成。注入通道和它們的轉(zhuǎn)換順序在ADC_JSQR寄存器中選擇。注入組里的轉(zhuǎn)換總數(shù)目寫入ADC_JSQR寄存器的L[1:0]位中。溫度傳感器和通道ADC_IN16相連接,內(nèi)部參考電壓VREFINT和ADC_IN17相連接??梢园醋⑷牖蛞?guī)則通道對這兩個內(nèi)部通道進(jìn)行轉(zhuǎn)換。4、單次轉(zhuǎn)換模式

單次轉(zhuǎn)換模式里,ADC只執(zhí)行一次轉(zhuǎn)換。一旦選擇通道的轉(zhuǎn)換完成:如果一個規(guī)則通道被轉(zhuǎn)換:轉(zhuǎn)換數(shù)據(jù)被儲存在16位ADC_DR寄存器中,EOC(轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置,如果設(shè)置了EOCIE,則產(chǎn)生中斷。如果一個注入通道被轉(zhuǎn)換:轉(zhuǎn)換數(shù)據(jù)被儲存在16位的ADC_DRJ1寄存器中,JEOC(注入轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置,如果設(shè)置了JEOCIE位,則產(chǎn)生中斷。然后ADC停止。5、連續(xù)轉(zhuǎn)換模式

在連續(xù)轉(zhuǎn)換模式中,當(dāng)前面ADC轉(zhuǎn)換一結(jié)束馬上就啟動另一次轉(zhuǎn)換。每個轉(zhuǎn)換后:如果一個規(guī)則通道被轉(zhuǎn)換:轉(zhuǎn)換數(shù)據(jù)被儲存在16位的ADC_DR寄存器中,EOC(轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置,如果設(shè)置了EOCIE,則產(chǎn)生中斷。如果一個注入通道被轉(zhuǎn)換:轉(zhuǎn)換數(shù)據(jù)被儲存在16位的ADC_DRJ1寄存器中,JEOC(注入轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置,如果設(shè)置了JEOCIE位,則產(chǎn)生中斷。6、時序圖

ADC在開始精確轉(zhuǎn)換前需要一個穩(wěn)定時間tSTAB

。在開始ADC轉(zhuǎn)換和14個時鐘周期后,EOC標(biāo)志被設(shè)置,16位ADC數(shù)據(jù)寄存器包含轉(zhuǎn)換的結(jié)果。8、掃描模式 此模式用來掃描一組模擬通道。在每個組的每個通道上執(zhí)行單次轉(zhuǎn)換,在每個轉(zhuǎn)換結(jié)束時,同一組的下一個通道被自動轉(zhuǎn)換。如果設(shè)置了CONT位,轉(zhuǎn)換不會在選擇組的最后一個通道上停止,而是再次從選擇組的第一個通道繼續(xù)轉(zhuǎn)換。如果設(shè)置了DMA位,在每次EOC后,DMA控制器把規(guī)則組通道的轉(zhuǎn)換數(shù)據(jù)傳輸?shù)絊RAM中。而注入通道轉(zhuǎn)換的數(shù)據(jù)總是存儲在ADC_JDRx寄存器中。三、校準(zhǔn)ADC有一個內(nèi)置自校準(zhǔn)模式。校準(zhǔn)可大幅減小因內(nèi)部電容器組的變化而造成的準(zhǔn)精度誤差。通過設(shè)置ADC_CR2寄存器的CAL位啟動校準(zhǔn)。一旦校準(zhǔn)結(jié)束,CAL位被硬件復(fù)位,可以開始正常轉(zhuǎn)換。注意:

1、建議在每次上電后執(zhí)行校準(zhǔn)。2、啟動校準(zhǔn)前,ADC必須處于關(guān)電狀態(tài)(ADON=’0’)超過至少兩個ADC時鐘周期。校準(zhǔn)時間框圖四、數(shù)據(jù)對齊 數(shù)據(jù)可以左對齊或右對齊。數(shù)據(jù)右對齊(注入組)數(shù)據(jù)右對齊(規(guī)則組)數(shù)據(jù)左對齊(注入組)數(shù)據(jù)左對齊(規(guī)則組)五、可編程的通道采樣時間

ADC使用若干個ADC_CLK周期對輸入電壓采樣,采樣周期數(shù)目可以通過ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位而更改。每個通道可以以不同的時間采樣??傓D(zhuǎn)換時間如下計算:

TCONV=采樣時間+12.5個周期例如:當(dāng)ADCCLK=14MHz,則1.5周期的采樣時間TCONV=1.5+12.5=14周期=1μs七、DMA請求因為規(guī)則通道轉(zhuǎn)換的值儲存在一個唯一的數(shù)據(jù)寄存器中,所以當(dāng)轉(zhuǎn)換多個規(guī)則通道時需要使用DMA,這可以避免丟失已經(jīng)存儲在ADC_DR寄存器中的數(shù)據(jù)。只有在規(guī)則通道的轉(zhuǎn)換結(jié)束時才產(chǎn)生DMA請求,并將轉(zhuǎn)換的數(shù)據(jù)從ADC_DR寄存器傳輸?shù)接脩糁付ǖ哪康牡刂?。注入通道不能使用DMA。DMA請求映像

DMASWTRIGGERDMA請求ORADC1TIM2_CC3TIM4_CC1SWTRIGGERORUSART3_TXSWTRIGGERORSWTRIGGERORSWTRIGGERORSWTRIGGERORSWTRIGGEROR高優(yōu)先級請求低優(yōu)先級請求通道1TIM1_CC1TIM2_UPTIM3_CC3SPI1_RXUSART3_RXTIM1_CC2SPI1_TXTIM3_CC4TIM3_UPSPI2_RXI2C2_TXTIM1_CC4USART1_TXTIM1_CCUTIM1_TRIGTIM4_CC2USART1_RXTIM1_UPSPI2_TXI2C2_RXTIM2_CC1TIM4_CC3USART2_RXTIM1_CC3TIM3_CC1I2C1_TXTIM3_TRIGUSART2_TXTIM2_CC2TIM2_CC4TIM4_UPI2C1_RX通道2通道3通道4通道5通道6通道7八、溫度傳感器 溫度傳感器可以用來測量器件周圍的溫度(TA)。溫度傳感器在內(nèi)部和ADC_IN16輸入通道相連接,此通道把傳感器輸出的電壓轉(zhuǎn)換成數(shù)字值。溫度傳感器模擬輸入的采樣時間必須大于2.2μs。當(dāng)溫度傳感器沒有被使用時,可以置于關(guān)電模式。主要特征支持的溫度范圍:-40到125度精確度:+/-1.5°C溫度傳感器和VREFINT通道框圖ADC_IN16(溫度傳感器)和ADC_IN17(VREFINT)的轉(zhuǎn)換。讀取溫度的方法選擇ADCx_IN16輸入通道選擇采樣時間大于2.2μs設(shè)置TSVREFE位,以喚醒關(guān)電模式下的溫度傳感器通過設(shè)置ADON位啟動ADC轉(zhuǎn)換讀ADC數(shù)據(jù)寄存器上的VSENSE

數(shù)據(jù)利用下列公式得出溫度溫度(°C)={(V25-VSENSE)/Avg_Slope}+25V25=VSENSE在25°C時的數(shù)值(典型值=1.42V,對應(yīng)于對應(yīng)0x6E2(1762D

))

Avg_Slope

=溫度與VSENSE

曲線的平均斜率 (典型值=4.35mv/°C,對應(yīng)于0x05/°C)九、中斷 規(guī)則和注入組轉(zhuǎn)換結(jié)束時能產(chǎn)生中斷,當(dāng)模擬看門狗狀態(tài)位被設(shè)置時也能產(chǎn)生中斷,它們都有獨(dú)立的中斷使能位。中斷事件事件標(biāo)志使能控制位規(guī)則組轉(zhuǎn)換結(jié)束EOCEOCIE注入組轉(zhuǎn)換結(jié)束JEOCJEOCIE設(shè)置模擬看門狗狀態(tài)位AWDAWDIE十、ADC固件庫函數(shù)

ADC_Init

的使用方法函數(shù)原形voidADC_Init(ADC_TypeDef*ADCx,ADC_InitTypeDef*ADC_InitStruct)功能描述根據(jù)ADC_InitStruct

結(jié)構(gòu)的內(nèi)容初始化ADCx

接口.輸入?yún)?shù)1ADCx:其中x可以是1或2.輸入?yún)?shù)2ADC_InitStruct:指向ADC_InitTypeDef

結(jié)構(gòu).ADC_InitTypeDef

結(jié)構(gòu):該結(jié)構(gòu)定義在stm32f10x_adc.h文件中。typedef

struct{u32ADC_Mode;

FunctionalState

ADC_ScanConvMode;

FunctionalState

ADC_ContinuousConvMode;

u32ADC_ExternalTrigConv;

u32ADC_DataAlign;

u8ADC_NbrOfChannel;}ADC_InitTypeDef

ADC_Mode

參數(shù)配置ADC工作在單/雙模式.ADC_Mode描述ADC_Mode_Independent

ADC1和ADC2工作在獨(dú)立模式ADC_Mode_RegInjecSimult

ADC1和ADC2工作在同時規(guī)則注入模式ADC_Mode_RegSimult_AlterTrig

ADC1和ADC2工作在同時規(guī)則和交替觸發(fā)模式ADC_Mode_InjecSimult_FastInterl

ADC1和ADC2工作在同時注入和快速交替模式ADC_Mode_InjecSimult_SlowInterl

ADC1和ADC2工作在同時注入和慢速交替模式ADC_Mode_InjecSimult

ADC1和ADC2工作在同時注入模式ADC_Mode_RegSimult

ADC1和ADC2工作在同時規(guī)則模式ADC_Mode_FastInterl

ADC1和ADC2工作在快速交替模式ADC_Mode_SlowInterl

ADC1和ADC2工作在慢速交替模式ADC_Mode_AlterTrig

ADC1和ADC2工作在交替觸發(fā)模式ADC_ExternalTrigConv

參數(shù)設(shè)置規(guī)則通道使用外部觸發(fā)啟動ADC轉(zhuǎn)換。ADC_ExternalTrigConv描述ADC_ExternalTrigConv_T1_CC1外部觸發(fā)轉(zhuǎn)換選用通用定時器1的捕獲比較器1ADC_ExternalTrigConv_T1_CC2外部觸發(fā)轉(zhuǎn)換選用通用定時器1的捕獲比較器2ADC_ExternalTrigConv_T1_CC3外部觸發(fā)轉(zhuǎn)換選用通用定時器1的捕獲比較器3ADC_ExternalTrigConv_T2_CC2外部觸發(fā)轉(zhuǎn)換選用通用定時器2的捕獲比較器2ADC_ExternalTrigConv_T3_TRGO外部觸發(fā)轉(zhuǎn)換選用通用定時器3的TRGOADC_ExternalTrigConv_T4_CC4外部觸發(fā)轉(zhuǎn)換選用通用定時器4的捕獲比較器4ADC_ExternalTrigConv_Ext_IT11外部觸發(fā)轉(zhuǎn)換選用外部中斷11事件ADC_ExternalTrigConv_None

軟件啟動轉(zhuǎn)換ADC_ScanConvMode

參數(shù)指定ADC工作在掃描模式(多通道)還是單次(單通道)模式。如果設(shè)置為ENABLE,就是掃描模式,設(shè)置DISABLE就是單次模式.ADC_ContinuousConvMode

參數(shù)指定轉(zhuǎn)換是連續(xù)的還是單次的。如設(shè)置ENABLE就是連續(xù)的,設(shè)置DISABLE是單次的.ADC_NbrOfChannel

參數(shù)指定使用序列規(guī)則組中ADC通道的數(shù)目.可以取1到16.ADC_DataAlign

參數(shù)指定數(shù)據(jù)對齊方式.ADC_DataAlign描述ADC_DataAlign_Right

ADC數(shù)據(jù)右對齊ADC_DataAlign_Left

ADC數(shù)據(jù)左對齊函數(shù)原形voidADC_RegularChannelConfig(ADC_TypeDef*ADCx,u8ADC_Channel,u8Rank,u8ADC_SampleTime)功能描述對選擇的ADC規(guī)則通道配置轉(zhuǎn)換次序和采樣時間.輸入?yún)?shù)1ADCx:其中x可以是1或2.輸入?yún)?shù)2ADC_Channel:需要配置的ADC通道.輸入?yún)?shù)3Rank:在規(guī)則組序列中的次序.范圍是1到16.輸入?yún)?shù)4ADC_SampleTime:選擇通道的采樣時間值.

ADC_RegularChannelConfig

的使用方法ADC_Channel

描述ADC_Channel_0選擇ADC的通道0ADC_Channel_1選擇ADC的通道1┅┅ADC_Channel_8選擇ADC的通道8┅┅ADC_Channel_16選擇ADC的通道16ADC_Channel_17選擇ADC的通道17ADC_Channel

參數(shù)指定需要配置的ADC通道.ADC_SampleTime

參數(shù)指定選擇通道的ADC采樣時間.ADC_SampleTime描述ADC_SampleTime_1Cycles5采樣時間是1.5周期ADC_SampleTime_7Cycles5采樣時間是7.5周期

ADC_SampleTime_13Cycles5采樣時間是13.5周期

ADC_SampleTime_28Cycles5采樣時間是28.5周期

ADC_SampleTime_41Cycles5采樣時間是41.5周期

ADC_SampleTime_55Cycles5采樣時間是55.5周期ADC_SampleTime_71Cycles5采樣時間是71.5周期

ADC_SampleTime_239Cycles5采樣時間是239.5周期

ADC_AnalogWatchdogThresholdsConfig

的使用方法函數(shù)原形voidADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef*ADCx,u16HighThreshold,u16LowThreshold)功能描述配置模擬看門狗的高低閾值

輸入?yún)?shù)1ADCx:其中x可以是1或2.輸入?yún)?shù)2HighThreshold:ADC的模擬看門狗高閾值.為12-bit值.輸入?yún)?shù)3LowThreshold:ADC的模擬看門狗低閾值.為12-bit值.

ADC_AnalogWatchdogCmd

的使用方法函數(shù)原形voidADC_AnalogWatchdogCmd(ADC_TypeDef*ADCx,u32ADC_AnalogWatchdog)功能描述使能或禁止模擬看門狗在一個或所有的規(guī)則或注入通道輸入?yún)?shù)1ADCx:其中x可以是1或2.輸入?yún)?shù)2ADC_AnalogWatchdog:配置ADC的模擬看門狗.ADC_AnalogWatchdog

參數(shù)配置ADC的模擬看門狗.ADC_AnalogWatchdog描述ADC_AnalogWatchdog_SingleRegEnable

模擬看門狗在一個單獨(dú)的規(guī)則通道上ADC_AnalogWatchdog_SingleInjecEnable

模擬看門狗在一個單獨(dú)的注入通道上ADC_AnalogWatchdog_SingleRegorInjecEnable

模擬看門狗在一個單獨(dú)的規(guī)則或注入通道上ADC_AnalogWatchdog_AllRegEnable

模擬看門狗在所有的規(guī)則通道上ADC_AnalogWatchdog_AllInjecEnable

模擬看門狗在所有的注入通道上ADC_AnalogWatchdog_AllRegAllInjecEnable

模擬看門狗在所有的規(guī)則和注入通道上ADC_AnalogWatchdog_None

模擬看門狗不監(jiān)督任何通道

ADC_AnalogWatchdogSingleChannelConfig

的使用方法函數(shù)原形voidADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef*ADCx,u8ADC_Channel)功能描述配置模擬看門狗要監(jiān)視的ADCx通道輸入?yún)?shù)1ADCx:其中x可以是1或2.輸入?yún)?shù)2ADC_Channel:需配置ADC的模擬看門狗通道.ADC_ITConfig

的使用方法函數(shù)原形voidADC_ITConfig(ADC_TypeDef*ADCx,u16ADC_IT,FunctionalState

NewState)功能描述使能或禁止指定的ADC中斷輸入?yún)?shù)1ADCx:其中x可以是1或2.輸入?yún)?shù)2ADC_IT:指定ADC的中斷源輸入?yún)?shù)3NewState:ENABLE或DISABLEADC_IT描述ADC_IT_EOCEOC中斷允許ADC_IT_AWDAWDOG中斷允許ADC_IT_JEOCJEOC中斷允許ADC_IT參數(shù)取下列值:

ADC_ResetCalibration

函數(shù)的使用方法

ADC_GetResetCalibrationStatus

函數(shù)的使用方法函數(shù)原形FlagStatus

ADC_GetResetCalibrationStatus(ADC_TypeDef*ADCx)功能描述得到ADC復(fù)位校準(zhǔn)寄存器的狀態(tài)輸入?yún)?shù)ADCx:其中x可以是1或2返回參數(shù)SET或RESET函數(shù)原形voidADC_ResetCalibration(ADC_TypeDef*ADCx)功能描述復(fù)位校準(zhǔn)寄存器輸入?yún)?shù)ADCx:其中x可以是1或2

ADC_StartCalibration

函數(shù)的使用方法

ADC_SoftwareStartConvCmd

函數(shù)的使用方法函數(shù)原形voidADC_SoftwareStartConvCmd(ADC_TypeDef*ADCx,FunctionalState

NewState)功能描述使能或禁止ADCx的軟件啟動轉(zhuǎn)換輸入?yún)?shù)ADCx:其中x可以是1或2返回參數(shù)NewState:ENABLE或DISABLE函數(shù)原形voidADC_StartCalibration(ADC_TypeDef*ADCx)功能描述開始校準(zhǔn)過程輸入?yún)?shù)ADCx:其中x可以是1或2

ADC_DMACmd

函數(shù)的使用方法函數(shù)原形ADC_DMACmd(ADC_TypeDef*ADCx,FunctionalState

NewState)功能描述使能或禁止ADCDMA請求輸入?yún)?shù)ADCx:其中x可以是1或2返回參數(shù)NewState:ENABLE或DISABLE函數(shù)原形voidADC_ClearITPendingBit(ADC_TypeDef*ADCx,u16ADC_IT)功能描述清除ADCx

的中斷登記標(biāo)志輸入?yún)?shù)ADCx:其中x可以是1或2返回參數(shù)ADC_IT:需要清除的中斷標(biāo)志

ADC_ClearITPendingBit

函數(shù)的使用方法例:采用DMA通道1將ADC1的通道14的數(shù)據(jù)連續(xù)轉(zhuǎn)換結(jié)果放到變量ADC_ConvertedValue中,采用軟件啟動,采樣周期為55.5個周期。/*定義*/#defineADC1_DR_Address((u32)0x4001244C)/*定義變量和結(jié)構(gòu)*/ADC_InitTypeDef

ADC_InitStructure;DMA_InitTypeDef

DMA_InitStructure;vu16ADC_ConvertedValue;ErrorStatus

HSEStartUpStatus;

/*DMA通道1初始化,因ADC1接在這個通道上*/DMA_DeInit(DMA_Channel1);

DMA_InitStructure.DMA_PeripheralBaseAddr =ADC1_DR_Address;

DMA_InitStructure.DMA_MemoryBaseAddr= (u32)&ADC_ConvertedValue;

DMA_InitStructure.DMA_DIR= DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize=1;

DMA_InitStructure.DMA_PeripheralInc= DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc= DMA_MemoryInc_Disable;DMA_InitStructure.DMA_PeripheralDataSize= DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize= DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode= DMA_Mode_Circular;DMA_InitStructure.DMA_Priority= DMA_Priority_High;DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;DMA_Init(DMA_Channel1,&DMA_InitStructure);/*使能DMA通道1*/DMA_Cmd(DMA_Channel1,ENABLE);/*ADC1配置*/ADC_InitStructure.ADC_Mode= ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode=DISABLE;ADC_InitStructure.ADC_ContinuousConvMode= ENABLE;ADC_InitStructure.ADC_ExternalTrigConv= ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign= ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel=1;ADC_Init(ADC1,&ADC_InitStructure);/*配置ADC1規(guī)則通道14*/ADC_RegularChannelConfig(ADC1,ADC_Channel_14, 1,ADC_SampleTime_55Cycles5);/*使能ADC1的DMA*/ADC_DMACmd(ADC1,ENABLE);

/*使能ADC1*/ADC_Cmd(ADC1,ENABLE);/*使能ADC1的復(fù)位校準(zhǔn)寄存器*/ADC_ResetCalibration(ADC1);/*檢測ADC1的復(fù)位校準(zhǔn)是否結(jié)束*/while(ADC_GetResetCalibrationStatus(ADC1));/*啟動ADC1校準(zhǔn)*/ADC_StartCalibration(ADC1);/*檢測ADC1的校準(zhǔn)是否結(jié)束*/while(ADC_GetCalibrationStatus(ADC1));

/*軟件啟動ADC1轉(zhuǎn)換*/ADC_SoftwareStartConvCmd(ADC1,ENABLE);STM32實驗平臺上電位器的電路圖是:STM32實驗平臺上CPU的管腳圖是:GPIO的配置程序是:voidGPIO_Configuration(void){

GPIO_InitTypeDef

GPIO_InitStructure;/*配置PC.04(ADCChannel14)作為模擬輸入*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOC,&GPIO_InitStructure);}在RCC配置程序里要開啟DMA和AD的時鐘

/*使能DMA時鐘*/

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);/*使能ADC1和GPIOC時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 |RCC_APB2Periph_GPIOC,ENABLE);例:采用ADC1的通道14進(jìn)行數(shù)據(jù)連續(xù)轉(zhuǎn)換,用模擬看門狗檢測ADC1的通道14的模擬輸入量(當(dāng)ADC的模擬輸入量在窗口之外,將點亮LED1燈),采用軟件啟動,采樣周期為13.5個周期。/*定義結(jié)構(gòu)*/ADC_InitTypeDef

ADC_InitStructure;

/*配置ADC1*/

ADC_InitStructure.ADC_Mode= ADC_Mode_Independent;

ADC_InitStructure.ADC_ScanConvMode=DISABLE;

ADC_InitStructure.ADC_ContinuousConvMode= ENABLE;

ADC_InitStructure.ADC_ExternalTrigConv= ADC_ExternalTrigConv_None;

ADC_InitStructure.ADC_DataAlign= ADC_DataAlign_Right;

ADC_InitStructure.ADC_NbrOfChannel=1;

ADC_Init(ADC1,&ADC_InitStructure);/*配置ADC1規(guī)則通道14*/ADC_RegularChannelConfig(ADC1,ADC_Channel_14, 1,ADC_SampleTime_13Cycles5);/*設(shè)置高低模擬看門狗閾值*/ADC_AnalogWatchdogThresholdsConfig(ADC1, 0x0B00,0x0300);/*配置通道14為單模擬看門狗保證通道*/ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_14);/*在一個規(guī)則通道上使能模擬看門狗*/ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_SingleReg(Enable);/*使能AWD中斷*/ADC_ITConfig(ADC1,ADC_IT_AWD,ENABLE);/*使能ADC1*/ADC_Cmd(ADC1,ENABLE);/*使能ADC1復(fù)位校準(zhǔn)寄存器*/ADC_ResetCalibration(ADC1);/*檢測ADC1的復(fù)位校準(zhǔn)寄存器結(jié)束*/while(ADC_GetResetCalibrationStatus(ADC1));/*啟動ADC1校準(zhǔn)*/ADC_StartCalibration(ADC1);/*檢測ADC1校準(zhǔn)結(jié)束*/while(ADC_GetCalibrationStatus(ADC1));/*用軟件啟動ADC1的數(shù)據(jù)轉(zhuǎn)換*/ADC_SoftwareStartConvCmd(ADC1,ENABLE);/*ADC1的中斷服務(wù)程序*/voidADC_IRQHandler(void){

…/*清ADC1的AWD中斷登記位*/ADC_ClearITPendingBit(ADC1,ADC_IT_AWD);}STM32實驗平臺上電位器的電路圖是:STM32實驗平臺上CPU的管腳圖是:在GPIO配置程序中增加下列代碼:/*配置PC.04(ADCChannel14)作為模擬輸入*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOC,&GPIO_InitStructure);在RCC配置程序里要開啟AD的時鐘/*使能ADC1和GPIOC時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 |RCC_APB2Periph_GPIOC,ENABLE);在NVIC配置程序中增加下列代碼:

/*配置和使能ADC中斷*/

NVIC_InitStructure.NVIC_IRQChannel= ADC_IRQChannel;

NVIC_InitStructure.

NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.

NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;

NVIC_Init(&NVIC_InitStructure);例:采用DMA存儲ADC1的64個采樣點的值,選用ADC1的通道4和14為規(guī)則通道,ADC1的通道10和11為注入通道。規(guī)則通道采用間斷模式,間斷數(shù)為1,轉(zhuǎn)換為外部觸發(fā)EXTI-11,每次觸發(fā)只轉(zhuǎn)換一個通道;注入通道采用外部出發(fā)EXTI-15。轉(zhuǎn)化時間均為28.5時鐘周期,數(shù)據(jù)采用右對齊。/*定義*/#defineADC1_DR_Address((u32)0x4001244C)vu32Index=0;/*定義變量與結(jié)構(gòu)*/ADC_InitTypeDef

ADC_InitStructure;DMA_InitTypeDef

DMA_InitStructure;vu16ADC_RegularConvertedValueTab[64],ADC_InjectedConvertedValueTab[32];ErrorStatus

HSEStartUpStatus;

/*配置DMA通道1*/DMA_DeInit(DMA_Channel1);

DMA_InitStructure.DMA_PeripheralBaseAddr= ADC1_DR_Address;

DMA_InitStructure.DMA_MemoryBaseAddr= (u32)ADC_RegularConvertedValueTab;

DMA_InitStructure.DMA_DIR= DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize=64;

DMA_InitStructure.DMA_PeripheralInc= DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc= DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_PeripheralDataSize= DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize= DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode= DMA_Mode_Circular;

DMA_InitStructure.DMA_Priority= DMA_Priority_High;

DMA_InitStructure.DMA_M2M= DMA_M2M_Disable;DMA_Init(DMA_Channel1,&DMA_InitStructure);

/*使能DMA通道1*/DMA_Cmd(DMA_Channel1,ENABLE);

/*配置ADC1*/

ADC_InitStructure.ADC_Mode= ADC_Mode_Independent;

ADC_InitStructure.ADC_ScanConvMode=ENABLE;

ADC_InitStructure.ADC_ContinuousConvMode= DISABLE;

ADC_InitStructure.ADC_ExternalTrigConv= ADC_ExternalTr

溫馨提示

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

評論

0/150

提交評論