STM32微控制器原理及應用-模數(shù)轉換器ADC_第1頁
STM32微控制器原理及應用-模數(shù)轉換器ADC_第2頁
STM32微控制器原理及應用-模數(shù)轉換器ADC_第3頁
STM32微控制器原理及應用-模數(shù)轉換器ADC_第4頁
STM32微控制器原理及應用-模數(shù)轉換器ADC_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1STM32原理及其應用2模數(shù)轉換器ADC

教學基本內(nèi)容:ADC概述、ADC內(nèi)部結構、ADC的功能、寄存器的種類、庫函數(shù)的說明及ADC應用實例。重點:ADC相應的功能,了解各類寄存器及庫函數(shù)。難點:ADC的結構中各部分標號的作用。本章主要教學要求:認識ADC的分類及其作用、ADC結構及功能,了解ADC各類庫函數(shù)及其功能,了解經(jīng)典_STM32_ADC多通道采樣的例子及其程序3第一節(jié)ADC概述(了解)第二節(jié)ADC結構(理解)第三節(jié)ADC的功能(重點)第四節(jié)寄存器(重點)第五節(jié)庫函數(shù)說明(重點)第六節(jié)應用實例4第一節(jié)ADC概述

真實世界的模擬信號,例如溫度、壓力、聲音或者圖像等,需要轉換成更容易儲存、處理和發(fā)射的數(shù)字形式,而模/數(shù)轉換器可以實現(xiàn)這個功能,在各種不同的產(chǎn)品中都可以找到它的身影。

通常的模數(shù)轉換器是將一個輸入電壓信號轉換為一個輸出的數(shù)字信號。由于數(shù)字信號本身不具有實際意義,僅僅表示一個相對大小。故任何一個模數(shù)轉換器都需要一個參考模擬量作為轉換的標準,比較常見的參考標準為最大的可轉換信號大小。而輸出的數(shù)字量則表示輸入信號相對于參考信號的大小。

5一、ADC1.概念:ADC,Analog-to-DigitalConverter的縮寫,指模/數(shù)轉換器或者模數(shù)轉換器,即A/D轉換器,是將連續(xù)變化的模擬信號轉換為離散的數(shù)字信號的器件。2.功能:通常的模數(shù)轉換器是將一個輸入電壓信號轉換為一個輸出的數(shù)字信號。6二、ADC的分類及相應功能

按工作原理的不同,可分成間接ADC和直接ADC。

1.間接ADC:先將輸入模擬電壓轉換成時間或頻率,然后再把這些中間量轉換成數(shù)字量,常用的有中間量是時間的雙積分型ADC。

雙積分型ADC:先對輸入采樣電壓和基準電壓進行兩次積分,以獲得與采樣電壓平均值成正比的時間間隔,同時在這個時間間隔內(nèi),用計數(shù)器對標準時鐘脈沖(CP)計數(shù),計數(shù)器輸出的計數(shù)結果就是對應的數(shù)字量。

缺點:轉換速度低

優(yōu)點:抗干擾能力強;穩(wěn)定性好;可實現(xiàn)高精度模數(shù)轉換。用于多位高精度數(shù)字直流電壓表中。

72.直接ADC:將輸入模擬電壓直接轉換成數(shù)字量。常用的有并聯(lián)比較型ADC和逐次逼近型ADC。

并聯(lián)比較型ADC:采用各量級同時并行比較,各位輸出碼也是同時并行產(chǎn)生,且轉換速度與輸出碼位的多少無關。

缺點:成本高、功耗大

優(yōu)點:轉換速度快,適用于要求高速、低分辯率的場合逐次逼近型ADC:產(chǎn)生一系列比較電壓,是逐個產(chǎn)生比較電壓,逐次與輸入電壓分別比較,以逐漸逼近的方式進行模數(shù)轉換的。所以它比并聯(lián)比較型ADC的轉換速度慢,比雙分積型ADC要快得多,屬于中速ADC器件,另外位數(shù)多時,它需用的元器件比并聯(lián)比較型少得多,所以它是集成ADC中,應用較廣的一種。8第二節(jié)

