STM32微控制器原理及應(yīng)用-定時器_第1頁
STM32微控制器原理及應(yīng)用-定時器_第2頁
STM32微控制器原理及應(yīng)用-定時器_第3頁
STM32微控制器原理及應(yīng)用-定時器_第4頁
STM32微控制器原理及應(yīng)用-定時器_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1STM32原理及其應(yīng)用2定時器

教學(xué)基本內(nèi)容:STM32定時器概述、TIM2應(yīng)用實(shí)例。重點(diǎn):通用定時器TIMx功能、通用定時器TIMx結(jié)構(gòu)、通用定時器TIMx寄存器。難點(diǎn):通用定時器TIMx庫函數(shù)。本章主要教學(xué)要求:了解什么是STM32定時器,了解通用定時器的功能及結(jié)構(gòu),了解通用定時器的寄存器及庫函數(shù)。3第一節(jié)STM32定時器概述(了解)第二節(jié)通用定時器TIMx功能(重點(diǎn))第三節(jié)通用定時器TIMx結(jié)構(gòu)(重點(diǎn))第四節(jié)通用定時器TIMx寄存器(重點(diǎn))第五節(jié)通用定時器TIMx庫函數(shù)(理解)第六節(jié)TIM2應(yīng)用實(shí)例(了解)4第一節(jié)STM32定時器概述

我們將要學(xué)習(xí)“定時器”。STM32F1系列單片機(jī)提供了大量的定時器:2個基本定時器(TIM6、TIM7)、4個通用定時器(TIM2、TIM3、TIM4、TIM5)、2個高級控制定時器(TIM1、TIM8)、4個特定功能定時器(SysTick、IWDG、WWDG、RTC),累計有12個之多。另外,在超大容量系列產(chǎn)品(STM32F103xF、STM32F103xG)中又增加了5個通用定時器(TIM9、TIM10、TIM11、TIM12、TIM13、TIM14)。定時器、外部中斷是STM32F1系列單片機(jī)實(shí)現(xiàn)多任務(wù)的核心,也是嵌入式程序設(shè)計的精華所在,不過在難度上也是最大的。高級控制定時器除了具有剎車輸入BKIN、互補(bǔ)輸出CHxN和重復(fù)次數(shù)計數(shù)器外與通用定時器的主要功能基本相同,兩者都包含基本定時器的功能。實(shí)時鐘提供時鐘日歷的功能。獨(dú)立看門狗和窗口看門狗用來檢測和解決軟件錯誤引起的故障。4個可同步運(yùn)行的通用定時器(TIM2、TIM3、TIM4、TIM5)中,每個定時器都有一個16位的自動加載遞增/遞減計數(shù)器、一個16位的預(yù)分頻器和4個獨(dú)立的通道。它適用于多種場合,包括測量輸入信號的脈沖長度(輸入捕獲),或者產(chǎn)生需要的輸出波形(輸出比較、產(chǎn)生PWM、單脈沖輸出等)。2個16位高級控制定時器(T1MI和TIM8)由一個可編程預(yù)分頻器驅(qū)動的16位自動裝載計數(shù)器組成,與通用定時器有許多共同之處,但其功能更強(qiáng)大,適合多種用途,包含測量輸入信號的脈沖寬度(輸入捕獲),或者產(chǎn)生輸出波形(輸出比較,產(chǎn)生PWM、具有帶死區(qū)插入的互補(bǔ)PWM輸出、單脈沖輸出等)。2個基本定時器(T1M6和TIM7)主要用于產(chǎn)生DAC觸發(fā)信號,也可當(dāng)做通用的16位時基計數(shù)器。

上述定時器比較見表5-1。表5-1定時器比較

實(shí)時時鐘(RTC)器件是一種能提供日歷/時鐘、數(shù)據(jù)存儲等功能的專用集成電路,常用做各種計算機(jī)系統(tǒng)的時鐘信號源和參數(shù)設(shè)置存儲電路。RTC具有計時準(zhǔn)確、耗電低和體積小等特點(diǎn),特別適合在各種嵌入式系統(tǒng)中用于記錄事件發(fā)生的時間和相關(guān)信息,如通信工程、電力自動化、工業(yè)控制等自動化程度高并且無人值守的領(lǐng)域。

