微機原理及單片機應用技術-定時器原理及應用_第1頁
微機原理及單片機應用技術-定時器原理及應用_第2頁
微機原理及單片機應用技術-定時器原理及應用_第3頁
微機原理及單片機應用技術-定時器原理及應用_第4頁
微機原理及單片機應用技術-定時器原理及應用_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

定時器原理及應用本章主要內(nèi)容10.1定時器概述10.2基本定時器10.3通用定時器10.4高級定時器10.5STM32F10x定時器相關庫函數(shù)

10.6STM32F103定時器開發(fā)實例10.1定時器的概述本章講述微控制器另一個基本的片上外設--定時器。定時器是微控制器必備的片上外設。微控制器中的定時器實際上是一個計數(shù)器,可以對內(nèi)部脈沖/外部輸入進行計數(shù),不僅具有基本的計數(shù)/延時功能,還具有輸入捕獲、輸出比較和PWM輸出等高級功能。定時器的資源十分豐富,包括高級控制定時器、通用定時器和基本定時器。在低容量和中容量的STM32F103XX系列產(chǎn)品中,以及互連型產(chǎn)品STM32F105XX系列和STM32F107XX系列中,只有一個高級控制定時器TIM1。而在高容量和超大容量的STM32F103XX系列產(chǎn)品中,有兩個高級控制定時器TIM1和TIM8。在所有的STM32F10XXX系列產(chǎn)品中,都有通用定時器TIM2~TIM5

本書以STM32F103系列為例,在該系列產(chǎn)品中最多有11個定時器,其中2個高級控制定時器,4個通用定時器,2個基本定時器,2個看門狗定時器,以及1個系統(tǒng)嘀嗒定時器。本章主要討論前8個定時器。在嵌入式系統(tǒng)中,使用定時器可以完成以下功能:在多任務的分時系統(tǒng)中用作中斷來實現(xiàn)任務的切換;周期性執(zhí)行某個任務,如每隔固定時間完成一次AD采集;延時一定時間執(zhí)行某個任務,如交通燈信號變化;顯示實時時間,如萬年歷;產(chǎn)生不同頻率的波形,如MP3播放器;產(chǎn)生不同脈寬的波形,如驅(qū)動伺服電機;測量脈沖的個數(shù),如測量轉(zhuǎn)速;測量脈沖的寬度,如測量頻率。

10.2基本定時器

基本定時器TIM6和TIM7只具備最基本的定時功能,就是累加的時鐘脈數(shù)超過預定值時,能觸發(fā)中斷或觸發(fā)DMA請求。由于在芯片內(nèi)部與DAC外設相連,可通過觸發(fā)輸出驅(qū)動DAC,也可以作為其他通用定時器的時鐘基準?;径〞r器框圖見圖這兩個基本定時器使用的時鐘源都是TIMxCLK,時鐘源經(jīng)過PSC預分頻器輸入至脈沖計數(shù)器TIMx_CNT,基本定時器只能工作在向上計數(shù)模式,在重載寄存器TIMx_ARR中保存的是定時器的溢出值。工作時,脈沖計數(shù)器TIMx_CNT由時鐘觸發(fā)進行計數(shù),當TIMx_CNT的計數(shù)值X等于重載寄存器TIMx_ARR中保存的數(shù)值N時,產(chǎn)生溢出事件,可觸發(fā)中斷或DMA請求。然后TIMx_CNT的值重新被置為0,重新向上計數(shù)。10.3通用定時器相比之下,通用定時器TIM2~TIM5就比基本定時器復雜得多了。除了基本的定時,它主要用在測量輸入脈沖的頻率、脈沖寬與輸出PWM脈沖的場合,還具有編碼器的接口。STM32F103系列通用定時器的主要功能如下:具有自動重裝載功能的16位遞增/遞減計數(shù)器,其內(nèi)部時鐘CK_CNT的來源TIMxCLT來自APB1預分頻器的輸出。具有4個獨立的通道,每個通道都可以用于輸入捕獲、輸出比較、PWM輸入和輸出以及單脈沖模式輸出等。在更新、觸發(fā)、輸入捕獲以及輸出比較事件時,可產(chǎn)生中斷/DMA請求。支持針對定位的增量編碼器和霍爾傳感器電路。使用外部信號控制定時器和定時器互連的同步電路。觸發(fā)輸入作為外部時鐘或者按周期的電流管理。通用定時器框圖見下圖。硬件結(jié)構(gòu)可分為三個部分:時鐘源、時鐘單元、捕獲和比較通道。10.3.1時鐘源的選擇