ADC結構ADC內(nèi)部結構決定了STM32F1ADC擁有很多功能。為了更好地理解STM32F1的ADC,我們把ADC結構框圖分成7個子模塊,來了解它內(nèi)部的結構,按照順序依次進行簡單介紹。如圖6-1所示:圖6-1ADC框圖9框圖中各標號名稱標號1:電壓輸入引腳ADC輸入電壓范圍為:。由這四個外部引腳決定。通常我們把和接地,把和接3.3V,因此ADC的輸入電壓范圍為:0~3.3V。我們使用的開發(fā)ADC輸入電壓范圍為0~3.3V。如果我們想讓ADC測試負電壓或者更高的正電壓,可以在外部加一個電壓調(diào)理電路,把需要轉換的電壓抬升或者降壓到0~3.3V,這樣ADC就可以測量了。但一定記住,不要直接將高于3.3V的電壓接到ADC管腳上,那樣將可能燒壞芯片。標號2:輸入通道STM32的ADC的輸入通道多達18個,其中外部的16個通道就是框圖中的ADCx_IN0、ADCx_IN1...ADCx_IN5(x=1/2/3,表示ADC數(shù)),通過這16個外部通道可以采集模擬信號。這16個通道對應著不同的口,具體是哪一個IO口可以從數(shù)據(jù)手冊查詢到。其中ADC1還有2個內(nèi)部通道:ADC1的通道16連接到了芯片內(nèi)部的溫度傳感器,通道17連接到了內(nèi)部參考電壓。ADC2和ADC3的通道16、17全部連接到了內(nèi)部的VSS。10標號3:通道轉換順序外部的16個通道在轉換的時候可分為2組通道:規(guī)則通道組和注入通道組,其中規(guī)則通道組最多有16路,注入通道組最多有4路。規(guī)則通道組:從名字來理解,規(guī)則通道就是一種規(guī)規(guī)矩矩的通道,類似于正常執(zhí)行的程序。通常我們使用的都是這個通道。注入通道組:從名字來理解,注入即為插入,是一種不安分的通道,類似于中斷。當程序正常往下執(zhí)行時,中斷可以打斷程序的執(zhí)行。同樣如果在規(guī)則通道轉換過程中,有注入通道插隊,那么就要先轉換完注入通道,等注入通道轉換完成后,再回到規(guī)則通道的轉換流程。每個組包含一個轉換序列,該序列可按任意順序在任意通道上完成。標號4:觸發(fā)源選擇好輸入通道,設置好轉換順序,接下來就可以開始轉換。要開啟ADC轉換,可以直接設置ADC控制寄存器ADC_CR2的ADON位為1,即使能ADC。當然ADC還支持外部事件觸發(fā)轉換,觸發(fā)源有很多,具體選擇哪一種觸發(fā)源,由ADC控制寄存器2:ADC_CR2的EXTSEL[2:0]和JEXTSEL[2:0]位來控制。EXTSEL[2:0]用于選擇規(guī)則通道的觸發(fā)源,JEXTSEL[2:0]用于選擇注入通道的觸發(fā)源。選定好觸發(fā)源之后,觸發(fā)源是否要激活,則由ADC控制寄存器ADC_CR2的EXTTRIG和JEXTTRIG這兩位來激活。如果使能了外部觸發(fā)事件,我們還可以通過設置ADC控制寄存器2:ADC_CR2的EXTEN[1:0]和JEXTEN[1:0]來控制觸發(fā)極性,可以有4種狀態(tài),分別是:禁止觸發(fā)檢測、上升沿檢測、下降沿檢測以及上升沿和下降沿均檢測。標號5:ADC時鐘ADC輸入時鐘ADC_CLK由APB2經(jīng)過分頻產(chǎn)生,最大值是14MHz,分頻因子由RCC時鐘配置寄存器RCC_CFGR的位ADCPRE[1:0]設置,可以是2/4/6/8分頻,注意這里沒有1分頻。我們知道APB2總線時鐘為72M,而ADC最大工作頻率為14M,所以一般設置分頻因子為6,這樣ADC的輸入時鐘為12M。ADC要完成對輸入電壓的采樣需要若干個ADC_CLK周期,采樣的周期數(shù)可通過ADC采樣時間寄存器ADC_SMPR1和ADC_SMPR2中的SMP[2:0]位設置,ADC_SMPR2控制的是通道0~9,ADC_SMPR1控制的是通道10~17。每個通道可以分別用不同的時間采樣。其中采樣周期最小是1.5個,即如果我們要達到最快的采樣,那么應該設置采樣周期為1.5個周期,這里說的周期就是1/ADC_CLK。ADC的總轉換時間跟ADC的輸入時鐘和采樣時間有關,其公式如下:Tconv=采樣時間+12.5個周期其中Tconv為ADC總轉換時間,當ADC_CLK=14Mhz的時候,并設置1.5個周期的采樣時間,則Tcovn=1.5+12.5=14個周期=1us。通常經(jīng)過ADC預分頻器能分頻到最大的時鐘只能是12M,采樣周期設置為1.5個周期,算出最短的轉換時間為1.17us,這個才是最常用的。標號6:數(shù)據(jù)寄存器ADC轉換后的數(shù)據(jù)根據(jù)轉換組的不同,規(guī)則組的數(shù)據(jù)放在ADC_DR寄存器內(nèi),注入組的數(shù)據(jù)放在JDRx內(nèi)。因為STM32F1的ADC是12位轉換精度,而數(shù)據(jù)寄存器是16位,所以ADC在存放數(shù)據(jù)的時候就有左對齊和右對齊區(qū)分。如果是左對齊,AD轉換完成數(shù)據(jù)存放在ADC_DR寄存器的[4:15]位內(nèi);如果是右對齊,則存放在ADC_DR寄存器的[0:11]位內(nèi)。具體選擇何種存放方式,需通過ADC_CR2的11位ALIGN設置。在規(guī)則組中,含有16路通道,對應著存放規(guī)則數(shù)據(jù)的寄存器只有1個,如果使用多通道轉換,那么轉換后的數(shù)據(jù)就全部擠在ADC_DR寄存器內(nèi),前一個時間點轉換的通道數(shù)據(jù),就會被下一個時間點的另外一個通道轉換的數(shù)據(jù)覆蓋掉,所以當通道轉換完成后就應該把數(shù)據(jù)取走,或者開啟DMA模式,把數(shù)據(jù)傳輸?shù)絻?nèi)存里面,不然就會造成數(shù)據(jù)的覆蓋。最常用的做法就是開啟DMA傳輸。如果沒有使用DMA傳輸,我們一般通過ADC狀態(tài)寄存器ADC_SR獲取當前ADC轉換的進度狀態(tài),進而進行程序控制。而在注入組中,最多含有4路通道,對應著存放注入數(shù)據(jù)的寄存器正好有4個,不會跟規(guī)則寄存器那樣產(chǎn)生數(shù)據(jù)覆蓋的問題。標號7:中斷當發(fā)生如下事件且使能相應中斷標志位時,ADC能產(chǎn)生中斷。(1)轉換結束(規(guī)則轉換)與注入轉換結束數(shù)據(jù)轉換結束后,如果使能中斷轉換結束標志位,轉換一結束就會產(chǎn)生轉換結束中斷。(2)模擬看門狗事件當被ADC轉換的模擬電壓低于低閾值或者高于高閾值時,就會產(chǎn)生中斷,前提是我們開啟了模擬看門狗中斷,其中低閾值和高閾值由ADC_LTR和ADC_HTR設置。(3)DMA請求規(guī)則和注入通道轉換結束后,除了產(chǎn)生中斷外,還可以產(chǎn)生DMA請求,把轉換好的數(shù)據(jù)直接存儲在內(nèi)存里面。要注意的是只有ADC1和ADC3可以產(chǎn)生DMA請求。一般我們在使用ADC的時候都會開啟DMA傳輸。我們知道STM32F1ADC轉換模式有單次轉換與連續(xù)轉換區(qū)分。在單次轉換模式下,ADC執(zhí)行一次轉換??梢酝ㄟ^ADC_CR2寄存器的SWSTART位(只適用于規(guī)則通道)啟動,也可以通過外部觸發(fā)啟動(適用于規(guī)則通道和注入通道),這時CONT位為0。以規(guī)則通道為例,一旦所選擇的通道轉換完成,轉換結果將被存在ADC_DR寄存器中,EOC(轉換結束)標志將被置位,如果設置了EOCIE,則會產(chǎn)生中斷。然后ADC將停止,直到下次啟動。在連續(xù)轉換模式下,ADC結束一個轉換后立即啟動一個新的轉換。CONT位為1時,可通過外部觸發(fā)或將ADC_CR2寄存器中的SWSTRT位置1來啟動此模式(僅適用于規(guī)則通道)。需要注意的是:此模式無法連續(xù)轉換注入通道。連續(xù)模式下唯一的例外情況是,注入通道配置為在規(guī)則通道之后自動轉換(使用JAUTO位)。14第三節(jié)ADC的功能