看門狗(Watchdog)的作用是在微控制器受到干擾進(jìn)入錯誤狀態(tài)后,使系統(tǒng)在一定時間間隔內(nèi)復(fù)位。因此看門狗是保證系統(tǒng)長期、可靠和穩(wěn)定運(yùn)行的有效措施。日前大部分的嵌入式芯片內(nèi)部都集成了看門狗定時器來提高系統(tǒng)運(yùn)行的可靠性。STM32處理器內(nèi)置了2個看門狗,即獨(dú)立看門狗IWDG和窗口看門狗WWDG,它們可用于檢測和解決由軟件錯誤引起的故障。獨(dú)立看門狗基于一個12位的遞減計數(shù)溶和一個8位的預(yù)分頻器,獨(dú)立看門狗采用內(nèi)部獨(dú)立的32kHz的低速時鐘,即使主時鐘發(fā)生故障,它也仍然有效,所以它可以運(yùn)行于停機(jī)模式或待機(jī)模式。它還可以用于在發(fā)生問題時復(fù)位整個系統(tǒng),或者作為一個自由定時器為應(yīng)用程序提供超時管理。窗口看門狗內(nèi)有一個7位的遞減計數(shù)器,其時鐘則從APB1時鐘分頻后獲得,通過可配置的時間窗口來檢測應(yīng)用程序的非正常行為。因此,獨(dú)立看門狗適合作為獨(dú)立于整個應(yīng)用程序的看門狗,能夠完全獨(dú)立工作,對時間精度要求較低;而窗口看門狗則適合要求在精確計時窗口起作用的應(yīng)用程序。7

SysTick時鐘位于CM3內(nèi)核中,是一個24位遞減計數(shù)器。將其設(shè)定初值并使能后,每經(jīng)過1個系統(tǒng)時鐘周期,計數(shù)值就減1。計數(shù)到0時,SysTick計數(shù)器將自動重裝初值并繼續(xù)計數(shù),同時內(nèi)部的COUNTFLAG標(biāo)志會置位,從而觸發(fā)中斷。在STM32的應(yīng)用中,使用CM3內(nèi)核的SysTick作為定時時鐘,主要用于精確延時。第二節(jié)通用定時器TIMx功能(**)

1、16位向上、向下、向上/向下自動裝載計數(shù)器。2、16位可編程(可以實(shí)時修改)預(yù)分頻器,計數(shù)器時鐘頻率的分頻系數(shù)為1~65535之間的任意數(shù)值。3、4個獨(dú)立通道,即輸入捕獲、輸出比較、PWM生成(邊沿或中間對齊模式)和單脈沖模式輸出。5、使用外部信號和多個定時器內(nèi)部互連,構(gòu)成同步電路來控制定時器。6、下述事件發(fā)生時產(chǎn)生中斷或DMA更新:計數(shù)器向上/向下溢出,計數(shù)器初始化(通過軟件或內(nèi)部/外部觸發(fā));觸發(fā)事件(計數(shù)器啟動、停止、初始化,或者由內(nèi)部/外部觸發(fā)計數(shù));輸入捕獲;輸出比較。7、支持針對定位的増量(正交)編碼器和霍爾傳感器電路。8、觸發(fā)輸入作為外部時鐘,或者按周期的電流管理。第三節(jié)通用定時器TIMx結(jié)構(gòu)(**)