定時器時鐘可由下述時鐘源提供。(1)內(nèi)部時鐘(CK_INT,Internalclock)。(2)外部時鐘模式1:外部輸入腳(Tix),包括外部比較捕獲引腳TI1F_ED、TI1FP1和TI2FP2,計數(shù)器在選定引腳的上升沿或下降沿開始計數(shù)。(3)外部時鐘模式2:外部觸發(fā)輸入(ExternalTriggerInput,ETR),計數(shù)器在ETR引腳的上升沿或下降沿開始計數(shù)。(4)內(nèi)部觸發(fā)輸入(ITRx,x=0,1,2,3):一個定時器作為另一個定時器的預分頻器,如可以配置一個定時器TIM1作為另一個定時器TIM2的預分頻器。除內(nèi)部時鐘外,其他3種時鐘源都通過TRGI(觸發(fā)輸入),如圖內(nèi)部時鐘源(CK_INT)如果選擇內(nèi)部時鐘源的話則與基本定時器一樣,也為TIMxCLK。但要注意的是,所有定時器(包括基本、通用和高級)使用內(nèi)部時鐘時,定時器的時鐘源都被稱為TIMxCLK,但TIMxCLK的時鐘來源并不是完全一樣的,如圖所示,定時器的時鐘不是直接來自APB1或APB2,而是來自于輸入為APB1或APB2的一個倍頻器。TIM2~7也就是通用定時器,TIMxCLK的時鐘來源是APB1預分頻器的輸出。當APB1的分頻系數(shù)為1時,則TIM2~7的TIMxCLK直接等于該APB1預分頻器的輸出,當APB1的預分頻系數(shù)為其他數(shù)值(即預分頻系數(shù)為2、4、8或16)時,這個倍頻器起作用,TIM2~7的TIMxCLK則為APB1預分頻器輸出的2倍。10.3.2時基單元STM32的通用定時器的時基單元包含計數(shù)器(TIMx_CNT)、預分頻器(TIMx_PSC)、和自動裝置寄存器(TIMx_ARR)等,如圖所示。計數(shù)器、自動裝載寄存器和預分頻器可以由軟件進行讀/寫操作,在計數(shù)器運行時仍可讀/寫。CNT計數(shù)器UUI自動裝載寄存器PSC預分頻器U停止、清零或遞增/減CK_CNTCK_PSC+/-從時鐘源送來的時鐘信號,首先經(jīng)過預分頻器的分頻,降低頻率后輸出信號CK_CNT,送入計數(shù)器進行計數(shù),預分頻器的分頻取值范圍可以是1~65536之間的任意數(shù)值。一個72MHz的輸入信號經(jīng)過分頻后,可以產(chǎn)生最小接近1100Hz的信號。計數(shù)器具有16位計數(shù)功能,它可以在時鐘控制單元的控制下,進行遞增計數(shù)、遞減計數(shù)或中央對齊計數(shù)(即先增計數(shù),達到自動重裝載寄存器的數(shù)值后再遞減計數(shù))。10.3.3捕獲/比較寄通道通用定時器的基本計時功能與基本定時器的工作方式是一樣的,同樣把時鐘源經(jīng)過預分頻器輸出到脈沖計數(shù)器TIMx_CNT累加,溢出時就產(chǎn)生中斷或DMA請求。而通用定時器比基本定時器多出的強大功能,就是因為通用定時器多出了一種寄存器--捕獲/比較寄存器TIMx_CCR(capture/compareregister)。它包括捕獲輸入部分(數(shù)字濾波、多路復用和預分頻器)和比較輸出部分(比較器和輸出控制)。當一個通道工作于捕獲模式時,該通道的輸出部分自動停止工作;同樣,當一個通道工作于比較模式時,該通道的輸入部分自動停止工作。1.捕獲通道

