版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第7章STM8S系列MCU定時器
7.1高級控制定時器TIM1結構
7.2TIM1時基單元7.3TIM1時鐘及觸發(fā)控制
7.4捕獲/比較通道
7.5定時器中斷控制
7.6通用定時器TIM2/TIM37.7窗口看門狗定時器WWDG
7.8硬件看門狗定時器IWDG
在單片機控制系統(tǒng)中,定時/計數(shù)器是MCU芯片重要的外設部件之一,幾乎所有的單片機芯片均內(nèi)置一個或數(shù)個不同長度的定時/計數(shù)器。內(nèi)嵌定時器的計數(shù)長度、數(shù)量、功能強弱是衡量MCU芯片功能強弱的重要指標之一。定時/計數(shù)器部件的核心是一個加法(或減法)計數(shù)器,可工作在定時方式和計數(shù)方式,因此稱為定時/計數(shù)器。這兩種工作方式并沒有本質(zhì)上的區(qū)別,只是計數(shù)脈沖來源不同。如果計數(shù)脈沖是頻率相對穩(wěn)定的系統(tǒng)時鐘信號(一般是系統(tǒng)時鐘的分頻信號)時,稱為定時方式;當計數(shù)脈沖來自MCU某一個特定的I/O引腳時,則稱為計數(shù)方式。
STM8S內(nèi)部有多個定時器,按功能強弱可分為三大類:
(1)一個向上、向下計數(shù)的16位高級控制定時器TIM1,功能最完善。
(2)三個16位向上計數(shù)的通用定時器TIM2、TIM3和TIM5,功能比TIM1略差。
(3)兩個8位向上計數(shù)的基本定時器TIM4、TIM6。其中,TIM1、TIM2、TIM3、TIM4之間沒有關聯(lián),彼此獨立,而TIM1、TIM5、TIM6之間有關聯(lián)。這幾個定時器的主要功能如表7-1所示。表7-1STM8S定時器的主要功能
STM8S105、STM8S207、STM8S208系列含有TIM1、TIM2、TIM3、TIM4四個定時器;STM8S103含有TIM1、TIM2、TIM4三個定時器;STM8S903含有TIM1、TIM5、TIM6三個定時器。在STM8S2××系列單片機中,與定時器有關的引腳如表7-2所示。表7-2在STM8S2××系列中與定時器有關的引腳7.1高級控制定時器TIM1結構高級控制定時器TIM1的內(nèi)部結構如圖7-1所示,主要由以下部件組成:時鐘/觸發(fā)控制器(CLOCK/TRIGGERCONTROLLER);時基單元(TIMEBASEUNIT);捕獲/比較陣列(CAPTURECOMPAREARRAY)等。
TIM1定時器功能完善,可實現(xiàn)下列操作:
(1)基本定時操作、計數(shù)操作。
(2)利用輸入捕獲功能,測量脈沖信號時間參數(shù)(高、低電平時間)。
(3)利用輸出比較功能,可產(chǎn)生單脈沖信號、PWM信號等。
(4)在PWM輸出信號中,具有死區(qū)時間編程選擇功能。
(5)具有與其他定時器聯(lián)動的功能。圖7-1高級控制定時器TIM1的內(nèi)部結構7.2TIM1時基單元
TIM1時基單元內(nèi)部結構如圖7-2所示。它由16位預分頻器TIM1_PSCR(TIM1_PSCRH,TIM1_PSCRL)、16位雙向(向上或向下)計數(shù)器TIM1_CNTR(TIM1_CNTRH,TIM1_CNTRL)、16位自動重裝寄存器TIM1_ARR(TIM1_ARRH,TIM1_ARRL)及8位重復計數(shù)器TIM1_RCR組成。圖7-2時基單元觸發(fā)信號(即預分頻器輸入時鐘CK_PSC)經(jīng)預分頻器TIM1_PSCR分頻后,其輸出信號CK_CNT作計數(shù)器TIM1_CNTR的計數(shù)脈沖。每來一個脈沖計數(shù)器TIM1_CNTR加1或減1,溢出時產(chǎn)生更新事件(UEV),并觸發(fā)相關寄存器重裝、更新,如果允許更新中斷(UIF),則產(chǎn)生更新中斷請求。7.2.116位預分頻器TIM1_PSCR
TIM1預分頻器TIM1_PSCR為16位寄存器,預分頻器輸出信號CK_CNT(即計數(shù)器TIM1_CNTR計數(shù)脈沖輸入信號)與預分頻器輸入信號CK_PSC之間關系為fCK_CNT=(7-1)通過預分頻器可對輸入信號CK_PSC實現(xiàn)1~65?536任意整數(shù)的分頻。由于16位預分頻器(TIM1_PSCRH,TIM1_PSCRL)帶有輸入緩沖器(即預裝載寄存器),因此在計數(shù)狀態(tài)下,新寫入的預分頻值,在更新事件發(fā)生時才有效,即在更新事件發(fā)生前,依然使用先前的預分頻值。注意:寫預分頻器時,只能用字節(jié)傳送指令實現(xiàn),且先寫高8位TIM1_PSCRH,后寫低8位TIM1_PSCRL。不過讀預分頻器時沒有順序限制,甚至允許使用LDW字傳送指令讀入寄存器X或Y,這是因為讀操作對象為分頻器的預裝載寄存器。7.2.216位計數(shù)器TIM1_CNTR盡管允許在計數(shù)過程中讀寫16位計數(shù)器TIM1_CNTR的當前值,但由于計數(shù)器TIM1_CNTR沒有輸入緩沖器,因此,最好不要在計數(shù)過程中對計數(shù)器進行寫操作,應先把計數(shù)器暫停(將計數(shù)允許/停止控制位CEN—TIM1_CR1[0]清0)后,再寫入,以免產(chǎn)生不必要的誤差。由于計數(shù)器讀操作帶有8位鎖存功能,因此任何時候均可對計數(shù)器TIM1_CNTR進行“飛”讀操作(計數(shù)器仍在計數(shù)時的讀操作稱為“飛”讀),但必須用字節(jié)傳送指令實現(xiàn),且先讀高8位TIM1_CNTRH(此時自動鎖存了低8位TIM1_CNTRL的值,即讀操作帶有8位鎖存功能),后再讀低8位TIM1_CNTRL,就能獲得正確結果。即使在讀計數(shù)器高8位TIM1_CNTRH后,CPU響應了中斷請求,執(zhí)行了其他指令,返回后再讀計數(shù)器低8位TIM1_CNTRL也沒有關系(實際上在讀計數(shù)器TIM1低8位時數(shù)據(jù)來源是鎖存器,而不是計數(shù)器低8位TIM1_CNTRL的當前值)。因此,不宜用LDW指令讀計數(shù)器的當前值,原因是16位數(shù)據(jù)傳送指令先讀低8位,實際讀到的低8位是讀緩存器的值(如果復位后,沒有讀過TIM1_CNTRH,緩沖器的值不確定),而不是計數(shù)器低8位TIM1_CNTRL的當前值。例如,可用如下指令將TIM1_CNTR當前值“飛”讀到寄存器X中。
LDA,TIM1_CNTRH ;先用字節(jié)傳送指令LD或MOV讀計數(shù)高8位,此時自動鎖存了低8位
;?TIM1_CNTRL的當前值
LDXH,A ;讀了高8位TIM1_CNTRH后,無論中間執(zhí)行了多少條指令,讀低8位
;均能獲得正確結果
LDA,TIM1_CNTRL ;該指令表面上讀TIM1_CNTRL,實際上是從鎖存器中讀計數(shù)器低8位LDXL,A7.2.316位自動裝載寄存器TIM1_ARR
16位自動裝載寄存器TIM1_ARR具有影子寄存器,影子寄存器對程序員是不透明的。在向上計數(shù)方式中,當計數(shù)值等于TIM1_ARR的影子寄存器中的值時,發(fā)生上溢,然后再從0開始計數(shù)器,這時TIM1_ARR相當于比較寄存器;在向下計數(shù)器過程中,當計數(shù)值回0時,發(fā)生下溢,計數(shù)器以TIM1_ARR影子寄存器的內(nèi)容作初值重新計數(shù),這時TIM1_ARR相當于重裝初值寄存器。在寫入時只能用字節(jié)指令完成,且先寫高8位后寫低8位。當控制寄存器TIM1_CR1的ARPE位為0(不使用預裝載寄存器)時,對自動裝載寄存器TIM1_ARR寫入時,寫入內(nèi)容立即傳送到其影子寄存器中(影響當前計數(shù)周期),如圖7-3(a)所示。圖7-3自動重裝寄存器的更新當控制寄存器TIM1_CR1的ARPE位為1(使用預裝載寄存器)時,對自動裝載寄存器TIM1_ARR寫入時,寫入數(shù)據(jù)并不立即傳送到其影子寄存器中,只有更新事件(如溢出或通過軟件強迫更新)發(fā)生時,寫入的數(shù)據(jù)才被送入其影子寄存器中。換句話說,如果沒有軟件強迫更新,則不影響當前計數(shù)周期,溢出更新后下一個計數(shù)周期才生效,如圖7-3(b)所示。7.2.4計數(shù)方式
TIM1計數(shù)器可以編程為向上(加法)計數(shù)、向下(減法)計數(shù)以及向上向下雙向計數(shù)三種方式,如圖7-4所示。圖7-4計數(shù)方式
1.向上計數(shù)方式在向上計數(shù)方式中,16位計數(shù)器TIM1_CNTR從0開始遞增計數(shù),當計數(shù)值與自動重裝寄存器TIM1_ARR的影子寄存器匹配時,再來一個計數(shù)脈沖則計數(shù)器將從0開始重新計數(shù),如圖7-4(a)所示,并產(chǎn)生上溢事件。如果UDIS(禁止更新)控制位為0(無效,即允許更新),則將產(chǎn)生更新事件UEV。更新事件發(fā)生時,時基單元內(nèi)各寄存器全部被更新。在向上計數(shù)過程中,計數(shù)值與自動重裝寄存器TIM1_ARR的影子寄存器匹配,再來一個計數(shù)脈沖時計數(shù)器上溢,然后從0開始新一輪的計數(shù)。因此,自動重裝寄存器TIM1_ARR不能為0,否則溢出后又匹配了。如此往復,無法向前計數(shù),即TIM1_ARR取值范圍在0001H~FFFFH之間。顯然,當希望計數(shù)器在經(jīng)歷N個計數(shù)脈沖后溢出,自動重裝寄存器TIM1_ARR的值應為N。TIM1_ARR與預分頻器TIM1_PSCR、溢出時間t之間的關系為TIM1_ARR=當時間t的單位取μs時,預分頻器輸入信號fCK_PSC的單位取MHz。(7-2)
2.向下計數(shù)方式在向下計數(shù)方式中,16位計數(shù)器TIM1_CNTR從自動重裝寄存器TIM1_ARR的影子寄存器開始遞減計數(shù),當計數(shù)值回0時再來一個計數(shù)脈沖則產(chǎn)生下溢出,再從自動重裝寄存器TIM1_ARR的影子寄存器開始新一輪計數(shù),如圖7-4(b)所示。如果UDIS(禁止更新)控制位為0(允許更新),則將產(chǎn)生更新事件UEV。在向下計數(shù)方式中,TIM1_ARR也不能為0,即TIM1_ARR取值范圍也必須在0001H~FFFFH之間。顯然,當希望計數(shù)器在經(jīng)歷N個計數(shù)脈沖后下溢,自動重裝寄存器TIM1_ARR的值就為N。TIM1_ARR與預分頻器TIM1_PSCR、溢出時間t之間的關系與式(7-2)相同。在向下計數(shù)方式中,最好不用帶緩沖的自動重裝方式,即令TIM1_CR1寄存器的APRE位為0,則在本輪計數(shù)器溢出時,將立即使用更新后的自動重裝寄存器內(nèi)容作為計數(shù)器的初值,如圖7-5所示。圖7-5向下計數(shù)方式中APRE=0時的更新情況如果使用了帶緩沖的更新方式,寫入自動重裝寄存器TIM1_ARR的新值,并不能在本輪計數(shù)器下溢時裝載,而必須再等到第二次下溢時才被采用,容易出錯,如圖7-6所示。其原因是使用帶緩沖更新方式時,溢出時計數(shù)器內(nèi)部操作是“先將TIM1_ARR影子寄存器的內(nèi)容裝入計數(shù)器TIM1_CNT后才更新自動重裝寄存器TIM1_ARR影子寄存器的內(nèi)容”,簡稱“先裝入后更新”。圖7-6向下計數(shù)方式中APRE=1時的更新情況
3.向上向下雙向計數(shù)方式當計數(shù)器處于向上向下雙向計數(shù)方式時,計數(shù)器先從0開始計數(shù),直到計數(shù)值等于自動重裝寄存器TIM1_ARR?-?1時出現(xiàn)上溢為止,接著計數(shù)值達到最大值TIM1_ARR,然后計數(shù)器向下計數(shù),當計數(shù)值為0時,產(chǎn)生下溢,完成了一個計數(shù)周期,如圖7-4(c)所示。在雙向計數(shù)方式中,計數(shù)器上溢、下溢與更新事件UEV關系如圖7-7所示。圖7-7雙向計數(shù)方式在雙向計數(shù)方式中,控制寄存器TIM1_CR1的DIR位變?yōu)橹蛔x。當計數(shù)器向上計數(shù)時,硬件自動將DIR位置1;當計數(shù)器向下計數(shù)時,硬件自動將DIR清0。在雙向計數(shù)方式中,可通過DIR位內(nèi)容了解當前計數(shù)器的計數(shù)方向。7.2.5重復計數(shù)器TIM1_RCR重復計數(shù)器TIM1_RCR是一個沒有緩沖器的8位計數(shù)器,當計數(shù)器TIM1_CNTR上溢、下溢一次時,TIM1先判別重復計數(shù)器TIM1_RCR是否為0,若是0,則產(chǎn)生溢出更新事件;否則不產(chǎn)生溢出更新事件,同時將重復計數(shù)器TIM1_RCR減1(CPU對重復計數(shù)器TIM1_RCR采用“先判別后減1”的處理方式)。圖7-8給出了不同計數(shù)狀態(tài)下,重復計數(shù)器TIM1_RCR對溢出更新事件的影響。顯然,當TIM1_RCR>0時,必須經(jīng)過“TIM1_RCR+1”個計數(shù)周期后,才產(chǎn)生溢出更新。圖7-8重復計數(shù)器TIM1_RCR對溢出更新事件的影響7.2.6更新事件(UEV)與更新中斷(UIF)控制邏輯時基單元內(nèi)預分頻器TIM1_PSCR影子寄存器、自動重裝寄存器TIM1_ARR影子寄存器的更新均受更新事件UEV控制,邏輯關系如圖7-9所示。更新事件UEV受更新請求源URS與禁止更新UDIS控制。當UDIS為1時,不產(chǎn)生UEV更新事件(分頻器TIM1_PCSR影子寄存器、自動重裝寄存器TIM1_ARR影子寄存器保持不變),當然也就不可能產(chǎn)生更新中斷UIF(不過UG或時鐘/觸發(fā)控制器更新依然會強迫計數(shù)器和預分頻器產(chǎn)生更新,只是UIF無效)。當UDIS為0時,允許更新產(chǎn)生事件,更新事件種類受更新事件源選擇位URS控制。當URS為0時,軟件更新(UG)、時鐘/觸發(fā)控制器更新、定時器上溢或下溢三者之一發(fā)生時,均會產(chǎn)生更新事件UEV;而當URS為1時,只有定時器上溢或下溢會產(chǎn)生更新事件UEV。圖7-9UEV及UIF產(chǎn)生與受控制邏輯在更新事件UEV發(fā)生時,能否產(chǎn)生更新中斷(UIF)請求,受更新中斷允許UIE位的控制。在更新事件發(fā)生時,會觸發(fā)預分頻器TIM1_PCSR影子寄存器、自動重裝寄存器TIM1_ARR影子寄存器更新。7.3TIM1時鐘及觸發(fā)控制
TIM1時鐘/觸發(fā)控制單元內(nèi)部結構如圖7-10所示。圖7-10TIM1時鐘/觸發(fā)控制單元內(nèi)部結構時基單元預分頻器輸入時鐘信號CK_PSC可以是下列四個信號之一:
(1)主時鐘信號fMASTER。
(2)外部觸發(fā)時鐘模式1。
(3)來自TIM6的同步觸發(fā)信號或來自TIM5的同步觸發(fā)信號。對于STM8105、STM8S2XX芯片來說,沒有TIM5、TIM6,故不存在這兩個同步觸發(fā)信號。
(4)外部觸發(fā)時鐘模式2。7.3.1主時鐘觸發(fā)信號當從模式控制寄存器TIM1_SMCR的SMS=000(在這種情況下,該寄存器其他位無效),以及TIM1_ETR寄存器ECE=0(不使用外部時鐘)時,主時鐘信號fMASTER就是預分頻器TIM1_PSCR的輸入信號CK_PSC。當選擇主時鐘fMASTER作為時基單元觸發(fā)信號時,定時器狀態(tài)由CEN(計數(shù)允許/禁止)、DIR(計數(shù)方向)、UG(軟件更新)位控制。下面通過具體實例介紹用主時鐘fMASTER作為預分頻器TIM1_PSCR的輸入信號CK_PSC的初始化過程。例7-1當系統(tǒng)主時鐘頻率為2?MHz時,利用向上計數(shù)方式,使TIM1每10?ms產(chǎn)生一次定時中斷。根據(jù)式(7-2),在向上計數(shù)方式中,自動重裝寄存器即2710H。當定時時間t的單位取μs時,則主時鐘頻率fMASTER的單位取MHz。其中預分頻器TIM1_PSCR取1,即采用2分頻,計數(shù)頻率為1MHz。初始化步驟如下:
(1)初始化主從模式控制寄存器TIM1_SMCR的SMS位為000,禁止時鐘/觸發(fā)控制器工作。
MOVTIM1_SMCR,#00H
(2)初始化TIM1_ETR寄存器的ECE位,禁止外部觸發(fā)。BRESTIM1_ETR,#6
(3)初始化預分頻器TIM1_PSCR的高低位。
MOVTIM1_PSCRH,#00H ;先寫高8位,后寫低8位
MOVTIM1_PSCRL,#01H ;?2分頻
(4)初始化自動重裝初值寄存器(TIM1_ARR)。
MOVTIM1_ARRH,#27H ;先寫入高8位
MOVTIM1_ARRL,#10H ;再寫入低8位,該寄存器初值為10000,即2710H或通過關系運算,直接使用十進制數(shù),如
;MOVTIM1_ARRH,#{HIGH10000} ;先寫入高8位
;MOVTIM1_ARRL,#{LOW10000} ;再寫入低8位,該寄存器初值為10000,即2710H
(5)初始化重復計數(shù)寄存器(TIM1_RCR)。MOVTIM1_RCR,#00H;若該計數(shù)器不為0,則必須經(jīng)過“TIM1_RCR+1”周期后溢出更新才有效
(6)初始化控制寄存器TIM1_CR1,定義APRE、DIR、UDIS、URS(一般取1)。MOVTIM1_CR1,#04H ;向上計數(shù)、允許更新、僅允許計數(shù)器溢出時中斷標志有效
(7)必要時,執(zhí)行軟件更新,將事件產(chǎn)生寄存器TIM1_EGR的UG位置1,觸發(fā)TIM1_ARR、TIM1_PSCR重裝操作。
BSETTIM1_EGR,#0 ;使UG位為1,觸發(fā)重裝并初始化計數(shù)器;BRESTIM1_SR1,#0 ;清除更新中斷標志(當URS為0,則UIF標志有效,根據(jù);需要確定清除
(8)初始化中斷使能寄存器(TIM1_IER)的UIE位,允許更新中斷,并設置其優(yōu)先級。BSETTIM1_IER,#0 ;允許更新中斷
(9)初始化控制寄存器TIM1_CR1,啟動定時器TIM1。BSETTIM1_CR1,#0 ;使CEN位為1,啟動注意:●在完成TIM1_PSCR、TIM1_ARR初始化后,應執(zhí)行軟件更新操作,將事件產(chǎn)生寄存器TIM1_EGR的UG位置1,觸發(fā)各影子寄存器重裝并初始化計數(shù)器與分頻器,否則首次溢出時間可能不正確?!癞斝枰谥袛喾粘绦蛑羞M行軟件計數(shù)時(如主定時器),如果不執(zhí)行軟件更新操作,則首次溢出時間不正確,而執(zhí)行了軟件更新操作后,當URS位為0時,也產(chǎn)生了更新中斷請求,又造成中斷服務程序中的軟件計數(shù)值異常。此時,解決辦法是將URS位置1,只允許計數(shù)器溢出更新中斷。●在中斷服務程序中,一定要通過軟件清除更新標志。假設利用TIM1溢出中斷每500
ms控制與PC4引腳相連的LED指示燈亮、滅一次,則TIM1溢出中斷參考程序如下:
;
------TIM1的中斷服務程序------
interruptTIM1_Interrupt_Over
TIM1_Interrupt_Over.l
BRESTIM1_SR1,#0 ;清除更新中斷標志
DECR10
JRNETIM1_Interrupt_Over_EXIT
;軟件計數(shù)器R10回0MOVR10,#50BCPLPC_ODR,#4 ;
50
×
10ms時間到,PC4引腳輸出寄存器位取反,使LED指示
;燈亮或滅TIM1_Interrupt_Over_EXIT.LIRETIRETIRETIRET7.3.2外部時鐘模式1所謂“外部時鐘模式1”就是指外部時鐘信號從計數(shù)器的TIMx_CHn引腳輸入,經(jīng)濾波、邊緣選擇、極性變換后作為預分頻器輸入信號CK_PSC。在圖7-11中給出了如何將連接在TI2(即TIM1_CH2)引腳的輸入信號作為外部時鐘源的例子,其初始化過程如下所示:
(1)將TIM1_CH2引腳初始化為無中斷功能的輸入方式。
(2)將TIM1_CCMR2寄存器的CC2S[1:0]設為01(將TIM1_CH2引腳置為輸入,且將IC2連接到TI2FP2上)。
(3)根據(jù)外部輸入時鐘信號的特征,初始化TIM1_CCMR2寄存器的IC2F[3:0],選擇濾波特性(采樣頻率及采樣次數(shù))。由于僅利用輸入功能,并沒有利用其捕獲功能,在“外部時鐘模式1”中,輸入通道并沒有用到輸入預分頻功能,因此無須初始化IC2PSC[1:0]位。
MOVTIM1_CCMR2,#xxxx0001B ;?xxxx用于表示濾波特性,IC2PSC[1:0]固定為00
(4)將TIM1_CCER1寄存器的CC2P設為0,選定上升沿極性,并禁止捕獲。
(5)配置TIM1_SMCR寄存器的SMS=111,配置計數(shù)器使用外部時鐘模式1。
(6)配置TIM1_SMCR寄存器的TS=110,選定TI2作為輸入源。
(7)設置TIM1_CR1寄存器的CEN=1,啟動計數(shù)器。圖7-11外部時鐘模式1的連接示意圖這樣,在外部時鐘的每一個上升沿計數(shù)器開始計數(shù),且TIM1_SR1寄存器的TIF(觸發(fā)標志)位會置1,如果觸發(fā)中斷允許,將會產(chǎn)生一個觸發(fā)中斷。如圖7-12所示。圖7-12外部時鐘模式1觸發(fā)控制7.3.3外部時鐘模式2計數(shù)器能夠在外部觸發(fā)輸入信號ETR(接PH4或PB3引腳)的每一個上升沿或下降沿計數(shù)。將TIM1_ETR寄存器的ECE位寫1,即可選定外部時鐘模式2。除了TIM1高級定時器外,其他定時器均沒有外部輸入觸發(fā)輸入信號ETR。
對于具有外部觸發(fā)輸入信號ETR的定時器,可通過兩個途徑把ETR信號接入預分頻輸入信號CK_PSC:一是直接將外部觸發(fā)寄存器(TIM1_ETR)的ECE置1,選擇ETR時鐘(即外部時鐘源模式2);二是將TIM1_SMCR寄存器的SMS=111,TS=111(TRGI連接到外部觸發(fā)濾波輸出ETRF的外部時鐘模式1)。這兩方式基本等效,只是將外部觸發(fā)濾波輸出信號接TRGI時,在觸發(fā)信號的上升沿將產(chǎn)生觸發(fā)有效(TIF為1)。外部時鐘模式2連接方式如圖7-13所示。圖7-13外部時鐘模式2的連接方式外部時鐘模式2的初始化過程如下所示。
(1)將外部觸發(fā)輸入引腳ETR(PH4)初始化為不帶中斷功能的輸入方式,是懸空還是帶上拉均由外部時鐘輸出信號決定。
(2)初始化外部觸發(fā)寄存器(TIM1_ETR)的ETP位選擇觸發(fā)極性(0:不反相;1:反相)。
(3)初始化外部觸發(fā)寄存器(TIM1_ETR)的ETPS位選擇外觸發(fā)輸入信號的分頻系數(shù)。為防止漏計數(shù),外部觸發(fā)分頻器輸出信號ETRP頻率不大于fMASTER/4,因此,當輸入ETR引腳信號時鐘頻率太高時,必須選擇適當?shù)姆诸l系數(shù),如01(2分頻),將ETRP信號頻率降低。
(4)當分頻系數(shù)為1(不分頻)時,可根據(jù)ETR信號邊沿的是否存在抖動或尖峰干擾選擇相應的濾波參數(shù)(采樣頻率與采樣次數(shù))。顯然,當采用了外部觸發(fā)分頻器后,輸入濾波就沒有意義了。
(5)初始化外部觸發(fā)寄存器(TIM1_ETR)的ECE位置1,選擇外部時鐘。
(6)將TIM1_SMCR寄存器的SMS[2:0]置為000。
(7)將TIM1_CR1寄存器的CEN置1,啟動定時器。結果是計數(shù)器在每兩個輸入信號的上升沿加1,如圖7-14所示。可見,外部時鐘模式2在時鐘邊沿來到時,觸發(fā)標志(TIF)無效。圖7-14外部時鐘模式27.3.4觸發(fā)同步計數(shù)器允許四種觸發(fā)輸入,如下所示:
(1)?ETR:外部觸發(fā)信號。
(2)?TI1:連接在CH1引腳的外部輸入信號。
(3)?TI2:連接在CH2引腳的外部輸入信號。
(4)來自TIM5/TIM6的TRGO。
TIM1的計數(shù)器使用三種模式與外部的觸發(fā)信號同步,這三種模式是標準觸發(fā)模式、復位觸發(fā)模式和門控觸發(fā)模式。有關觸發(fā)同步可參閱有關用戶指南,這里不再詳細介紹。7.4捕獲/比較通道定時器輸入捕獲/輸出比較各通道(TIM1_CH1~TIM1_CH4),既可以工作于輸入捕獲方式,也可以工作于比較輸出方式,由相對應的每一個通道的捕獲/比較模式寄存器TIM1_CCMRi(i?=?1~4表示通道號)的CCiS[1:0]位來確定。圖7-15所示是通道1捕獲/比較結構圖。圖7-15通道1的捕獲/比較結構圖每一個輸入捕獲/輸出比較通道均以捕獲/比較寄存器(包括捕獲/比較預裝載寄存器TIM1_CCRi及其影子寄存器)為中心。輸入捕獲由輸入數(shù)字濾波、邊沿檢測、多路選擇開關、預分頻器等部件組成;輸出比較由比較器、輸出控制等部件組成。
在輸入捕獲方式下,當捕獲發(fā)生時,先將計數(shù)器TIM1_CNT當前值復制到捕獲/比較影子寄存器中,然后再傳送到捕獲/比較預裝載寄存器TIM1_CCRi中。對TIM1_CCRi高8位進行讀操作時,SR觸發(fā)器輸出高電平,與門輸出低電平,TIM1_CCRi寄存器被凍結,而對TIM1_CCRi寄存器低8位進行讀操作時,SR觸發(fā)器輸出低電平,與門解鎖,TIM1_CCRi影子寄存器與TIM1_CCRi連通。因此,對于輸入捕獲方式,只能用字節(jié)傳送命令先讀捕獲/比較寄存器TIM1_CCRi的高8位,后讀TIM1_CCRi的低8位,如下所示:
MOVR02,TIM1_CCR1H ;先讀通道1捕獲/比較寄存器TIM1_CCR1的高8位
MOVR03,TIM1_CCR1L ;再讀TIM1_CCR1的低8位,同時解除凍結狀態(tài)如果順序顛倒或用LDW命令從TIM1_CCRi寄存器獲取數(shù)據(jù),則結果可能不正確。在比較輸出方式下,讀TIM1_CCRi寄存器順序沒有限制,不過對TIM1_CCRi寫入時,同樣要求先寫高8位,后寫低8位。
STM8S定時器溢出中斷與定時器捕獲輸入/比較輸出中斷相互獨立,各自有自己的中斷向量、中斷優(yōu)先級,擴展了定時器的用途。7.4.1輸入模塊內(nèi)部結構
TIM1輸入模塊結構如圖7-16所示。其中,通道1(TIM1_CH1)與通道2(TIM1_CH2)的濾波輸出可以相互映射;通道3(TIM1_CH3)與通道4(TIM1_CH4)的濾波輸出也可以相互映射。圖7-16TIM1的輸入通道TIM1通道1(TIM1_CH1)輸入內(nèi)部結構如圖7-17所示。圖7-17TIM1通道1(TIM1_CH1)輸入內(nèi)部結構7.4.2輸入捕獲初始化與操作舉例作為一個特例,下面給出捕獲TI1(即TIM1_CH1)引腳輸入信號上升沿的初始化過程:
(1)初始化TIM1_CH1引腳為不帶中斷功能的輸入方式。
(2)初始化定時器工作方式(初始化定時器的計數(shù)方式、輸入計數(shù)器預分頻器輸入信號等)。
(3)初始化TIM1_CCMR1寄存器。將TIM1_CCMR1寄存器的CC1S[1:0]?位置01,即將TI1的濾波輸出信號TI1FP1連接到IC1。此時TIM1_CCR1(通道1的捕獲/比較寄存器)作為輸入捕獲寄存器(只讀)。
(4)根據(jù)TI1輸入信號特征,選擇相應的濾波采樣頻率與采樣次數(shù),定義IC1F[3:0]?位。假定主時鐘頻率為4?MHz,輸入信號抖動頻率不超過1MHz,采樣頻率取1/4主頻率,抖動時間不超過8個周期??蓪C1F[3:0]?設置為0111。在利用定時器完成輸入捕獲時,應充分利用輸入濾波功能,去除窄脈沖干擾或輸入信號邊沿的抖動干擾。例如,在測量含有窄脈沖干擾信號的連續(xù)脈沖高低電平時間時,如果能充分地利用輸入濾波功能,則可以把窄干擾脈沖忽略掉。例如當主頻率為4MHz時,如果希望濾除寬度在10μs的窄脈沖,則采樣頻率為1/8主頻,6次采樣,即總采樣時間為8?×?6?×?0.25μs,即12μs。
(5)由于需要檢測輸入信號的每一個上升沿,因此無須分頻,即將IC1PSC[1:0]取為00。TIM1_CCMR1寄存器內(nèi)容為01110001B。
(6)將捕獲/比較使能寄存器1(TIM1_CCER1)的CC1P位置0,選擇上升沿捕獲;將CC1E位置1,允許輸入捕獲。
(7)必要時初始化中斷控制寄存器(TIM1_IER),使CC1IE位為1,允許捕獲/比較通道1的中斷請求,捕獲中斷標志記錄在狀態(tài)寄存器TIM1_SR1中,重復捕獲中斷記錄在狀態(tài)寄存器TIM1_SR2中。如果要連續(xù)測量信號每一個時刻高、低電平時間,可在捕獲中斷服務程序中交替變換CC1P的極性(當前為上升沿捕獲,下一次捕獲改為下降沿捕獲;反之亦然),就可以測出信號高電平時間和低電平時間。當然,也可以用引腳上、下沿中斷方式,在中斷服務程序中對定時器進行“飛”讀操作,獲取信號邊沿發(fā)生的時間來判別連續(xù)脈沖信號高、低電平時間。這與利用定時器捕獲功能相比,其主要缺點是:精度差,從中斷有效到中斷響應有延遲;不能有效利用捕獲輸入濾波特性,去除窄脈沖干擾信號。在STM8S中,利用TIMx_CHn輸入捕獲功能測量信號周期或脈沖信號高低電平持續(xù)時間長短時,如果兩次捕獲間隔小于對應定時器溢出時間,則可用T2(當前捕獲時刻)?-?T1(前一次捕獲時刻)計算兩次捕獲間隔。如果定時器自動裝載寄存器TIMx_ARR不是FFFFH,則模不是216,而是TIMx_ARR的值。判別程序如下:LDA,TIMx_CCRnH ;在輸入捕獲的情況下,必須按字節(jié)讀取,且先讀高8位LDXH,ALDA,TIMx_CCRnL ;讀低8位LDXL,ASUBWX,T1 ;減上一個時刻捕獲值JRNCNEXT1ADDWX,TIMx_ARRH ;有借位,說明定時器曾經(jīng)溢出,必須再加上自動裝載寄存器的值NEXT1:當兩次捕獲間隔不小于定時器溢出時間時,在計算捕獲間隔T時,必須考慮定時器溢出次數(shù)n,即T=T2(當前捕獲時刻)?+?n×TIMx_ARR-T1(前一次捕獲時刻)7.4.3輸出比較當通道的捕獲/比較模式寄存器TIM1_CCMRi(i?=?1~4)的CCiS[1:0]位定義為00時,對應通道1~4工作于輸出比較方式,主要用于產(chǎn)生精確的定時信號、PWM波形。輸出比較電路以數(shù)值比較器為核心,由數(shù)值比較器、多路開關、輸出波形極性控制、剎車控制等部分組成,如圖7-18所示。圖7-18輸出模塊在圖7-18中,通道4沒有互補輸出引腳,通道1~3輸出結構完全相同,下面以通道1為例來介紹。通道1輸出內(nèi)部結構如圖7-19所示。當通道1處于輸出比較狀態(tài)時,引腳輸出電平以OC1REF(比較參考信號)作參考。參考信號OC1REF有效電平總是高電平,而引腳輸出電平由CC1P、CC1NP位定義。由圖7-19看出,當CC1P位為0時,參考信號OC1REF與TIM1_CH1引腳直接相連,即TIM1_CH1?=?OC1REF;當CC1P位為1時,參考信號OC1REF經(jīng)反相器反相后與TIM1_CH1引腳相連,即IM1_CH1?=?。圖7-19通道1輸出內(nèi)部結構此外,可以得出:帶有剎車功能的互補輸出OCi、OCiN信號,受到比較捕獲使能寄存器TIM1_CCERi的CCiE、CCiNE位,剎車寄存器TIM1_BKR的MOE、OSSI、OSSR位,輸出空閑狀態(tài)寄存器TIM1_OISR的OISi、OISiN位的控制,如表7-3所示。在使用TIM1的輸出比較功能時,必須初始化表7-3中所列相關寄存器的控制位,否則不輸出。表7-3帶剎車控制的OCi與OCiN輸出信號控制通道1可以工作在多種輸出比較方式,由TIM1_CCMR1寄存器的OC1M[2:0]位定義,具體如下:
(1)?000:OC1REF輸出被凍結(輸出比較寄存器TIM1_CCR1與計數(shù)器TIM1_CNT間的比較對OC1REF不起作用)。
(2)?001:匹配時設置通道1的輸出為有效(即高)電平(匹配前為低電平)。當計數(shù)器TIM1_CNT的值與捕獲/比較寄存器TIM1_CCR1相同時,強制OC1REF為高。通過這種方式可獲得由低到高(或由高到低)的階躍信號。
(3)?010:匹配時設置通道1的輸出為無效電平(即低電平)。當計數(shù)器TIM1_CNT的值與捕獲/比較寄存器TIM1_CCR1相同時,強制OC1REF為低電平。
(4)?011:匹配(即TIM1_CNT?=?TIM1_CCR1)時觸發(fā)OC1REF的電平反轉(zhuǎn)(首次匹配前OC1REF為低電平),輸出信號頻率與TIM1_ARR有關(即OC1REF信號周期為2?×?TIM1_ARR),而與捕獲/比較寄存器TIM1_CCR1無關(獲得精確方波手段之一),如圖7-20所示,其中i表示通道號。圖7-20匹配時觸發(fā)OCiREF電平翻轉(zhuǎn)
(5)?100:強制OC1REF為無效電平(即低電平),用于將引腳輸出電平強制為某一個確定狀態(tài)。
(6)?101:強制OC1REF為有效電平(即高電平),用于將引腳輸出電平強制為某一個確定狀態(tài)。
(7)?110:PWM模式1,在向上計數(shù)過程中,一旦TIM1_CNT?<?TIM1_CCR1時,通道1輸出參考電平OC1REF為有效電平,否則為無效電平,如圖7-21(a)所示,其中i表示通道號;而在向下計數(shù)過程中,一旦TIM1_CNT?>?TIM1_CCR1時,通道1為無效電平(OC1REF?=?0),否則為有效電平(OC1REF?=?1),如圖7-21(b)所示,其中i表示通道號。圖7-21僅給出參考電平OCiREF的變化,而OCi、OCiN引腳輸出情況,還要受到MOE、OSSI、CCiE、CCiEN等控制位控制,如表7-3所示。
(8)?111:PWM模式2,在向上計數(shù)時,一旦TIM1_CNT?<?TIM1_CCR1,通道1的參考電平OC1REF為低電平(即無效電平),否則為有效電平;在向下計數(shù)時,一旦TIM1_CNT?>?TIM1_CCR1,通道1的參考電平OC1REF為高電平(有效電平),否則為無效電平。與110情形相比,這相當于輸出波形取反。由于TIM1屬于高級控制寄存器,因此同相(OCi)、反相(OCiN)輸出比較引腳電平受到剎車寄存器TIM1_BKR有關位控制,而TIM2、TIM3、TIM5通用寄存器輸出比較引腳OCi僅受CC1P位控制。圖7-21OC1M[2:0]?為110時參考電平OCiREF的變化7.4.4輸出比較初始化舉例
1.輸出比較初始化過程下面以TIM1_CH1為例,介紹TIM1通道1~4輸出比較初始化過程。
(1)初始化TIM1_CH1引腳為輸出方式。選擇OD還是推挽由后級電路決定,輸出信號邊沿由期望的PWM輸出信號頻率決定,不過一般不會超過2MHz。
(2)初始化定時器工作方式、溢出中斷控制并寫出溢出中斷服務程序。
(3)初始化輸出比較寄存器TIM1_CCR1寄存器。在OC1PE為0時,先初始化CCR1,否則第一個PWM脈沖頭寬度不同。
(4)初始化捕獲/比較寄存器TIM1_CCMR1的CC1S[1:0]?為00(輸出比較方式),以及OC1M[2:0]?位,選擇相應的輸出比較方式。在PWM方式中,一般要用預裝載功能,即OC1PE位為1。否則寫入輸出比較寄存器TIM1_CCR1的內(nèi)容立即生效,而不是等到溢出時才生效。
(5)初始化剎車寄存器TIM1_BKR。TIM1屬于高級控制定時器,OCi的輸出受TIM1_BKR寄存器有關位,如MOE的控制。
(6)對于互補輸出方式,必須初始化死區(qū)控制寄存器TIM1_DTR。
(7)初始化捕獲/比較使能寄存器TIM1_CCER1的CC1P(同相輸出比較極性)、CC1E(同相輸出比較允許)、CC1NP(反相輸出比較極性)、CC1NE(反相輸出比較允許),以便獲得一路或互補的兩路輸出信號。注意:由于STM8S系列TIM1_CH3~TIM1_CH1的反相輸出端TIM1_CH3N~TIM1_CH1N屬于多重復用引腳,由選項字節(jié)OPT1的b5位控制。因此,必須先通過IAP編程方式或在編程狀態(tài)下,將OPT1的b5位置1(此時B3引腳備選功能為TIM1_ETR,B2引腳備選功能為TIM1_CH3N,B1引腳備選功能為TIM1_CH2N,B0引腳備選功能為TIM1_CH1N),然后在STVD開發(fā)環(huán)境下,即可通過PB0引腳輸出OC1的互補信號OC1N。
(8)如果允許比配時輸出比較中斷,則還需要初始化中斷控制TIM1_IER,并設置相應的中斷優(yōu)先級。
2.互補輸出死區(qū)時間對輸出波形的影響
TIM1輸出比較通道1~3具有互補輸出功能,下面以通道1為例來作介紹。當死區(qū)時間D(即TIM1_DTR)為0時,OC1與OC1N僅為簡單的反相關系,如圖7-22中的粗實線所示。當死區(qū)時間D不為0時,OC1輸出脈沖頭前沿被延遲了一個死區(qū)時間,相當于OC1前沿減小死區(qū)時間D,使OC1正脈沖寬度減小為W?-?D;而OC1N的后沿也被延遲了一個死區(qū)時間,相當于OC1N后沿增加了死區(qū)時間D,使OC1N負脈沖寬度加寬為W?+?D,如圖7-22中的虛線所示。脈沖寬度W?=?TIM1_CCR1死區(qū)時間D?=?TIM1_DTR脈沖周期T?=?TIM1_ARR圖7-22兩路互補輸出波形示意圖為保證OC1正脈沖頭寬度大于0,捕獲/比較寄存器TIM1_CCR1(即死區(qū)時間為0時的脈沖頭寬度W)必須大于死區(qū)時間D,否則OC1輸出恒為低電平或高電平(取決于CC1P位)。顯然,為保證OC1N正脈沖頭時間(T?-?W?-?D)?>?0,也必須保證W?+?D?<?T(自動重裝寄存器TIM1_ARR),否則OC1N的狀態(tài)也不翻轉(zhuǎn),輸出恒為低電平或高電平(取決于CC1NP位)。死區(qū)時間D的存在,可保證OC1、OC1N信號不能同時為低電平或高電平,這在電機、開關電源控制電路中非常必要。死區(qū)時間D的長短可編程選擇,由TIM1_DTR寄存器控制(TIM1_CH1~TIM1_CH3三個通道共用),如表7-4所示。表7-4死區(qū)時間與死區(qū)時間寄存器TIM1_DTR內(nèi)容之間關系
3.半橋驅(qū)動信號產(chǎn)生的方法以通道1為例,在死區(qū)時間D不為0的情況下,同相端OC1脈沖頭寬度為W?-?D,反相端OC1N脈沖頭寬度為T?-?W?-?D,可見:
(1)?W?-?D?<?T?-?W?-?D時,即T?>?2W時,OC1脈沖頭比OC1N窄,如圖7-23(a)所示;
(2)?W?-?D?>?T?-?W?-?D時,即T?<?2W時,OC1脈沖頭比OC1N寬,如圖7-23(b)所示;
(3)?W?-?D?=?T?-?W?-?D時,即T?=?2W時,OC1脈沖頭與OC1N脈沖頭相同,即獲得了圖7-23(c)所示的半橋驅(qū)動所需的兩路脈沖信號。圖7-23脈沖頭寬度W對波形的影響(細線:D?=?0;粗線:D?≠?0)在這種情況下,如果死區(qū)時間D固定不變,則可以通過調(diào)節(jié)周期(即調(diào)頻)改變輸出脈沖的占空比,即顯然,頻率越高,占空比越??;頻率越低,占空比越大,其最大值接近0.5,如表7-5所示。表7-5調(diào)頻率脈寬變化規(guī)律脈沖參數(shù)占空比WTD(W?-?D)T2040100.2504080100.37550100100.40060120100.41780160100.4375如果要實現(xiàn)調(diào)寬(即PWM調(diào)制),即周期T(TIM1_ARR)、脈沖頭寬度W(TIM1_CCRn)保持不變,則只能通過調(diào)節(jié)死區(qū)時間D獲得不同的占空比。在開關電源中,PWM調(diào)制輸出信號頻率固定,輸出直流信號紋波電壓幅度與占空比調(diào)節(jié)無關。不過STM8S最高時鐘頻率只有16MHz或24MHz,互補輸出的PWM信號頻率不能太高。例如,當tCK_PSC為16MHz時,如果周期T為50kHz,則死區(qū)時間最小值為1.5μs,脈沖頭寬度調(diào)整范圍在0~8.5μs之間(對應的死區(qū)調(diào)整范圍在10~1.5μs之間),占空比最大值為0.425。在半橋驅(qū)動電路中,一般要求兩脈沖頭寬度相同,當然上下兩管不完全對稱時,也可以微調(diào)兩輸出信號脈沖頭寬度,使其強制對稱。7.5定時器中斷控制在定時器中斷控制中,剎車中斷BIF、觸發(fā)中斷TIF、更新中斷(UIF)共用溢出中斷邏輯;而COM中斷、各通道捕獲/比較中斷CCiIF、重復捕獲/比較中斷CCiOF共用捕獲/比較中斷邏輯。7.6通用定時器TIM2/TIM37.6.1通用定時器TIM2/TIM3結構通用定時器TIM2、TIM3的內(nèi)部結構完全相同,由時基單元(TIMEBASEUNIT)、捕獲/比較陣列(CAPTURECOMPAREARRAY)兩部分組成,如圖7-24所示。圖7-24通用定時器TIM2、TIM3內(nèi)部結構7.6.2通用定時器時基單元通用定時器TIM2、TIM3時基單元電路,由預分頻器(TIMx_PSCR)、向上計數(shù)的16位計數(shù)器(TIMx_CNTR)以及自動裝載寄存器(TIMx_ARR)組成,如圖7-25所示。圖7-25TIM2/TIM3時基單元
1.預分頻器預分頻器輸入信號CK_PSC由主時鐘信號fMASTER提供(TIM2、TIM3計數(shù)脈沖不可選,只有內(nèi)部時鐘一種方式,不能對外部事件進行計數(shù)),預分頻器輸出信號CK_CNT(計數(shù)器輸入信號,也就是計數(shù)脈沖)頻率與預分頻器TIMx_PSCR之間關系為(7-3)通用定時器TIM2、TIM3預分頻器是一個基于4位控制的16位計數(shù)器,只有16個可選的分頻值。根據(jù)TIMx_PSCR內(nèi)容的不同,可對輸入信號CK_PSC實現(xiàn)1分頻(TIMx_PSCR?=?0時)、2分頻(TIMx_PSCR?=?1時)、22…215(32768)分頻(TIMx_PSCR?=?15時)。
2.16位加法計數(shù)器TIMx_CNTR通用定時器TIM2、TIM3計數(shù)器TIMx_CNTR是一個16位向上計數(shù)器,每個計數(shù)脈沖上升沿加1。當TIMx_CNTR的計數(shù)值等于自動裝載寄存器(TIMx_ARR)的影子寄存器時,再來一個計數(shù)脈沖,則出現(xiàn)上溢,然后從0開始計數(shù),同時產(chǎn)生更新事件UEV。通用定時器TIM2、TIM3的其他情況與高級控制定時器TIM1相同,如URS、UDIS、UIE與UEV的邏輯關系等,如圖7-9所示。
3.自動裝載寄存器(TIMx_ARR)通用定時器TIM2、TIM3自動裝載寄存器(TIMx_ARR)與高級控制定時器TIM1相同。自動裝載寄存器TIMx_ARR與溢出時間t、預分頻器TIMx_PSCR之間關系為(7-4)其中,fMASTER的單位為MHz;溢出時間t的單位為μs。7.6.3通用定時器輸入捕獲/輸出比較通用定時器TIM2/TIM3輸入捕獲/輸出比較部分與TIM1類似,只是沒有死區(qū)時間、互補輸出、剎車控制等功能。其中,TIM2有3個輸入捕獲/輸出比較通道,每一個通道處于輸入捕獲還是輸出比較狀態(tài),由各自通道的捕獲/比較模式寄存器TIMx_CCMRi(i表示通道號)的CCiS位(定義對應通道處于輸入捕獲還是輸出比較方式)控制。
1.輸入捕獲當某一個通道捕獲/比較模式寄存器TIMx_CCMRi(i表示通道號)的CCiS位為01、10時,對應的通道處于輸入捕獲狀態(tài),如圖7-26所示。圖7-26輸入狀態(tài)內(nèi)部結構圖7-27給出了TIM2通道1在輸入捕獲狀態(tài)下的結構框圖。圖7-27TIM2通道1在輸入捕獲狀態(tài)下的結構框圖2.輸出比較當某一個通道捕獲/比較模式寄存器TIMx_CCMRi(i表示通道號)的CCiS位為00時,對應的通道處于輸出比較狀態(tài),如圖7-28所示。圖7-28輸出比較接口通道1在輸出比較狀態(tài)下的結構如圖7-29所示。圖7-29通道1在輸出比較狀態(tài)下的結構圖7.6.4通用定時器TIM2/TIM3初始化舉例
1.計數(shù)器的初始化由于TIM2/TIM3預分頻器輸入信號直接來自主時鐘fMASTER,因此不存在主從模式觸發(fā)選擇問題。計數(shù)器初始化的步驟如下:
(1)初始化預分頻器TIM2_PSCR。MOVTIM2_PSCR,#03H ;
PSC[3:0]取3,即選擇8分頻
(2)初始化自動重裝初值寄存器(TIM2_ARR)。
MOVTIM2_ARRH,#27H ;先寫入高8位
MOVTIM2_ARRL,#10H ;再寫入低8位,該寄存器初值為10000,即2710H
(3)初始化控制寄存器TIM2_CR1,定義APRE、OPM、UDIS、URS(一般取1)。MOVTIM2_CR1,#04H ;連續(xù)計數(shù)、允許更新、僅允許計數(shù)器溢出時中斷標志有效
(4)必要時,執(zhí)行軟件更新操作。將事件產(chǎn)生寄存器TIM2_EGR的UG位置1,觸發(fā)重裝。
BSETTIM2_EGR,#0 ;使UG位為1,觸發(fā)重裝并初始化計數(shù)器
;BRESTIM2_SR1,#0 ;清除軟件更新產(chǎn)生的更新標志UIF
(5)初始化中斷使能寄存器(TIM2_IER),允許更新中斷;并設置其優(yōu)先級。BSETTIM2_IER,#0 ;允許更新中斷
(6)初始化控制寄存器TIM2_CR1,啟動定時器TIM2。BSETTIM2_CR1,#0 ;使CEN位為1,啟動
2.輸出比較的初始化在完成了計數(shù)器本身的初始化后,對其某一個通道的輸出比較進行初始化,以便獲得相應的輸出波形。下面以在TIM2_CH1通道輸出的PWM波形為例介紹輸出比較的初始化過程:
(1)初始化輸入捕獲/輸出比較模式寄存器TIM2_CCMR1。將CC1S[1:0]?定義為00,選擇輸出比較方式;將OC1PE位置1,選擇輸出比較寄存器的預裝載功能;將OC1M[2:0]?定義為●?011(匹配時,觸發(fā)引腳翻轉(zhuǎn)),將獲得方波(方波頻率與通道1比較捕獲寄存器TIM2_CCR1的內(nèi)容無關,僅與TIM2_ARR的內(nèi)容有關),且方波高低電平時間等于計數(shù)器溢出時間,如圖7-30所示。圖7-30OCxM?=?011時的輸出波形●?110(PWM1模式方式),當計數(shù)器TIM2_CNT<TIM2_CCR1時,OCiREF(i表示通道號)為高電平(有效電平),反之為低電平。至于有效電平是高電平還是低電平,由捕獲/比較使能寄存器1(TIMx_CCER1)的CC1P位定義(當CC1P為0時,OCx?=?OCiREF),如圖7-31所示。圖7-31OCxM?=?110時的輸出波形(PWM1方式)●?111(PWM2模式方式),當計數(shù)器TIM2_CNT?<?TIM2_CCR1時,輸出無效電平,反之輸出有效電平。輸出波形與OCxM為110時類似,只是極性相反,如圖7-32所示。由于通用定時器TIM2、TIM3只有向上計數(shù)一種方式,因此,PWM輸出波形與TIM1向上計數(shù)時的PWM輸出波形完全相同。
(2)初始化對應通道的輸入捕獲/輸出比較寄存器TIM2_CCRn,一定按字節(jié)寫入,且先寫高8位TIM2_CCRnH,后寫低8位TIM2_CCRnL。
(3)初始化中斷使能寄存器(TIM2_IER),允許/禁止輸出比較中斷,并設置其優(yōu)先級。
(4)初始化捕獲/比較使能寄存器1(TIMx_CCER1)的CC1P位定義有效電平,CC1E可以使能比較。圖7-32OCxM?=?111時的輸出波形(PWM2方式)7.7窗口看門狗定時器WWDG7.7.1窗口看門狗定時器結構及其溢出時間窗口看門狗定時器WWDG在本質(zhì)上就是一個軟件看門狗定時器,不過其優(yōu)先權低于獨立看門狗定時器IWDG,即IWDG使能時WWDG自動關閉,其計數(shù)脈沖為CPU時鐘信號fCPU,內(nèi)部結構如圖7-33所示。窗口看門狗定時器由預分頻器WDGprescaler(12?288分頻)、看門狗控制寄存器WWDG_CR(內(nèi)含7位向下計數(shù)器T[6:0])、看門狗窗口寄存器WWDG_WR及邏輯門電路組成。圖7-33窗口看門狗結構由圖7-33可以看出,在下列兩種情況下,均會觸發(fā)系統(tǒng)復位。
(1)當WWDG_CR寄存器的WDGA(看門狗激活控制)位為1時,如果WWDG_CR寄存器的T6位由1變0,則或門輸出高電平,復位控制信號RESET輸出高電平,強迫復位單元電路下拉N溝MOS管導通,迫使MCU進入復位狀態(tài)。
WWDG_CR寄存器取值范圍在FFH~C0H(即向下計數(shù)器T6~T0取值范圍在7FH~40H)之間。當向下計數(shù)器T6~T0由40H變?yōu)?FH時,T6位由1變0,復位信號有效。窗口看門狗計數(shù)器溢出時間為(7-5)因為T[6:0]?可表示為T[6]·26?+?T[5:0],而在啟用WWDG時,WWDG_CR的T6位一定為1,所以窗口看門狗計數(shù)器溢出時間也可以表示為(7-6)當頻率fCPU的單位取MHz時,窗口看門狗計數(shù)器溢出時間tWWDG的單位為μs。例如,當fCPU為10MHz時,如果計數(shù)器初值為7FH,則溢出時間為78643.2μs。在已知溢出時間、CPU時鐘頻率的情況下,向下計數(shù)器T[6:0]?初值為(7-7)當fCPU一定時,窗口計數(shù)器溢出時間的范圍就確定了。例如當fCPU?=?8MHz時,可選擇的溢出時間范圍在1536~98304μs之間。
(2)當T[6:0]?>?W[6:0]?時,數(shù)值比較器CMP輸出高電平。如果此時執(zhí)行重寫遞減計數(shù)器WWDG_CR,則與門輸出高電平,同樣會使RESET信號有效,觸發(fā)系統(tǒng)復位,即過早“喂狗”同樣會引起系統(tǒng)復位—這是為了防止PC“走飛”,提早重寫向下計數(shù)器T[6:0],造成WWDG失效而設計的復位模式。換句話說,在STM8S中,啟動WWDG定時器后,在正常情況下,用戶必須且只能在“40H≤T[6:0]<WWDG_WR”期間內(nèi),執(zhí)行MOVWWDG_CR,#11xxxxxxB指令“喂狗”,防止WWDG定時器觸發(fā)系統(tǒng)復位,既不能早喂—不餓,會觸發(fā)復位;也不能喂得太晚—也會觸發(fā)復位。如圖7-34所示。圖7-34窗口看門狗定時器刷新(喂狗)時機示意圖7.7.2窗口看門狗定時器初始化窗口看門狗定時器WWDG有兩種啟動方式:硬件啟動方式和軟件啟動方式。
1.硬件啟動方式在寫片時,將看門狗配置選項OPT3字節(jié)的WWDG_HW位置1(硬件啟動)時,復位后軟件看門狗WWDG即處于啟動狀態(tài)(復位后WWDG_CR寄存器初值為7FH;WWDG_WR為7FH)。此時,窗口看門狗定時器退化為普通的軟件看門狗定時器,溢出時間為(7-8)
2.軟件啟動方式在寫片時,將看門狗配置選項OPT3字節(jié)的WWDG_HW位清0(軟件啟動),復位
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 模電與數(shù)電課程設計
- 搓球球手工課程設計
- 洋河變電所課程設計
- 格柵的課程設計
- 有關食物的創(chuàng)想課程設計
- 托班思維領域課程設計
- 2024年起重設備維修配件供應與售后服務合同3篇
- 機器人循跡課課程設計
- solidworks課程設計總結
- 統(tǒng)計課程設計論文
- 人教版2025九年級道德與法治中考備考復習計劃
- 2024年度技術咨詢合同:某科技公司與某政府機構關于技術咨詢服務的協(xié)議(2024版)2篇
- 醫(yī)療科研配色
- 2024年保安員資格考試題目及答案(共60題)
- 期末復習基礎卷(試題)-2024-2025學年一年級上冊數(shù)學人教版
- 第十章 專題 帶電粒子在電場中運動的綜合問題 集體備課說課稿模板 -2023-2024學年高二上學期物理人教版(2019)必修第三冊
- 高中數(shù)學64數(shù)列求和省公開課獲獎課件市賽課比賽一等獎課件
- 《基于單片機的送餐機器人定位功能設計》9800字(論文)
- 產(chǎn)品經(jīng)理100道面試題
- 胡頹子育苗技術規(guī)程-地方標準修訂說明
- 2024年度施工員(市政工程)專業(yè)技能知識考試題庫及答案(共四套)
評論
0/150
提交評論