通用定時器的核心是可編程預(yù)分頻器驅(qū)動的16位自動裝載計數(shù)器。STM32的4個通用定時器TIMx(TIM2~TIM5)硬件結(jié)構(gòu)如圖5-1所示,圖中縮寫含義如表5-2所示。硬件結(jié)構(gòu)可分為3各部分,即時鐘源、時鐘單元、捕獲和比較通道。圖5-1通用定時器TIMx硬件結(jié)構(gòu)圖表5-2圖5-1中圖示的含義圖示含義TIMx_ETRTIMER外部觸發(fā)引腳ETR外部觸發(fā)輸入ETRP分頻后的外部觸發(fā)輸入ETRF濾波后的外部觸發(fā)輸入ITRx內(nèi)部觸發(fā)x(由其他定時器觸發(fā))TI1F_EDTI1的邊沿檢測器TI1FP1/2濾波后定時器1/2的輸入觸發(fā)輸入TRGO觸發(fā)輸出CK_PSC分頻器時鐘輸入CK_CNT定時器計數(shù)值TIMx_CHxTIMER的捕獲/比較通道引腳TIx定時器輸入信號xICx輸入比較xICxPS分頻后的ICxOCx輸出捕獲xOCxREF輸出參考信號TGI觸發(fā)輸入中斷TRC列循環(huán)時間CCxI發(fā)生的事件TIxFP1/2濾波后定時器x(1、2、3、4)的輸入TIMx_CLK來自RCC的時鐘一、時鐘源選擇1、內(nèi)部時鐘源(CK_INT)

如圖5-2所示,選擇內(nèi)部時鐘源作為時鐘,定時器的時鐘不是直接來自APB1或APB2,而是來自于輸入為APB1或APB2的一個倍頻器(如圖5-2中的陰影框所示)。當(dāng)APB1的預(yù)分頻系數(shù)為1時,這個倍頻器不起作用,定時器的時鐘頻率等于APB1的,頻率;當(dāng)APB1的預(yù)分頻系數(shù)為其他數(shù)值(即預(yù)分頻系數(shù)為2、4、8或16)時,這個倍頻器起作用,定時器的時鐘頻率等于APB1的頻率2倍。例如,當(dāng)AHB為72MHz時,APB1的預(yù)分頻系數(shù)必須大于2,因?yàn)锳PB1的最大輸出頻率只能為36MHzo如果APB1的預(yù)分頻系數(shù)為2,則因?yàn)檫@個倍頻器2倍的作用,TIM2-7仍然能夠得到72MHz的時鐘頻率。圖5-2部分時鐘系統(tǒng)2、外部時鐘源模式1(Tlx)

包括TI1F_ED、TI1FP1.TI2FP2等,見圖5-3。TI1FP1、TI2FP2可使多個定時器與外部觸發(fā)信號同步,如圖5-4所示。圖5-3定時器時鐘源圖5-4定時器與外部觸發(fā)信號同步3、外部時鐘源模式2

外部時鐘源模式2如圖5-5所示。從圖5-5可以看出,ETR可以直接作為時鐘輸入,也可以通過觸發(fā)輸入(TRGI)來作為時鐘輸入,即在TRGI中觸發(fā)源選擇為ETR,二者效果上是一樣的??雌饋磉@個外部時鐘模式ETRF沒有什么用處,實(shí)際上它可以跟一些從模式(復(fù)位、觸發(fā)、門控)進(jìn)行組合。圖5-5外部時鐘模式24、內(nèi)部觸發(fā)輸入(ITRx)

該引腳可通過主(Master)和從(Slave)模式使定時器同步。如圖5-6所示,TIM2需設(shè)置成TIM1的從模式和TIM3的主模式。圖5-6定時器的級聯(lián)二、時基單元

STM32的通用定時器的時基單元包含計數(shù)器(TIMx_CNT)、預(yù)分頻器(TIMx_PSC)、和自動裝載寄存器(TIMx_ARR)等,如圖5-7所示。計數(shù)器、自動裝載寄存器和預(yù)分頻器可以由軟件進(jìn)行讀/寫操作,在計數(shù)器運(yùn)行時仍可以讀/寫。圖5-7定時器的時基單元