(**)

1、ADC開關控制通過設置ADC_CR2寄存器的ADON位可給ADC上電。當?shù)谝淮卧O置ADON位時,它將ADC從斷電狀態(tài)下喚醒。ADC上電延遲一段時間后(tSTAB),再次設置ADON位時開始進行轉換。通過清除ADON位可以停止轉換,并將ADC置于斷電模式。在這個模式中,ADC幾乎不耗電(僅幾個μA)。2、ADC時鐘由時鐘控制器提供的ADCCLK時鐘和PCLK2(APB2時鐘)同步。RCC控制器為ADC時鐘提供一個專用的可編程預分頻器。3、通道選擇有16個多路通道??梢园艳D換組織成兩組:規(guī)則組和注入組。在任意多個通道上以任意順序進行的一系列轉換構成成組轉換。例如,可以如下順序完成轉換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。●規(guī)則組由多達16個轉換組成。規(guī)則通道和它們的轉換順序在ADC_SQRx寄存器中選擇。規(guī)則組中轉換的總數(shù)應寫入ADC_SQR1寄存器的L[3:0]位中。●注入組由多達4個轉換組成。注入通道和它們的轉換順序在ADC_JSQR寄存器中選擇。注入組里的轉換總數(shù)目應寫入ADC_JSQR寄存器的L[1:0]位中。如果ADC_SQRx或ADC_JSQR寄存器在轉換期間被更改,當前的轉換被清除,一個新的啟動脈沖將發(fā)送到ADC以轉換新選擇的組。溫度傳感器/內(nèi)部通道溫度傳感器和通道ADC1_IN16相連接,內(nèi)部參照電壓和ADC1_IN17相連接??梢园醋⑷牖蛞?guī)則通道對這兩個內(nèi)部通道進行轉換。注意:溫度傳感器和只能出現(xiàn)在主ADC1中。4、單次轉換模式單次轉換模式下,ADC只執(zhí)行一次轉換。該模式既可通過設置ADC_CR2寄存器的ADON位(只適用于規(guī)則通道)啟動也可通過外部觸發(fā)啟動(適用于規(guī)則通道或注入通道),這時CONT位為0。一旦選擇通道的轉換完成:●如果一個規(guī)則通道被轉換:─轉換數(shù)據(jù)被儲存在16位ADC_DR寄存器中─EOC(轉換結束)標志被設置─如果設置了EOCIE,則產(chǎn)生中斷。●如果一個注入通道被轉換:─轉換數(shù)據(jù)被儲存在16位的ADC_DRJ1寄存器中─JEOC(注入轉換結束)標志被設置─如果設置了JEOCIE位,則產(chǎn)生中斷。然后ADC停止。5、連續(xù)轉換模式在連續(xù)轉換模式中,當前面ADC轉換一結束馬上就啟動另一次轉換。此模式可通過外部觸發(fā)啟動或通過設置ADC_CR2寄存器上的ADON位啟動,此時CONT位是1。每個轉換后:●如果一個規(guī)則通道被轉換:─轉換數(shù)據(jù)被儲存在16位的ADC_DR寄存器中─EOC(轉換結束)標志被設置─如果設置了EOCIE,則產(chǎn)生中斷?!袢绻粋€注入通道被轉換:─轉換數(shù)據(jù)被儲存在16位的ADC_DRJ1寄存器中─JEOC(注入轉換結束)標志被設置─如果設置了JEOCIE位,則產(chǎn)生中斷。6、時序圖如下圖6-2所示,ADC在開始精確轉換前需要一個穩(wěn)定時間tSTAB。在開始ADC轉換和14個時鐘周期后,EOC標志被設置,16位ADC數(shù)據(jù)寄存器包含轉換的結果。圖6-2時序圖7、模擬看門狗如果被ADC轉換的模擬電壓低于低閥值或高于高閥值,AWD模擬看門狗狀態(tài)位被設置。閥值位于ADC_HTR和ADC_LTR寄存器的最低12個有效位中。通過設置ADC_CR1寄存器的AWDIE位以允許產(chǎn)生相應中斷。圖6-3是模擬看門狗警戒區(qū)。閥值獨立于由ADC_CR2寄存器上的ALIGN位選擇的數(shù)據(jù)對齊模式。比較是在對齊之前完成的。通過配置ADC_CR1寄存器,模擬看門狗可以作用于1個或多個通道,如表6-1所示。模擬看門狗警戒的通道ADC_CR1寄存器控制位AWDSGL位AWDEN位JAWDEN位無任意值00所有注入通道001所有規(guī)則通道010所有注入和規(guī)則通道011單一的(1)注入通道101單一的(1)規(guī)則通道110單一的(1)注入或規(guī)則通道000圖6-3模擬看門狗警戒區(qū)表6-1模擬看門狗通道選擇8、掃描模式此模式用來掃描一組模擬通道,掃描模式可通過設置ADC_CR1寄存器的SCAN位來選擇。一旦這個位被設置,ADC掃描所有被ADC_SQRX寄存器(對規(guī)則通道)或ADC_JSQR(對注入通道)選中的所有通道。在每個組的每個通道上執(zhí)行單次轉換。在每個轉換結束時,同一組的下一個通道被自動轉換。如果設置了CONT位,轉換不會在選擇組的最后一個通道上停止,而是再次從選擇組的第一個通道繼續(xù)轉換。如果設置了DMA位,在每次EOC后,DMA控制器把規(guī)則組通道的轉換數(shù)據(jù)傳輸?shù)絊RAM中。而注入通道轉換的數(shù)據(jù)總是存儲在ADC_JDRx寄存器中。9、注入通道管理(1)觸發(fā)注入清除ADC_CR1寄存器的JAUTO位,并且設置SCAN位,即可使用觸發(fā)注入功能。1)利用外部觸發(fā)或通過設置ADC_CR2寄存器的ADON位,啟動一組規(guī)則通道的轉換。2)如果在規(guī)則通道轉換期間產(chǎn)生一外部注入觸發(fā),當前轉換被復位,注入通道序列被以單次掃描方式進行轉換。3)然后,恢復上次被中斷的規(guī)則組通道轉換。如果在注入轉換期間產(chǎn)生一規(guī)則事件,注入轉換不會被中斷,但是規(guī)則序列將在注入序列結束后被執(zhí)行。注:當使用觸發(fā)的注入轉換時,必須保證觸發(fā)事件的間隔長于注入序列。例如:序列長度為28個ADC時鐘周期(即2個具有1.5個時鐘間隔采樣時間的轉換),觸發(fā)之間最小的間隔必須是29個ADC時鐘周期。(2)自動注入如果設置了JAUTO位,在規(guī)則組通道之后,注入組通道被自動轉換。這可以用來轉換在ADC_SQRx和ADC_JSQR寄存器中設置的多至20個轉換序列。在此模式里,必須禁止注入通道的外部觸發(fā)。如果除JAUTO位外還設置了CONT位,規(guī)則通道至注入通道的轉換序列被連續(xù)執(zhí)行。對于ADC時鐘預分頻系數(shù)為4至8時,當從規(guī)則轉換切換到注入序列或從注入轉換切換到規(guī)則序列時,會自動插入1個ADC時鐘間隔;當ADC時鐘預分頻系數(shù)為2時,則有2個ADC時鐘間隔的延遲。圖6-4為注入轉換延時時序圖。圖6-4注入轉換延時10、間斷模式(1)規(guī)則組此模式通過設置ADC_CR1寄存器上的DISCEN位激活。它可以用來執(zhí)行一個短序列的n次轉換(n<=8),此轉換是ADC_SQRx寄存器所選擇的轉換序列的一部分。數(shù)值n由ADC_CR1寄存器的DISCNUM[2:0]位給出。一個外部觸發(fā)信號可以啟動ADC_SQRx寄存器中描述的下一輪n次轉換,直到此序列所有的轉換完成為止??偟男蛄虚L度由ADC_SQR1寄存器的L[3:0]定義。舉例:n=3,被轉換的通道=0、1、2、3、6、7、9、10第一次觸發(fā):轉換的序列為0、1、2第二次觸發(fā):轉換的序列為3、6、7第三次觸發(fā):轉換的序列為9、10,并產(chǎn)生EOC事件第四次觸發(fā):轉換的序列0、1、2注意:當以間斷模式轉換一個規(guī)則組時,轉換序列結束后不自動從頭開始。當所有子組被轉換完成,下一次觸發(fā)啟動第一個子組的轉換。在上面的例子中,第四次觸發(fā)重新轉換第一子組的通道0、1和2。(2)注入組此模式通過設置ADC_CR1寄存器的JDISCEN位激活。在一個外部觸發(fā)事件后,該模式按通道順序逐個轉換ADC_JSQR寄存器中選擇的序列。一個外部觸發(fā)信號可以啟動ADC_JSQR寄存器選擇的下一個通道序列的轉換,直到序列中所有的轉換完成為止??偟男蛄虚L度由ADC_JSQR寄存器的JL[1:0]位定義。例子:n=1,被轉換的通道=1、2、3第一次觸發(fā):通道1被轉換第二次觸發(fā):通道2被轉換第三次觸發(fā):通道3被轉換,并且產(chǎn)生EOC和JEOC事件第四次觸發(fā):通道1被轉換注意:1)當完成所有注入通道轉換,下個觸發(fā)啟動第1個注入通道的轉換。在上述例子中,第四個觸發(fā)重新轉換第1個注入通道1。2)不能同時使用自動注入和間斷模式。3)必須避免同時為規(guī)則和注入組設置間斷模式。間斷模式只能作用于一組轉換。24第四節(jié)寄存器(**)