當一個通道工作于捕獲模式時,輸入信號從引腳經(jīng)輸入濾波、邊沿檢測和預分頻電路后,控制捕獲寄存器的操作。當指定的輸入邊沿到來時,定時器將該時刻計數(shù)器的當前數(shù)值復制到捕獲寄存器,并在中斷使能時產(chǎn)生中斷。讀出捕獲寄存器的內(nèi)容,就可以知道信號發(fā)生變化的準確時間。2.比較通道當一個通道工作于比較模式時,用戶程序?qū)⒈容^數(shù)值寫入比較寄存器,定時器會不停地將該寄存器的內(nèi)容與計數(shù)器的內(nèi)容進行比較,一旦比較條件成立,則產(chǎn)生相應的輸出。如果使能了中斷,則產(chǎn)生中斷;如果使能了引腳輸出,則按照控制電路的設置產(chǎn)生輸出波形。這個通道最重要的應用就是輸出PWM(PulseWidthModulation)波形。10.3.4計數(shù)器模式向上計數(shù)模式在向上計數(shù)模式中,計數(shù)器從0計數(shù)到自動加載值(TIMx_ARR計數(shù)器的內(nèi)容),然后重新從0開始計數(shù),并且產(chǎn)生一個計數(shù)器溢出事件。當TIMx_ARR=0x36時,計數(shù)器向上計數(shù)模式如圖10.9所示。圖10.9向上計數(shù)模式實例(TIMx_ARR=0X36)向下計數(shù)模式在向下模式中,計數(shù)器從自動裝入的值(TIMx_ARR計數(shù)器的值)開始向下計數(shù)到0,然后從自動裝入的值重新開始計數(shù),并且產(chǎn)生一個計數(shù)器向下溢出事件。當TIMx_ARR=0x36時,計數(shù)器向下計數(shù)模式如圖10.10所示。圖10.10向下計數(shù)模式實例(TIMx_ARR=0X36)中央對齊模式(向上/向下計數(shù))在中央對齊模式中,計數(shù)器從0開始計數(shù)到自動加載的值(TIMx_ARR寄存器),產(chǎn)生一個計數(shù)器溢出事件,然后向下計數(shù)到0,并且產(chǎn)生一個計數(shù)器下溢事件;然后再從0開始重新計數(shù)。當TIMx_ARR=0x06時,計數(shù)器向下計數(shù)模式如圖11.11所示。圖10.11中央對齊模式10.3.5PWM輸出過程分析定時器可以利用GPIO引腳進行脈沖輸出,在配置為比較輸出、PWM輸出功能時,捕獲/比較寄存器TIMx_CCR被用做比較功能,下面把它簡稱為比較寄存器。這里直接舉例說明定時器的PWM輸出工作過程:若配置脈沖計數(shù)器TIMx_CNT為向上計數(shù),而重載寄存器TIMx_ARR被配置為N,即TIMx_CNT的當前計數(shù)值數(shù)值X在TIMxCLK時鐘源的驅(qū)動下不斷累加,當TIMx_CNT的數(shù)值X大于N時,會重置TIMx_CNT數(shù)值為0并重新計數(shù)。而在TIMx_CNT計數(shù)的同時,TIMx_CNT的計數(shù)值X會與比較寄存器TIMx_CCR預先存儲的數(shù)值A進行比較。當脈沖計數(shù)器TIMx_CNT的數(shù)值X小于比較寄存器TIMx_CCR的值A時,輸出高電平(或低電平);相反地,當脈沖計數(shù)器的數(shù)值X大于或等于比較寄存器的值A時,輸出低電平(或高電平)。如此循環(huán),得到的輸出脈沖周期就為重載寄存器TIMx_ARR存儲的數(shù)值(N+1)乘以觸發(fā)脈沖的時鐘周期,其脈沖寬度則為比較寄存器TIMx_CCR的值A乘以觸發(fā)脈沖的時鐘周期,即輸出PWM的占空比為A/(N+1)。如圖10.12,圖中為重載寄存器TIMx_ARR被配置為N=8,向上計數(shù);比較寄存器TIMx_CCR的值被設置為4、8、大于8、等于0時的輸出時序圖。圖中OCxREF即為GPIO引腳輸出時序,CCxIF為觸發(fā)中斷的時序。圖10.12PWM輸出模式10.3.7定時器時間的計算定時時間由TIM_TimeBaseInitTypeDef中的TIM_Prescaler和TIM_Period設定。TIM_Period的大小實際上表示的是需要經(jīng)過TIM_Period次計數(shù)后才能發(fā)生一次更新或中斷。TIM_Prescaler是時鐘預分頻數(shù)。設脈沖頻率為TIMxCLK,定時公式為T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK假設系統(tǒng)時鐘是72MHz,時鐘系統(tǒng)部分初始化程序如下所述:TIM_TimeBaseStructure.TIM_Period=1999;//計數(shù)值1999TIM_TimeBaseStructure.TIM_Prescaler=35999;//分頻359999系統(tǒng)時間為T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK=(1999+1)*(35999+1)/72M=1s10.3.8定時器中斷以TIM2為例,TIM2中斷通道在中斷向量表中的序號為28,優(yōu)先級為25。TIM2能夠引起中斷的中斷源或事件有很多,如更新事件(上溢/下溢)、輸入捕獲、輸出匹配、DMA申請等。所有TIM2的中斷事件都是通過一個TIM2中斷通道向CM3內(nèi)核提出中斷申請的。CM3內(nèi)核對于每個外部中斷通道都有相應的控制字和控制位,用于控制該中斷通道。與TIM2中斷通道相關的,在NVIC中有13位,它們是PRI_28(IP[28])的8位(只用高4位);加上中斷通道允許,中斷通道清除(相當禁止中斷),中斷通道Pending置位,中斷Pending清除,正在被服務的中斷(Active)標志位,各1位。TIM2的中斷過程如下所述:初始化過程