從時鐘源送來的時鐘信號,首先經(jīng)過預(yù)分頻器的分頻,降低頻率后輸岀信號CK_CNT,送入計數(shù)器進(jìn)行計數(shù),預(yù)分頻器的分頻取值范圍可以是1~65536之間的任意數(shù)值。一個72MHz的輸入信號經(jīng)過分頻后,可以產(chǎn)生最小接近100Hz的信號。計數(shù)器具有16位計數(shù)功能.它可以在時鐘控制單元的控制下,進(jìn)行遞增計數(shù)、遞減計數(shù)或中央對齊計數(shù)(即先遞增計數(shù),達(dá)到自動重裝載寄存器的數(shù)值后再遞減計數(shù))。計數(shù)器還可以通過時鐘控制單元的控制,直接被清零,或者在計數(shù)值到達(dá)重裝載寄存器的數(shù)值后被清零;計數(shù)器還可以直接被停止,或者在計數(shù)值到達(dá)重裝載寄存器的數(shù)值后被停止;或者暫停一段時間計數(shù),然后在控制單元的控制下再恢復(fù)計數(shù)。自動裝載寄存器類似51單片機(jī)定時器/計數(shù)器工作于方式2時保存初值的THx(x=0.1),當(dāng)CNT計滿溢出后,自動裝載寄存器保存的初值賦給CNT,繼續(xù)計數(shù)。

在圖5-7中,部分寄存器框圖有陰影,表示該寄存器在物理上對應(yīng)兩個寄存器,一個是程序員可以寫入或讀出的寄存器,稱為預(yù)裝載寄存器(PreloadRegister),另一個是程序員看不見的、但在操作中真正起作用的寄存器,稱為影子寄存器(PreloadRegister)。如圖5-8所示。圖5-8預(yù)裝寄存器和影子寄存器根據(jù)TIMx_CRl寄存器中ARPE位的設(shè)置,當(dāng)ARPE=0時,預(yù)裝載寄存器的內(nèi)容可以隨時傳送到影子寄存器.即兩者是連通的(Permanently);當(dāng)ARPE=1時,在每次更新事件(UEV,如當(dāng)計數(shù)器溢出時產(chǎn)生一次UEV事件)時,才把預(yù)裝載寄存器的內(nèi)容傳送到影子寄存器,如圖5-8所示。設(shè)計預(yù)裝載寄存器和影子寄存器是為了讓真正起作用的影子寄存器在同一個時間(發(fā)生更新事件時)被更新為所對應(yīng)的預(yù)裝載寄存器的內(nèi)容,這樣可以保證多個通道的操作能夠準(zhǔn)確地同步進(jìn)行。如果沒有影子寄存器.或者預(yù)裝載寄存器和影子寄存器是直通的,即軟件更新預(yù)裝載寄存器時,同時更新了影子寄存器,因?yàn)檐浖豢赡茉谕粫r刻同時更新多個寄存器,結(jié)果造成多個通道的時序不能同步,如果再加上其他因素,多個通道的時序關(guān)系有可能是不可預(yù)知的。設(shè)置影子寄存器后,可以保證當(dāng)前正在進(jìn)行的操作不受干擾,同時用戶可以十分精確地控制電路的時序;另外,所有影子寄存器都是可以通過更新事件來被刷新的,這樣可以保證定時器的各個部分能夠在同一時刻改變配置,從而實(shí)現(xiàn)所有I/O通道的同步。STM32的高級定時器就是利用這個特性實(shí)現(xiàn)3路互補(bǔ)PWM信號的同步輸出,完成三相變頻電動機(jī)的精確控制。在圖5-7中,自動裝載寄存器左側(cè)有一個大寫的UEV和一個向下的箭頭,表示對應(yīng)寄存器的影子寄存器可以在發(fā)生更新事件時,被更新為它的預(yù)裝載寄存崩的內(nèi)容;而在自動重裝載寄存器右側(cè)的箭頭標(biāo)志,表示自動重裝載的動作可以產(chǎn)生一個更新事件(UEV)或更新事件中斷(UEVI)。預(yù)分頻寄存器用于設(shè)定計數(shù)器的時鐘頻率;自動裝栽寄存器的內(nèi)容是預(yù)先裝載的,每次更新事件UEV發(fā)生時,其內(nèi)容傳送到影子寄存器,若無UEV,則永久保存在影子等存器中;當(dāng)計數(shù)器達(dá)到溢出條件且當(dāng)TIMx_CRI寄存器中的UDIS位為0時,產(chǎn)生更新事件。三、捕獲和比較通道