1、ADC狀態(tài)寄存器(ADC_SR)地址偏移:0x00復位值:0x00000000位31:15保留。必須保持為0。位4STRT:規(guī)則通道開始位(RegularchannelStartflag)該位由硬件在規(guī)則通道轉換開始時設置,由軟件清除。0:規(guī)則通道轉換未開始;1:規(guī)則通道轉換已開始。位3JSTRT:注入通道開始位(InjectedchannelStartflag)該位由硬件在注入通道組轉換開始時設置,由軟件清除。0:注入通道組轉換未開始;1:注入通道組轉換已開始。位2JEOC:注入通道轉換結束位(Injectedchannelendofconversion)該位由硬件在所有注入通道組轉換結束時設置,由軟件清除0:轉換未完成;1:轉換完成。位1EOC:轉換結束位(Endofconversion)該位由硬件在(規(guī)則或注入)通道組轉換結束時設置,由軟件清除或由讀取ADC_DR時清除0:轉換未完成;1:轉換完成。位0AWD:模擬看門狗標志位(Analogwatchdogflag)該位由硬件在轉換的電壓值超出了ADC_LTR和ADC_HTR寄存器定義的范圍時設置,由軟件清除0:沒有發(fā)生模擬看門狗事件;1:發(fā)生模擬看門狗事件。2、ADC控制寄存器1(ADC_CR1)地址偏移:0x04復位值:0x00000000位31:24保留。必須保持為0。位23AWDEN:在規(guī)則通道上開啟模擬看門狗(Analogwatchdogenableonregularchannels)該位由軟件設置和清除。0:在規(guī)則通道上禁用模擬看門狗;1:在規(guī)則通道上使用模擬看門狗。位22JAWDEN:在注入通道上開啟模擬看門狗(Analogwatchdogenableoninjectedchannels)該位由軟件設置和清除。0:在注入通道上禁用模擬看門狗;1:在注入通道上使用模擬看門狗。位21:20保留。必須保持為0。位19::16DUALMOD[3:0]:雙模式選擇(Dualmodeselection)軟件使用這些位選擇操作模式。0000:獨立模式0001:混合的同步規(guī)則+注入同步模式0010:混合的同步規(guī)則+交替觸發(fā)模式0011:混合同步注入+快速交叉模式0100:混合同步注入+慢速交叉模式0101:注入同步模式0110:規(guī)則同步模式0111:快速交叉模式1000:慢速交叉模式1001:交替觸發(fā)模式注:在ADC2和ADC3中這些位為保留位在雙模式中,改變通道的配置會產(chǎn)生一個重新開始的條件,這將導致同步丟失。建議在進行任何配置改變前關閉雙模式。位15:13DISCNUM[2:0]:間斷模式通道計數(shù)(Discontinuousmodechannelcount)軟件通過這些位定義在間斷模式下,收到外部觸發(fā)后轉換規(guī)則通道的數(shù)目000:1個通道001:2個通道……111:8個通道位12JDISCEN:在注入通道上的間斷模式(Discontinuousmodeoninjectedchannels)該位由軟件設置和清除,用于開啟或關閉注入通道組上的間斷模式0:注入通道組上禁用間斷模式;1:注入通道組上使用間斷模式。位11DISCEN:在規(guī)則通道上的間斷模式(Discontinuousmodeonregularchannels)該位由軟件設置和清除,用于開啟或關閉規(guī)則通道組上的間斷模式0:規(guī)則通道組上禁用間斷模式;1:規(guī)則通道組上使用間斷模式。位10JAUTO:自動的注入通道組轉換(AutomaticInjectedGroupconversion)該位由軟件設置和清除,用于開啟或關閉規(guī)則通道組轉換結束后自動的注入通道組轉換0:關閉自動的注入通道組轉換;1:開啟自動的注入通道組轉換。位9AWDSGL:掃描模式中在一個單一的通道上使用看門狗(Enablethewatchdogonasinglechannelinscanmode)該位由軟件設置和清除,用于開啟或關閉由AWDCH[4:0]位指定的通道上的模擬看門狗功能0:在所有的通道上使用模擬看門狗;1:在單一通道上使用模擬看門狗。位8SCAN:掃描模式(Scanmode)該位由軟件設置和清除,用于開啟或關閉掃描模式。在掃描模式中,轉換由ADC_SQRx或ADC_JSQRx寄存器選中的通道。0:關閉掃描模式;1:使用掃描模式。注:如果分別設置了EOCIE或JEOCIE位,只在最后一個通道轉換完畢后才會產(chǎn)生EOC或JEOC中斷。位7JEOCIE:允許產(chǎn)生注入通道轉換結束中斷(Interruptenableforinjectedchannels)該位由軟件設置和清除,用于禁止或允許所有注入通道轉換結束后產(chǎn)生中斷。0:禁止JEOC中斷;1:允許JEOC中斷。當硬件設置JEOC位時產(chǎn)生中斷。位6AWDIE:允許產(chǎn)生模擬看門狗中斷(Analogwatchdoginterruptenable)該位由軟件設置和清除,用于禁止或允許模擬看門狗產(chǎn)生中斷。在掃描模式下,如果看門狗檢測到超范圍的數(shù)值時,只有在設置了該位時掃描才會中止。0:禁止模擬看門狗中斷;1:允許模擬看門狗中斷位5EOCIE:允許產(chǎn)生EOC中斷(InterruptenableforEOC)該位由軟件設置和清除,用于禁止或允許轉換結束后產(chǎn)生中斷。0:禁止EOC中斷;1:允許EOC中斷。當硬件設置EOC位時產(chǎn)生中斷。位4:0AWDCH[4:0]:模擬看門狗通道選擇位(Analogwatchdogchannelselectbits)這些位由軟件設置和清除,用于選擇模擬看門狗保護的輸入通道。00000:ADC模擬輸入通道000001:ADC模擬輸入通道1……01111:ADC模擬輸入通道1510000:ADC模擬輸入通道1610001:ADC模擬輸入通道17保留所有其他數(shù)值。注:ADC1的模擬輸入通道16和通道17在芯片內(nèi)部分別連到了溫度傳感器和VREFINT。ADC2的模擬輸入通道16和通道17在芯片內(nèi)部連到了VSS。ADC3模擬輸入通道9、14、15、16、17與Vss相連。3、ADC控制寄存器2(ADC_CR2)地址偏移:0x08復位值:0x00000000位31:24保留。必須保持為0。位23TSVREFE:溫度傳感器和VREFINT使能(TemperaturesensorandVREFINTenable)該位由軟件設置和清除,用于開啟或禁止溫度傳感器和VREFINT通道。在多于1個ADC的器件中,該位僅出現(xiàn)在ADC1中。0:禁止溫度傳感器和VREFINT;1:啟用溫度傳感器和VREFINT。位22SWSTART:開始轉換規(guī)則通道(Startconversionofregularchannels)由軟件設置該位以啟動轉換,轉換開始后硬件馬上清除此位。如果在EXTSEL[2:0]位中選擇了SWSTART為觸發(fā)事件,該位用于啟動一組規(guī)則通道的轉換,0:復位狀態(tài);1:開始轉換規(guī)則通道。位21JSWSTART:開始轉換注入通道(Startconversionofinjectedchannels)由軟件設置該位以啟動轉換,軟件可清除此位或在轉換開始后硬件馬上清除此位。如果在JEXTSEL[2:0]位中選擇了JSWSTART為觸發(fā)事件,該位用于啟動一組注入通道的轉換,0:復位狀態(tài);1:開始轉換注入通道。位20EXTTRIG:規(guī)則通道的外部觸發(fā)轉換模式(Externaltriggerconversionmodeforregularchannels)該位由軟件設置和清除,用于開啟或禁止可以啟動規(guī)則通道組轉換的外部觸發(fā)事件。0:不用外部事件啟動轉換;1:使用外部事件啟動轉換。位19:17EXTSEL[2:0]:選擇啟動規(guī)則通道組轉換的外部事件(Externaleventselectforregulargroup)這些位選擇用于啟動規(guī)則通道組轉換的外部事件ADC1和ADC2的觸發(fā)配置如下000:定時器1的CC1事件100:定時器3的TRGO事件001:定時器1的CC2事件101:定時器4的CC4事件110:EXTI線11/TIM8_TRGO事件,僅大容量產(chǎn)品具有TIM8_TRGO功能010:定時器1的CC3事件011:定時器2的CC2事件111:SWSTARTADC3的觸發(fā)配置如下000:定時器3的CC1事件100:定時器8的TRGO事件001:定時器2的CC3事件101:定時器5的CC1事件010:定時器1的CC3事件110:定時器5的CC3事件011:定時器8的CC1事件111:SWSTART位16保留。必須保持為0。位15JEXTTRIG:注入通道的外部觸發(fā)轉換模式(Externaltriggerconversionmodeforinjectedchannels)該位由軟件設置和清除,用于開啟或禁止可以啟動注入通道組轉換的外部觸發(fā)事件。0:不用外部事件啟動轉換;1:使用外部事件啟動轉換。位14:12JEXTSEL[2:0]:選擇啟動注入通道組轉換的外部事件(Externaleventselectforinjectedgroup)這些位選擇用于啟動注入通道組轉換的外部事件。ADC1和ADC2的觸發(fā)配置如下000:定時器1的TRGO事件100:定時器3的CC4事件001:定時器1的CC4事件101:定時器4的TRGO事件110:EXTI線15/TIM8_CC4事件(僅大容量產(chǎn)品具有TIM8_CC4)010:定時器2的TRGO事件011:定時器2的CC1事件111:JSWSTARTADC3的觸發(fā)配置如下000:定時器1的TRGO事件100:定時器8的CC4事件001:定時器1的CC4事件101:定時器5的TRGO事件010:定時器4的CC3事件110:定時器5的CC4事件011:定時器8的CC2事件111:JSWSTART位11ALIGN:數(shù)據(jù)對齊(Dataalignment)該位由軟件設置和清除。0:右對齊;1:左對齊。位10:9保留。必須保持為0。位8DMA:直接存儲器訪問模式(Directmemoryaccessmode)該位由軟件設置和清除。詳見DMA控制器章節(jié)。0:不使用DMA模式;1:使用DMA模式。注:只有ADC1和ADC3能產(chǎn)生DMA請求。位7:4保留。必須保持為0。位3RSTCAL:復位校準(Resetcalibration)該位由軟件設置并由硬件清除。在校準寄存器被初始化后該位將被清除。0:校準寄存器已初始化;1:初始化校準寄存器。注:如果正在進行轉換時設置RSTCAL,清除校準寄存器需要額外的周期。位2CAL:A/D校準(A/DCalibration)該位由軟件設置以開始校準,并在校準結束時由硬件清除。0:校準完成;1:開始校準。位1CONT:連續(xù)轉換(Continuousconversion)該位由軟件設置和清除。如果設置了此位,則轉換將連續(xù)進行直到該位被清除。0:單次轉換模式;1:連續(xù)轉換模式。位0ADON:開/關A/D轉換器(A/DconverterON/OFF)該位由軟件設置和清除。當該位為’0’時,寫入’1’將把ADC從斷電模式下喚醒。當該位為’1’時,寫入’1’將啟動轉換。應用程序需注意,在轉換器上電至轉換開始有一個延遲tSTAB。0:關閉ADC轉換/校準,并進入斷電模式;1:開啟ADC并啟動轉換。注:如果在這個寄存器中與ADON一起還有其他位被改變,則轉換不被觸發(fā)。這是為了防止觸發(fā)錯誤的轉換。4、ADC采樣時間寄存器1(ADC_SMPR1)地址偏移:0x0C復位值:0x00000000位31:24保留。必須保持為0。位23:0SMPx[2:0]:選擇通道x的采樣時間(ChannelxSampletimeselection)這些位用于獨立地選擇每個通道的采樣時間。在采樣周期中通道選擇位必須保持不變。000:1.5周期100:41.5周期001:7.5周期101:55.5周期010:13.5周期110:71.5周期011:28.5周期111:239.5周期注:ADC1的模擬輸入通道16和通道17在芯片內(nèi)部分別連到了溫度傳感器和VREFINT。ADC2的模擬輸入通道16和通道17在芯片內(nèi)部連到了Vss。ADC3模擬輸入通道14、15、16、17與Vss相連5、ADC采樣時間寄存器2(ADC_SMPR2)地址偏移:0x10復位值:0x00000000位31:30保留。必須保持為0。位29:0SMPx[2:0]:選擇通道x的采樣時間(ChannelxSampletimeselection)這些位用于獨立地選擇每個通道的采樣時間。在采樣周期中通道選擇位必須保持不變。000:1.5周期100:41.5周期001:7.5周期101:55.5周期010:13.5周期110:71.5周期011:28.5周期111:239.5周期注:ADC3模擬輸入通道9與Vss相連6、ADC注入通道數(shù)據(jù)偏移寄存器x(ADC_JOFRx)(x=1..4)地址偏移:0x14-0x20復位值:0x00000000位31:12保留。必須保持為0。位11:0JOFFSETx[11:0]:注入通道x的數(shù)據(jù)偏移(Dataoffsetforinjectedchannelx)當轉換注入通道時,這些位定義了用于從原始轉換數(shù)據(jù)中減去的數(shù)值。轉換的結果可以在ADC_JDRx寄存器中讀出。7、ADC看門狗高閥值寄存器(ADC_HTR)地址偏移:0x24復位值:0x00000000位31:12保留。必須保持為0。位11:0HT[11:0]:模擬看門狗高閥值(Analogwatchdoghigh

threshold)這些位定義了模擬看門狗的閥值高限。8、ADC看門狗低閥值寄存器(ADC_LRT)地址偏移:0x28復位值:0x00000000