首先要設置寄存器AIRC和PRIGROUP值,規(guī)定系統(tǒng)中的占先優(yōu)先級和副優(yōu)先級的個數(shù)(在4位中占用的位數(shù));設置TIM2寄存器,允許相應的中斷,如允許UIE(TIM2_DIER的第[0]位);設置TIM2中斷通道的占先優(yōu)先級和副優(yōu)先級(IP[28],在NVIC寄存器組中);設置允許TIM2中斷通道。在NVIC寄存器組的ISER寄存器中的1位。中斷響應過程

當TIM2的UIE條件成立(更新、上溢或下溢)時,硬件將TIM2本身的寄存器中的UIE中斷標志置位,然后通過TIM2中斷通道向內(nèi)核申請中斷服務。此時內(nèi)核硬件將TIM2中斷通道的Pending標志置位,表示TIM2有中斷申請。如果當前有中斷正在處理,TIM2的中斷級別不夠高,那么就保持Pending標志(當然用戶可以在軟件中通過寫ICPR寄存器中相應的位將本次中斷清除掉)。當內(nèi)核有空時,開始響應TIM2的中斷,進入TIM2的中斷服務。此時硬件將IABR寄存器中相應的標志位置位,表示TIM2中斷正在被處理。同時硬件清除TIM2的Pending標志位。執(zhí)行TIM2的中斷服務程序

所有TIM2的中斷事件都是在一個TIM2中斷服務程序中完成的,所以進入中斷程序后,中斷程序需要首先判斷是哪個TIM2的中斷源需要服務,然后轉(zhuǎn)移到相應的服務代碼去。注意,不要忘記把該中斷標志位清除掉,硬件是不會自動清除TIM2寄存器中具體的中斷標志位的。如果TIM2本身的中斷源多于2個,那么它們服務的先后次序就由用戶編寫的中斷服務程序決定。所以用戶在編寫服務程序時,應該根據(jù)實際的情況和要求,通過軟件的方式,將重要的中斷優(yōu)先處理。中斷返回