TIMx的捕獲和比較通道又可以分解為兩部分,即輸入通路和輸出通路。當(dāng)一個通道工作于捕獲模式時,該通道的輸出部分自動停止丁.作;同樣,當(dāng)一個通道T.作于比較模式時,該通道的輸入部分自動停止工作。1、捕獲通道當(dāng)一個通道工作于捕獲模式時,輸入信號從引腳經(jīng)輸入濾波、邊沿檢測和預(yù)分頻電路后,控制捕獲寄存器的操作。當(dāng)指定的輸入邊沿到來時,定時器將該時刻計數(shù)器的當(dāng)前數(shù)值復(fù)制到捕獲寄存器,并在中斷使能時產(chǎn)生中斷。讀出捕獲寄存器的內(nèi)容,就可以知道信號發(fā)生變化的準(zhǔn)確時間。該通道的作用是測脈沖寬度。STM32的定時器輸入通道都有一個濾波單元,分別位于每個輸入通路上(見圖5-9中的左側(cè)陰影框)和外部觸發(fā)輸入通路上(見圖5-9中的右側(cè)陰影框),其作用是濾除輸入信號上的高頻干擾。干擾的頻率限制由TIM_TimeBaselnitTypeDef中的TIM_CIockDivision設(shè)定,它對應(yīng)TIMx_CRl中bit8和bi19的CKD[l:0]。2、比較通道當(dāng)一個通道工作于比較模式時,用戶程序?qū)⒈容^數(shù)值寫入比較寄存器,定時器會不停地將該寄存器的內(nèi)容與計數(shù)器的內(nèi)容進(jìn)行比較,一旦比較條件成立,則產(chǎn)生相應(yīng)的輸出。如果使能了中斷,則產(chǎn)生中斷;如果使能了引腳輸出,則按照控制電路的設(shè)置產(chǎn)生輸出波形。這個通道最重要的應(yīng)用就是輸出PWM(PulseWidthModulation))形,如圖5-10波形所示。PWM控制即脈沖寬度調(diào)制技術(shù),通過對一系列脈沖的寬度進(jìn)行調(diào)制,來等效地獲得所需要波形(含形狀和幅值)。圖5-9濾波單元圖5-10PWM波形四、計數(shù)器模式

時序圖是用來描述電路信號變化規(guī)律的。從左到右,高電平在上,低電平在下,高阻態(tài)在中間。雙線表示可能高也可能低,視數(shù)據(jù)而定。交叉線表示狀態(tài)的高低變化,可以是由高

變低,也可以是由低變高,也可以不變。豎線是生命線,代表時序圖的對象在一段時期內(nèi)的

存在,時序圖中的每個對象和底部中心都有一條垂直的虛線,這就是對象的生命線,對象的消息存在于兩條生命線之間。時序要滿足建立時間和保持時間的約束,才能保證鎖存到正確

的地址。數(shù)據(jù)或地址線的時序圖有0/1兩條線,表示是一個固定的電平,可能是“0”,也可能是“1”,視具體的地址或數(shù)據(jù)而定;交叉的線表示電平的變化,狀態(tài)不確定,數(shù)值無意義。用時序圖描述的計數(shù)器模式如下所述。25第四節(jié)DMA庫函數(shù)(**)