位31:12保留。必須保持為0。位11:0LT[11:0]:模擬看門狗低閥值(Analogwatchdoglowthreshold)這些位定義了模擬看門狗的閥值低限。9、ADC規(guī)則序列寄存器1(ADC_SQR1)地址偏移:0x2C復位值:0x00000000

位31:24保留。必須保持為0。位23:20L[3:0]:規(guī)則通道序列長度(Regularchannelsequencelength)這些位由軟件定義在規(guī)則通道轉換序列中的通道數(shù)目。0000:1個轉換0001:2個轉換……1111:16個轉換位19:15SQ16[4:0]:規(guī)則序列中的第16個轉換(16thconversioninregularsequence)這些位由軟件定義轉換序列中的第16個轉換通道的編號(0~17)。位14:10SQ15[4:0]:規(guī)則序列中的第15個轉換(15thconversioninregularsequence)位9:5SQ14[4:0]:規(guī)則序列中的第14個轉換(14thconversioninregularsequence)位4:0SQ13[4:0]:規(guī)則序列中的第13個轉換(13thconversioninregularsequence)10、ADC規(guī)則序列寄存器2(ADC_SQR2)地址偏移:0x30復位值:0x00000000

位31:20保留。必須保持為0。位29:25SQ12[4:0]:規(guī)則序列中的第12個轉換(12thconversioninregularsequence)這些位由軟件定義轉換序列中的第12個轉換通道的編號(0~17)。位24:20SQ11[4:0]:規(guī)則序列中的第11個轉換(11thconversioninregularsequence)位19:15SQ10[4:0]:規(guī)則序列中的第10個轉換(10thconversioninregularsequence)位14:10SQ9[4:0]:規(guī)則序列中的第9個轉換(9thconversioninregularsequence)位9:5SQ8[4:0]:規(guī)則序列中的第8個轉換(82thconversioninregularsequence)位4:0SQ7[4:0]:規(guī)則序列中的第7個轉換(7thconversioninregularsequence)11、ADC規(guī)則序列寄存器3(ADC_SQR3)地址偏移:0x34復位值:0x00000000位31:30保留。必須保持為0。位29:25SQ6[4:0]:規(guī)則序列中的第6個轉換(6thconversioninregularsequence)這些位由軟件定義轉換序列中的第6個轉換通道的編號(0~17)。位24:20SQ5[4:0]:規(guī)則序列中的第5個轉換(5thconversioninregularsequence)位19:15SQ4[4:0]:規(guī)則序列中的第4個轉換(4thconversioninregularsequence)位14:10SQ3[4:0]:規(guī)則序列中的第3個轉換(3rdconversioninregularsequence)位9:5SQ2[4:0]:規(guī)則序列中的第2個轉換(2ndconversioninregularsequence)位4:0SQ1[4:0]:規(guī)則序列中的第1個轉換(1stconversioninregularsequence)12、ADC注入序列寄存器(ADC_JSQR)地址偏移:0x38復位值:0x00000000