內(nèi)核執(zhí)行完中斷服務程序后,便進入中斷返回過程。在這個過程中,硬件將IABR寄存器中相應的標志位清除,表示該中斷處理完成。如果TIM2本身還有中斷標志位被置位,表示TIM2還有中斷在申請,則重新將TIM2的Pending標志置為1,等待再次進入TIM2的中斷服務。TIM2中斷服務函數(shù)是stm32f10x_it.c中的函數(shù)TIM2_IRQHandler()。10.5STM32F10x定時器相關庫函數(shù)本節(jié)將介紹STM32F103x定時器相關庫函數(shù)的用法及其參數(shù)定義。本書介紹和使用的庫函數(shù)均基于STM32F10x標準外設庫的最新版本。STM32F103x定時器的相關庫函數(shù)存放在STM32F10x標準外設庫的stm32f10x_tim.h和stm32f10x_tim.c文件中。其中,頭文件stm32f10x_tim.h用來存放定時器相關結(jié)構(gòu)體和宏的定義以及定時器庫函數(shù)聲明,源代碼文件stm32f10x_tim.c用來存放定時器庫函數(shù)定義。如果在用戶應用程序中使用STM32F10x的定時器相關庫函數(shù),需要將定時器相關庫函數(shù)的頭文件包含進來。該步驟可以在應用程序文件開關添加#include”stm32f10x_tim.h”語句。常用的STM32F10x定時器庫函數(shù)如下;TIM_DeInit:將TIMx的寄存器恢復為復位啟動時的默認值。TIM_TimeBaseInit:根據(jù)TIM_TimeBaseInitStruct的設置數(shù)據(jù),設置TIMx的基礎外設參數(shù)。TIM_OC1Init:根據(jù)TIM_OCInitStruCt的設置,設置通道1的參數(shù)。TIM_OC2Init:根據(jù)TIM_OCInitStruCt的設置,設置通道2的參數(shù)。TIM_OC3Init:根據(jù)TIM_OCInitStruCt的設置,設置通道3的參數(shù)。TIM_OC4Init:根據(jù)TIM_OCInitStruCt的設置,設置通道4的參數(shù)。TIM_OC1PreloadConfig:使能或禁止TIMx外設在CCR1上預裝寄存器。TIM_OC2PreloadConfig:使能或禁止TIMx外設在CCR2上預裝寄存器。TIM_OC3PreloadConfig:使能或禁止TIMx外設在CCR3上預裝寄存器。TIM_OC4PreloadConfig:使能或禁止TIMx外設在CCR4上預裝寄存器。TIM_ARRPreloadConfig:使能或禁止TIMx外設在ARR上預裝寄存器。TIM_CtrlPWMOutputs:使能或禁止TIMx的主輸出信號。TIM_Cmd:使能或禁止TIMx。TIM_GetFlagStatus:檢查指定的TIMx標志位的狀態(tài)。TIM_ClearFlag:清除TIMx的待處理標志位。TIM_ITConfig:使能或禁止指定的TIMx中斷。TIM_GetITStatus:檢查指定的TIMx中斷是否發(fā)生。TIM_ClearITPendingBit:清除TIMx的中斷掛起位。10.6STM32F103定時器開發(fā)實例10.6.1開發(fā)實例(一):準確定時1.開發(fā)要求本實例是通過通用定時器TIM3實現(xiàn)精準定時,使其定時1s,在定時器3的中斷服務函數(shù)中,實現(xiàn)秒數(shù)相加。每當定時器中斷達到1s后,進入中斷服務函數(shù),執(zhí)行秒數(shù)加1,通過秒數(shù)的奇偶性控制開發(fā)板上LED1(DS1)點亮和熄滅。2.硬件設計開發(fā)板上的LED0(DS0)與STM32F103ZET6微控制器的PB5相連接,電路圖如圖10.18所示。

由于該實例是使用定時器中斷控制LED,需要對所需要定的時間進行分析??紤]到使用開發(fā)板為ARMCortex-M3內(nèi)核的STM32F103ZET6,其系統(tǒng)時鐘FSysClk=72MHz。首先對時鐘頻率進行分頻。先將時鐘頻率3600分頻至20KHz,可得分頻值為:3600-1,計數(shù)值為:20000-1。采用向下計數(shù)的計數(shù)模式。3.軟件流程設計

本實例使用定時器實現(xiàn)LED閃爍,軟件設計主要實現(xiàn)以下功能:(1)?配置RCC寄存器組,使用PLL輸出72MHz時鐘作為主時鐘,并配置PCLK1時鐘為主時鐘2分頻。(2)?配置GPIOB的5引腳為推挽輸出模式。(3)?配置TIM3時基單元:分頻數(shù)為3600,計數(shù)值為20000。(4)?配置NVIC使能TIM3中斷。以上功能的實現(xiàn),在軟件設計中采用基于前/后臺的構(gòu)架,故其流程也分為前臺(TIM3中斷服務函數(shù))和后臺(主程序)兩個部分。4.程序清單結(jié)合流程圖及本章所述相關庫函數(shù),具體程序如下。1)后臺程序#include"led.h"#include"sys.h"#include"timer.h"http://************************主程序************************intmain(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置NVIC LED_Init(); //LED端口初始化 TIM3_Int_Init(20000,3600);//定時器3配置 while(1){If(sec%2==0)GPIO_ResetBits(GPIOB,GPIO_Pin_5);elseGPIO_SetBits(GPIOB,GPIO_Pin_5);}} voidLED_Init(void){GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB端口時鐘GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //LED-->PB.5端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//設置I/O口速度50MHzGPIO_Init(GPIOB,&GPIO_InitStructure); //根據(jù)設定參數(shù)初始化GPIOB.5GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5輸出高}voidTIM3_Int_Init(u16arr,u16psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; NVIC_InitTypeDefNVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//時鐘使能

//定時器TIM3初始化 TIM_TimeBaseStructure.TIM_Period=arr;//設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler=psc;//設置用來作為TIMx時鐘頻率除數(shù)的預分頻值 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//

溫馨提示

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

評論

0/150

提交評論