每個通道都可以在有固定地址的外設(shè)寄存器和存儲器地址之間執(zhí)行DMA傳輸。DMA傳輸?shù)臄?shù)據(jù)量是可編程的,可以通過DMA-CCRx寄存器中的PSIZE和MSIZE位進(jìn)行編程,最大數(shù)據(jù)傳輸數(shù)量為65536。存儲數(shù)據(jù)傳輸數(shù)量的寄存器在每次傳輸后遞減。通過設(shè)置DMA-CCRx寄存器中的PINC和MINC標(biāo)志位,外設(shè)和存儲器的指針在每次傳輸后,可以有選擇地完成自動增量當(dāng)設(shè)置為增量模式時,下一個要傳輸?shù)牡刂穼⑹乔耙粋€地址加上增量值,增量值取決與所選的數(shù)據(jù)寬度為1、2或4。第一個傳輸?shù)牡刂肥谴娣旁贒MA-CPARx/DMA-CMARx寄存器中的地址。在傳輸過程中,這些寄存器保持它們初始的數(shù)值不變,軟件不能改變和讀出當(dāng)前正在傳輸內(nèi)部外設(shè)/存儲器地址寄存器中的地址。當(dāng)通道配置為非循環(huán)模式時,傳輸結(jié)束后(即傳輸計數(shù)變?yōu)?)將不再產(chǎn)生DMA操作。若要開始新的DMA傳輸,需要在關(guān)閉DMA通道的情況下,在DMA-CNDTRx寄存器中重新寫人傳輸數(shù)目。在循環(huán)模式下,最后一次傳輸結(jié)束時,DMA-CNDTRx寄存器的內(nèi)容會自動地被重新加載為其初始數(shù)值,內(nèi)部的當(dāng)前外設(shè)/存儲器地址寄存器也被重新加載為DMA-CPARx/DMA-CMARx寄存器設(shè)定的初始基地址。1、向上計數(shù)模式在向上計數(shù)模式中,計數(shù)器從0計數(shù)到自動加載值(TIMx_ARR計數(shù)器的內(nèi)容),然后重新從0開始計數(shù),并且產(chǎn)生一個計數(shù)器溢出事件。當(dāng)TIMx_ARR=0x36時,計數(shù)器向上計數(shù)模式如圖5-11所示。圖5-11向上計數(shù)模式實(shí)例(TIMx_ARR=0x36)2、向下計數(shù)模式在向下模式中,計數(shù)器從自動裝入的值(TIMx_ARR計數(shù)器的值)開始向下計數(shù)到(),然后從自動裝入的值重新開始計數(shù),并且產(chǎn)生一個計數(shù)器向下溢出事件。當(dāng)TIMx.ARR=0x36時,計數(shù)器向下計數(shù)模式如圖5-12所示。圖5-12向下計數(shù)模式實(shí)例(TIMx_ARR=0x36)3、中央對齊模式(向上/向下計數(shù))在向下模式中,計數(shù)器從自動裝入的值(TIMx_ARR計數(shù)器的值)開始向下計數(shù)到0,然后從自動裝入的值重新開始并且產(chǎn)生一個計數(shù)器向下溢出事件。每次計數(shù)器溢出時可以產(chǎn)生更新事件,在TIMx_EGR寄存器中(通過軟件方式或者使用從模式控制器)設(shè)置UG位,也同樣可以產(chǎn)生一個更新事件。設(shè)置TIMx_CR1寄存器的UDIS位可以禁止UEV事件。這樣可以避免向預(yù)裝載寄存器中寫入新值時更新影子寄存器。因此UDIS位被清為’0’之前不會產(chǎn)生更新事件。然而,計數(shù)器仍會從當(dāng)前自動加載值重新開始計數(shù),同時預(yù)分頻器的計數(shù)器重新從0開始(但預(yù)分頻系數(shù)不變)。此外,如果設(shè)置了TIMx_CR1寄存器中的URS位(選擇更新請求),設(shè)置UG位將產(chǎn)生一個更新事件UEV但不設(shè)置UIF標(biāo)志(因此不產(chǎn)生中斷和DMA請求),這是為了避免在發(fā)生捕獲事件并清除計數(shù)器時,同時產(chǎn)生更新和捕獲中斷。當(dāng)發(fā)生更新事件時,所有的寄存器都被更新,并且(根據(jù)URS位的設(shè)置)更新標(biāo)志位(TIMx_SR寄存器中的UIF位)也被設(shè)置?!耦A(yù)分頻器的緩存器被置入預(yù)裝載寄存器的值(TIMx_PSC寄存器的值)?!癞?dāng)前的自動加載寄存器被更新為預(yù)裝載值(TIMx_ARR寄存器中的內(nèi)容)。注:自動裝載在計數(shù)器重載入之前被更新,因此下一個周期將是預(yù)期的值。圖5-13所示是一些當(dāng)TIMx_ARR=0x06時,計數(shù)器在不同時鐘頻率下的操作例子。圖5-13中央對齊模式計數(shù)器模式由TlM_TimeBaselnitTypeDef中的TIM_CounterMode設(shè)定。模式的定義在stm32f10x_tim.h文件中:#defineTIM_CounterMode_Up((uintl6_t)0x0000)//向上計數(shù)模式#defineTIM_C<)unterM()(le_F)own((uinll6_t)0x0010)//向下計數(shù)模式#definerriM_CounterMode_CenterAlignedl((uinl16.1)0x0020)//中央對齊模式#defineTlM_CounterMode_CenterAligned2((uintl6_t)0x0040)//中央對齊模式#(lefineTIM_Coui_erM()de_CenterAligned3((uint!6_t)0x0060)//中央對齊模式五、定時時間的計算定時時間由TIM_TimeBaseInitTypeDef中的TIM_Prescaler和TIM_Period設(shè)定。TIM_Period設(shè)定時間的大小需要經(jīng)過TIM_Period計數(shù)后才會發(fā)生一次更新或中斷。TIM_Prescaler是時鐘預(yù)分頻數(shù)。設(shè)脈沖頻率為TIMxCLK,定時公式為:T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK假設(shè)系統(tǒng)時鐘使72MHz,時鐘系統(tǒng)部分初始化程序如下所述:TlM_TimeBaseStructure.TIM_Prescaler=35999