位31:22保留。必須保持為0。位21:20JL[1:0]:注入通道序列長度(Injectedsequencelength)這些位由軟件定義在規(guī)則通道轉換序列中的通道數(shù)目。00:1個轉換01:2個轉換10:3個轉換11:4個轉換位19:15JSQ4[4:0]:注入序列中的第4個轉換(4thconversionininjectedsequence)這些位由軟件定義轉換序列中的第4個轉換通道的編號(0~17)。注:不同于規(guī)則轉換序列,如果JL[1:0]的長度小于4,則轉換的序列順序是從(4-JL)開始。例如:ADC_JSQR[21:0]=1000011000110011100010,意味著掃描轉換將按下列通道順序轉換:7、3、3,而不是2、7、3。位14:10JSQ3[4:0]:注入序列中的第3個轉換(3rdconversionininjectedsequence)位9:5JSQ2[4:0]:注入序列中的第2個轉換(2ndconversionininjectedsequence)位4:0JSQ1[4:0]:注入序列中的第1個轉換(1stconversionininjectedsequence)13、ADC注入數(shù)據(jù)寄存器x(ADC_JDRx)(x=1..4)地址偏移:0x3C–0x48復位值:0x00000000位31:16保留。必須保持為0。位21:20JDATA[15:0]:注入轉換的數(shù)據(jù)(Injecteddata)這些位為只讀,包含了注入通道的轉換結果,數(shù)據(jù)是左對齊或右對齊。14ADC規(guī)則數(shù)據(jù)寄存器(ADC_DR)地址偏移:0x4C復位值:0x00000000

