




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