;//分頻35999TlM_TimeBaseStructure.TIM_Period=1999

;//計數(shù)值1999定時時間為:T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK=(1999+1)*(35999+1)/72M=1s六、定時器中斷TIM的2級中斷控制(見第2章表2-26)。TIM2能夠引起中斷的中斷源或事件有很多,如更新事件(上溢/下溢)、輸入捕獲、輸出匹配、DMA申請等。所有TIM2的中斷事件都是通過一個T1M2中斷通道向CM3內(nèi)核提出中斷申請的。CM3內(nèi)核對于每個外部中斷通道都有相應(yīng)的控制字和控制位,用于控制該中斷通道。與TIM2中斷通道相關(guān)的,在NVIC中有13位,它們是PRI_28(IP[28])的8位(只用高4位);加上中斷通道允許,中斷通道清除(相當(dāng)禁止中斷),中斷通道Pending(待定位)置位,中斷Pending(待定位)清除,正在被服務(wù)的中斷(Active)標(biāo)志位,各1個bit。TIM2的中斷過程如下所述。1、初始化過程首先要設(shè)置寄存器AIRC中PRIGROUP值,規(guī)定系統(tǒng)中的占先優(yōu)先級副優(yōu)先級的個數(shù)(在4個bit中占用的位數(shù));設(shè)置TIM2寄存器,允許相應(yīng)的中斷,如允許UIE(TIM2_DIER的第[0]位);設(shè)置TIM2中斷通道的占先優(yōu)先級和副優(yōu)先級(IP[28],在NVIC寄存器組中);設(shè)置允許TIM2中斷通道。在NVIC寄存器組的ISER寄存器中的一位。2、中斷響應(yīng)過程當(dāng)TIM2的UIE條件成立(更新、上溢或下溢)時,硬件將T1M2本身的寄存牌中的UIE中斷標(biāo)志置位,然后通過T1M2中斷通道向內(nèi)核申請中斷服務(wù)。此時內(nèi)核硬件將TIM2中斷通道的Pending標(biāo)志置位,表示TIM2有中斷申請。如果當(dāng)前有中斷正在處理,TIM2的中斷級別不夠高,那么就保持Pending標(biāo)志(當(dāng)然用戶可以在軟件中通過寫ICPR寄存器中相應(yīng)的位將本次中斷清除掉)。當(dāng)內(nèi)核有空時,開始響應(yīng)TIM2的中斷,進(jìn)入TIM2的中斷服務(wù)。此時硬件將1ABR寄存器中相應(yīng)的標(biāo)志位置位,表示T1M2中斷正在被處理。同時硬件清除TIM2的Pending標(biāo)志位。3、執(zhí)行TIM2的中斷服務(wù)程序所有TIM2的中斷事件都是在一個TIM2中斷服務(wù)程序中完成的,所以進(jìn)入中斷程序后,中斷程序需要首先判斷是哪個TIM2的中斷源需要服務(wù),然后轉(zhuǎn)移到相應(yīng)的服務(wù)代碼段去。注意,不要忘紀(jì)把該中斷源的中斷標(biāo)志位清除掉,硬件是不會自動清除TIM2寄存器中具體的中斷標(biāo)志位的。如果TIM2本身的中斷源多于2個,那么它們服務(wù)的先后次序就由用戶編寫的中斷服務(wù)程序決定。所以用戶在編寫服務(wù)程序時,應(yīng)該根據(jù)實(shí)際的情況和要求,通過軟件的方式,將重要的中斷優(yōu)先處理。4、中斷返回內(nèi)核執(zhí)行完中斷服務(wù)程序后,便進(jìn)入中斷返回過程。在這個過程中,硬件將IABR寄存器中相應(yīng)的標(biāo)志位清除,表示該中斷處理完成。如果TIM2本身還有中斷標(biāo)志位被置位,表示TIM2還有中斷在申請,則重新將TIM2的Pending標(biāo)志置為1,等待再次進(jìn)入TIM2的中斷服務(wù)。TIM2中斷服務(wù)函數(shù)使stm32f10x_it.c中的函數(shù)TIM2_IRQHandler(),具體應(yīng)用詳見5.6。第四節(jié)通用定時器TIMx寄存器通用定時器TIMx相關(guān)寄存器功能見表5-3,通用定時器TIMx寄存器和復(fù)位值見表5-4。寄存器功能控制寄存器l(TIMx_CRl)用于控制獨(dú)立通用定時器控制寄存器2(TIMx_CK2)用于控制獨(dú)立通用定時器模式控制寄存器(TiMx_SMCR)用于從模式控制DMA/中斷使能寄存器(TIMx_DIER)用于控制定時器的DMA及中斷請求狀態(tài)寄存器(TIMx_SR)保存定時器狀態(tài)小件產(chǎn)生寄存器(TIMx_EGR)更新事件捕獲/比較模式寄存器l(TIMx_CCMKl)用于捕獲/比較模式,K各位的作用在輸入和輸出模式下不同捕獲/比較模式寄存器2(TIMx_CCMR2)用于捕獲/比較模式,共各位的作用在輸入和輸出模式下不同捕獲/比較使能寄存器(TIMx.CCER)用于允許捕獲/比較DMA控制寄存器(TIMx_DCR)用于控制DMA操作計數(shù)器(TlMx.CNT)用于保存計數(shù)器的計數(shù)值預(yù)分頻器(TlMx_PSC)用于設(shè)置預(yù)分頻器的值。計數(shù)器的時鐘頻率CK_CNT=/(PSC[15:0])+1)自動iR裝載寄存器(TlMx_ARR)保存計數(shù)器自動重裝的計數(shù)值,當(dāng)n自動重裝載的值為空時,計數(shù)器不工作捕獲/比較寄存器1(TIMx_

溫馨提示

  • 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

提交評論