位31:16ADC2DATA[15:0]:ADC2轉換的數(shù)據(jù)(ADC2data)-在ADC1中:雙模式下,這些位包含了ADC2轉換的規(guī)則通道數(shù)據(jù)。-在ADC2和ADC3中:不使用這些位。位15:0DATA[15:0]:規(guī)則轉換的數(shù)據(jù)(Regulardata)這些位為只讀,包含了規(guī)則通道的轉換結果,數(shù)據(jù)是左對齊或右對齊。37第五節(jié)庫函數(shù)說明(**)

庫函數(shù)(Libraryfunction)是把函數(shù)放到庫里,供別人使用的一種方式。方法是把一些常用到的函數(shù)編完放到一個文件里,供不同的人進行調(diào)用。調(diào)用的時候把它所在的文件名用#include《》加到里面就可以了。一般是放到lib文件里的。1、ADC_DeInit函數(shù)的功能是將外設ADCx的全部寄存器重設為默認值。ADC_DeInit(ADC2);ADC_AutoInjectedConvCmd(ADC2,ENABLE);2、ADC_Init函數(shù)的功能是根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設ADCx的寄存器。其中ADC_InitTypeDef定義在stm32f10x_adc.h中。其結構體如下所示:typedefstruct{u32ADC_Mode;//可以設置ADC_ModeFunctionalStateADC_ScanConvMode;//規(guī)定了模數(shù)轉換工作在掃描模式還是單次模式,參數(shù)可以是ENABLE和DISENABLEFunctionalStateADC_CintinuousConvMode;//規(guī)定了模數(shù)轉換工作在連續(xù)還是單次模式,參數(shù)可以是ENABLE和DISENABLEu32ADC_ExternalTrigConv;//定義了使用外部觸發(fā)來啟動規(guī)則通道的模數(shù)轉換u32ADC_DataAlign;//規(guī)定了ADC數(shù)據(jù)向左邊對齊還是右邊對齊參數(shù)可以是right和leftu8ADC_NbrOfChannel;//規(guī)定了順序進行規(guī)則轉換的ADC通道的數(shù)目。參數(shù)可以是1~16}ADC_InitTypeDef例:初始化ADC1(可以按照自己的需要來初始化,這里只是一個例)ADC_InitTypeDefADC_InitTypeDefADC_InitStructure;ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_CintinuousConvMode=DISENABLE;ADC_InitStructure.ADC_ExternalTrigconv=ADC_ExternalTrigconv_T1_CC1;ADC_InitStructure.ADC_Data_Align=ADC_DataAlign_RIGHT;ADC_InitStructure.ADC_NbrOfChannel=16;ADC_Init(ADC1,&ADC_InitStructure);3、ADC_Cmd函數(shù)的功能是使能或失能指定的ADC,其中ADC_Cmd只能在其他ADC設置函數(shù)之后被調(diào)用ADC_Cmd(ADC1,ENABLE);4、ADC_DMACmd函數(shù)的功能是使能或者失能指定的ADC的DMA請求。ADC_DMACmd(ADC1,ENABLE);5、ADC_ITConfig函數(shù)的功能是使能或者失能指定的ADC的中斷,其中可以是EOC/AWD/JEOCADC_ITConfig(ADC2,ADC_IT_EOC|ADC_IT_AWD);6、ADC_ResetCalibration函數(shù)的功能是重置指定的ADC的校準寄存器。ADC_ReserCalibration(ADC1);7、ADC_GetResetCalibrationSttaus函數(shù)的功能是獲取ADC重置校準寄存器的狀態(tài)。FlagStatusStatusStatus=ADC_GetResetCalibrationSttaus(ADC2);8、ADC_StartCalibration函數(shù)的功能是開始指定ADC的校準。ADC_StartCalibration(ADC2);9、ADC_GetCalibrationStatus函數(shù)的功能是獲取ADC的校準狀態(tài)。具有返回值FlagStatusStatus;Status=ADC_GetCalibrationStatus(ADC2);10、ADC_SoftwareStartConvCmd函數(shù)的功能是使能或者失能指定的ADC的軟件啟動功能。ADC_SoftwareStartConvCmd(ADC1,ENABLE);11、ADC_DiscModeChannelCountConfig函數(shù)的功能是對ADC規(guī)則通道配置間斷模式。其中參數(shù)可以是1~8。ADC_DiscModeChannelCountConfig(ADC1,2);12、ADC_DiscModeCmd函數(shù)的功能是使能或者失能指定的ADC規(guī)則組通道的間斷模式。ADC_DiscModeCmd(ADC1,ENABLE);13、ADC_RegularChannelConfig函數(shù)的功能是設置ADC的規(guī)則組通道,設置他們的轉化順序和采樣時間,其中ADC_Channel配置通過本函數(shù)來設置的ADC通道,可以是0~17,ADC_SampleTime配置選中通道的ADC采樣時間。ADC_RegularChannelConfig(ADC2,ADC_Channel_2,1,ADC_SampleTime_1Cycles5);14、ADC_ExternalTrigConvConfig函數(shù)的功能是使能ADCx外部觸發(fā)啟動轉換功能。ADC_ExternalTrigConvConfig(ADC2,ENABLE);15、ADC_GetConversionValue函數(shù)的功能是返回最近一次ADCx規(guī)則組的轉換結果。u16DataValue;DataValue=ADC_GetConversionValue(ADC2);16、ADC_GetDuelModeConversionValue函數(shù)的功能是返回最近一次雙ADC模式下的轉換結果。u32Data

溫馨提示

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

評論

0/150

提交評論