




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
實驗6——定時器卓越工程師培養(yǎng)系列本書獲深圳大學教材出版資助STM32F1開發(fā)標準教程01實驗內(nèi)容實驗內(nèi)容功能包括:①將TIM2和TIM5均配置為每1ms進入一次中斷服務函數(shù);②在TIM2的中斷服務函數(shù)中,2ms標志位置為1;③在TIM5的中斷服務函數(shù)中1s標志位置為1;④在Main模塊中基于2ms和1s標志分別創(chuàng)建2ms任務和1s任務;⑤在2ms任務中調(diào)用LED模塊的LEDFlicker函數(shù)實現(xiàn)STM32核心板上LED1和LED2交替閃爍;⑥在1s任務中調(diào)用UART模塊的printf,每秒輸出一次ThisisthefirstSTM32F103Project,byZhangsan.基于STM32核心板設計一個定時器實驗02實驗原理1.通用定時器功能框圖其次是通用定時器(TIM2~TIM5)最復雜的是高級定時器(TIM1和TIM8)。本書只使用通用定時器,因此,我們以通用定時器為例進行講解,另外,本實驗涉及定時器計數(shù)功能,后續(xù)章節(jié)將涉及輸入捕獲和PWM輸出功能,所以,下面對這三個功能一并進行講解。圖7-1所示是通用定時器功能框圖,下面依次介紹定時器時鐘源、觸發(fā)控制器、時基單元、輸入通道、輸入濾波器和邊沿檢測器、捕獲通道、預分頻器、捕獲/比較寄存器、輸出控制和輸出引腳。STM32的基本定時器(TIM6和TIM7)的功能最簡單1.通用定時器功能框圖通用定時器的時鐘源包括來自RCC的內(nèi)部時鐘(CKINT)外部輸入腳TIX外部觸發(fā)輸入TIMxETR和內(nèi)部觸發(fā)輸入ITRx。本書中的實驗只用到了內(nèi)部時鐘CKINT,TIM2TIM7的時鐘均由APB1時鐘提供,而所有實驗的APB1預分頻器的分頻系數(shù)為2,APB1鐘頻率為36MHz,因此,TIM2~TIM7時鐘頻率為72MHz。關于STM32的時鐘系統(tǒng)將會在第9章深入講解,這里,只要知道TIM2~TIM7時鐘頻率為72MH即可。1.定時器時鐘源1.通用定時器功能框圖觸發(fā)控制器的基本功能包括復位和使能定時器,以及設置定時器的計數(shù)方式(遞增)遞減計數(shù)),此外,還可以通過觸發(fā)控制器將通用定時器設置為其他定時器或DAC/ADC的觸發(fā)源。2.觸發(fā)控制器1.通用定時器功能框圖時基單元對觸發(fā)控制器輸出的CK_PSC時鐘進行預分頻得到CK_CNT時鐘,然后CNT計數(shù)器對經(jīng)過分頻之后的CK_CNT時鐘進行計數(shù),當CNT計數(shù)器的計數(shù)值與自動重裝載寄存器的值相等時,產(chǎn)生事件。時基單元包括3個寄存器,分別是計數(shù)器寄存器(TIMX_CNT)預分頻器寄存器(TIMx_PSC)和自動重裝載寄存器(TIMXARR)。3.時基單元1.通用定時器功能框圖TIMx_PSC有影子寄存器,向TIMx_PSC寫入新值,定時器不會馬上將該新值更新到影子寄存器,而是要等到更新事件產(chǎn)生時才會將該值更新到影子寄存器,這時候,分頻后的CK_CNT時鐘才會發(fā)生改變。TIMx_ARR也有影子寄存器,但是可以通過TIMx_CR1的ARPE將影子存器設置為有效或無效。如果ARPE設置為1,則影子寄存器有效,這種情況下,要等到更新事件產(chǎn)生時才把寫入TIMx_ARR中的新值更新到影子寄存器如果ARPE設置為0則影子存器無效向TIMx_ARR寫入新值之后,TIMx_ARR立即更新。3.時基單元1.通用定時器功能框圖通過前面的分析可以得知定時器事件產(chǎn)生時間是由TIMX_PSC和TIMX_ARR兩個寄存器決定的。計算分為兩步:①根據(jù)?ck_cnT=?cK_PSC/(TIMx_PSC+1)公式,計算CK_CNT時頻率;②根據(jù)“定時器事件產(chǎn)生時間(1/?ck_cnT)X(TIM_XARR+1)”公式,計算定時器事件產(chǎn)生時間。3.時基單元1.通用定時器功能框圖通用定時器的輸入通道有4個,分別是TI1、T2TI3和TI4。TI2、TI和TI4這3個通道分別對應于TIMx_CH2、TIMx_CH3和TIMx_CH4引腳,TI通道可以將TIMx_CH1引腳作為其信號源,也可以將TIMx_CH1、TIMX_CH2和TIM_CH3引腳的異或結果作為其信號源。定時器對這4個通道對應引腳輸入信號的上升沿或下降沿進行捕獲。4.輸入通道1.通用定時器功能框圖輸入濾波器首先對輸入信號TIx進行濾波處理,輸入濾波器的參數(shù)由TIMX_CR1的CKDI1:01和TIMx_CCMRx的ICxF[3:0]決定。其中輸入濾波器使用的采樣頻率?DTS可以與CK_INT時鐘頻率?CK_INT相等,也可以是?CK_INT的2分頻或4分頻,這個CKD[1:0]決定。邊沿檢測器實際上是一個事件計數(shù)器,該計數(shù)器對輸入信號的邊沿事件進行檢測,當檢測到N個事件后會產(chǎn)生一個輸出的跳變,這個N由ICXFT[3:0]決定。邊沿檢測器對輸入信號的上升沿還是下降沿進行捕獲,由TIMx_CCER的CCxP決定,當CCxP為0時,捕獲發(fā)生在TIx的上升沿,當CCxP為1時,捕獲發(fā)生在TIx的下降沿。5.輸入濾波器和邊沿檢測器1.通用定時器功能框圖通用定時器有4個捕獲通道,分別是IC1IC2IC3和IC4。捕獲通道ICx用來捕獲輸入通道TIx通過輸入濾波器和邊沿檢測器輸出的信號TIXFPx或TRC每個捕獲輸入通道TIx經(jīng)過輸入濾波器和邊沿檢測器輸出的信號TIXFPx可以同時為兩個捕獲通道的輸入。每個捕獲通道是選擇TI1FP1、TI1FP2、TI2FP1、TI2FP2、TI3FP3、TI3FP4TI4FP3或TIFP4作為輸入,還是選擇TRC作為輸入,由TIMxCCMRx的CCxST[1:0]決定。6.捕獲通道1.通用定時器功能框圖如果ICx直接輸入捕獲/比較寄存器(TIMx_CCRx)那就只能連續(xù)捕獲每一個邊沿而無法實現(xiàn)邊沿的間隔捕獲,比如每4個邊沿捕獲一次。ST公司在設計通用定時器和高級定時器時,增加了一個預分頻器,ICx經(jīng)過預分頻器之后才會輸入TIMx_CCRx,這樣,就不僅可以實現(xiàn)邊沿的連續(xù)捕獲,還可以實現(xiàn)邊沿的間隔捕獲。多少個邊沿捕獲一次,由捕獲/比較模式寄存器(TIMx_CCMRx)的ICxPSCT[1:0]決定,如果希望連續(xù)捕獲每一個事件,將ICxPSC[1:0]配置為00即可,如果希望每4個事件觸發(fā)一次捕獲,將ICxPSC[1:0]配置為10即可。7.預分頻器1.通用定時器功能框圖捕獲/比較寄存器(TIMx_CCRx)既是捕獲輸入的寄存器,又是比較輸出的寄存器。TIMx_CCRx有預裝載寄存器,可以通過TIMx_CCMRx的OCxPE決定開啟或禁止TIMx_CCRx的預裝載功能。將OCxPE設置為1,開啟預裝載寄存器,這種情況下,寫該寄存器要等到更新事件產(chǎn)生時才將TIMxCCRx預裝載寄存器的值傳送至影子寄存器,讀取該寄存器實際上是讀取TIMx_CCRx預裝載寄存器的值。將OCxPE設置為0禁止預裝載寄存器,這種情況下,只有一個寄存器,不存在預裝載寄存器和影子寄存器的概念,因此,讀該寄存器實際上就是讀取TIMX_CCRx中的值,寫該寄存器實際上就是寫TIMx_CCRx。8.捕獲/比較寄存器1.通用定時器功能框圖TIMx_CCER的CCxE決定禁止或使能輸入捕獲/輸出比較功能。在CCx通道配置為輸入的情況下,當CCxE為0時,禁止捕獲,當CCxE為1時,使能捕獲。在CCx通道配置為輸出的情況下,當CCxE為0時,OCx禁止輸出,當CCE為1時,OCx信號輸出到對應的輸出引腳。下面分別對輸入捕獲和輸出比較的工作流程進行說明。1)輸入捕獲預分頻器的輸出是ICxPS,該信號作為捕獲輸入的輸入信號,當?shù)?次捕獲到邊沿事件時,計數(shù)器CNT的值會被鎖存到TIMx_CCRx,同時,TIMxSR的中斷標志CCxIF會被置為1,如果TIMx_DIER的CCxIE為1,則產(chǎn)生CCxI中斷。CCxIF可以由軟件清零也可以通過讀取TIMx_CCRx清零。當?shù)?次獲到邊沿事件(CCxIF依然為1)時TIMx_SR的重復捕獲標志CCxOF會被置為1與CCxIF不同的是,CCxOF只能由軟件清零。8.捕獲/比較寄存器1.通用定時器功能框圖2)輸出比較輸出比較有8種模式,分別是凍結、匹配時設置輸出為有效電平、匹配時設置輸出為無效電平、翻轉(zhuǎn)、強制為無效電平、強制為有效電平PWM模式1和PWM模式2,通過TIMx_CCMR1的OCxM選擇輸出比較模式,可參見圖14-5和表14-1。第14章是PWM輸出實驗,因此,這里只介紹PWM模式1和PWM模式2。當輸出比較配置為PWM模式1,在向上計數(shù)時,一旦TIMX_CNT<TIMX_CCRx時輸出的參考信號OCxREF為有效電平,否則為無效電平;在向下計數(shù)時,一旦TIMCNT>TIMx_CCRx時輸出的參考信號OCxREF為無效電平,否則為有效電平。當輸出比較配置為PWM模式2,在向上計數(shù)時一旦TIMx_CNT<TIMxCCRx時輸出的參考信號0CxREF為無效電平,否則為有效電平;在向下計數(shù)時,一旦TIMx_CNT>TIMxCCRx時輸出的參考信號OCxREF為有效電平,否則為無效電平。當TIMx_CCER的CCxP為0時,OCxREF高電平有效,當CCxP為1時,OCxREF低電平有效。8.捕獲/比較寄存器1.通用定時器功能框圖參考信號OCxREF經(jīng)過輸出控制之后會產(chǎn)生OCx信號,該信號最終通過通用定時器的外部引腳輸出,外部引腳包括TIMx_CH1、TIMx_CH2、TIMxCH3和TIMxCH4。9.輸出控制和輸出引腳2.通用定時器部分寄存器TIMx_CR1的結構偏移地址和復位值如圖7-2所示,對部分位的解釋說明如表7-1所示。1.控制寄存器1(TIMx_CR1)2.通用定時器部分寄存器TIMx_CR2的結構、偏移地址和復位值如圖7-3所,對部分位的解釋說明如表7-2所示。2.控制寄存器2(TIMx_CR2)2.通用定時器部分寄存器TIMx_DIER的結構偏移地址和復位值如圖7-4所示對部分位的解釋說明如表7-3所示。3.DMA/中斷使能寄存器(TIMx_DIER)2.通用定時器部分寄存器TIMx_SR的結構偏移地址和復位值如圖7-所對部分位的解釋說明如表7-4所示。4.狀態(tài)寄存器(TIMx_SR)2.通用定時器部分寄存器TIMx_EGR的結構、偏移地址和復位值如圖7-6所示,對部分位的解釋說明如表7-5所示。5.事件產(chǎn)生寄存器(TIMx_EGR)2.通用定時器部分寄存器TIMX_CNT的結構偏移地址和復位值如圖7-7所示對部分位的解釋說明如表7-6所示。6計數(shù)器(TIMx_CNT)2.通用定時器部分寄存器TIMx_PSC的結構偏移地址和復位值如圖7-8所示,對部分位的解釋說明如表7-7所示。7.預分頻器(TIMx_PSC)2.通用定時器部分寄存器TIMx_ARR的結構偏移地址和復位值如圖7-9所示,對部分位的解釋說明如表7-8所示。8自動重裝載寄存器(TIMX_ARR)3.通用定時器部分固件庫函數(shù)TIM_TimeBaseInit函數(shù)的功能是根據(jù)結構體TIM_TimeBaseInitStruct的值配置通用定時器,通過向TIMx→CR1、TIMx→ARR、TIMx→PSC和TIMx→EGR寫入?yún)?shù)來實現(xiàn)。具描述如表7-9所示。1.TIM_TimeBaselnit3.通用定時器部分固件庫函數(shù)TIM_Cmd函數(shù)的功能是使能或除能某一定時器,通過向TIMx→CR1寫入?yún)?shù)來實現(xiàn)具體描述如表7-10所示。2.TIM_Cmd3.通用定時器部分固件庫函數(shù)TIM_ITConfig函數(shù)的功能是開啟或關閉定時器中斷通過向TIMx→DIER寫入?yún)?shù)來實現(xiàn)。具體描述如表7-11所示。3.TIM_ITConfig3.通用定時器部分固件庫函數(shù)TIM_ClearITPendingBit函數(shù)的功能是清除定時器中斷待處理位,當檢測到中斷時該位會由硬件置為1,完成中斷任務之后由軟件將該位清零,通過向TIMx→SR寫入?yún)?shù)來實現(xiàn)。具體描述如表7-12所示。4.TIM_ClearlTPendingBit3.通用定時器部分固件庫函數(shù)TIM_GetITStatus函數(shù)的功能是檢查中斷是否發(fā)生,通過讀取TIMx→SR和TIMX→DIER來實現(xiàn)。具體描述如表7-13所示。5.TIM_GetITStatus3.通用定時器部分固件庫函數(shù)TIM_SelectOutputTrigger函的功能是選擇TIMx觸發(fā)輸出模式通過向TIMx→CR2寫入?yún)?shù)來實現(xiàn)。具體描述如表7-14所示。6.TIM_SelectOutputTrigger3.通用定時器部分固件庫函數(shù)參數(shù)TIM_SelectOutputTrigger用于選擇TIM觸發(fā)輸出源,可取值如表7-15所示。6.TIM_SelectOutputTrigger4.RCC部分寄存器本實驗涉及的RCC寄存器只有APB1外設時鐘使能寄存器(RCC_APB1ENR),RCC_APB1ENR的結構、偏移地址和復位值如圖7-10所示,對部分位的解釋說明如表7-16所示。5.RCC部分固件庫函數(shù)本實驗涉及的RCC固件庫函數(shù)只有RCC_APB1PeriphClockCmd,該函數(shù)的功能是打開或關閉APB1上相應外設的時鐘,通過向RCC→APB1ENR寫入?yún)?shù)來實現(xiàn)。具體描述如表7-17所示。03實驗步驟步驟1:首先,將“D:STM32KeilTestMaterial06定時器實驗”文件夾復制到“D:STM32KeilTestProduct”文件夾中。然后,雙擊運行“D:STM32KeilTestiProductl06.定時器實驗Proiect”文件夾中的STM32KeilPrjuvproix,單擊工具欄中的留按鈕,當BuildOutput欄出現(xiàn)FromELFcreatinghexfile..表示已經(jīng)成功生成hex文件,出現(xiàn)0Error(s)0Warning(s)表示編譯成功。由于本實驗實現(xiàn)的是定時器功能,因此,Material提供的“06定時器實驗”工程中Timer模塊中的Timer文件對是空白的,而Mainc文件的Proc2msTask和ProcSecTask函數(shù)均依賴于Timer模塊,因此,也就無法通過計算機上的串口助手軟件查看串口輸出的信息,STM32核心板上的兩個LED也無法正常閃爍。不過,只要編譯成功,接著就可以進入下一步操作。復制并編譯原始工程步驟2:首先,將“D:STM32KeilTest\Producti06定時器實驗HWTimer”文件夾中的Timer.c添加到HW分組,具體操作可參見2.3節(jié)步8。然后,將“D:STM32KeilTestProduct06定時器實驗HWTimer”路徑添加到IncludePaths欄,具體操作可參見23節(jié)步驟11。添加Timer文件對步驟3:單擊
按鈕進行編譯編譯結束后,在Project面板中雙擊Timerc下的Timerh。在Timerh文件的“包含頭文件”區(qū),添加代碼#include"DataType.h"。在Timerh文件的“API函數(shù)聲明”區(qū)添加如程序清單7-1所示的API函數(shù)聲明代碼InitTimer函數(shù)主要是初始化Timer模塊;Get2msFlag和C2msFlag函數(shù)的功能是獲取和清除2ms標志,Mainc中的Proc2msTask就是調(diào)用這兩個函數(shù),實現(xiàn)2ms任務功能;Get1SecFlag和CIr1SecFlag函數(shù)的功能是獲取和清除1s標志,Mainc中的Proc1SecTask就是調(diào)用這兩個函數(shù),實現(xiàn)1s任務功能。完善Timer.h文件步驟4:在Timerc文件的“包含頭文件”區(qū)的最后,添加代碼#include"stm32f10x_confh"。在Timer.c文件的“內(nèi)部變量”區(qū),添加內(nèi)部變量的定義代碼,如程序清單7-2所示。s_i2msFlag是2ms標志位,s_ilseFlag是1s標位,這兩個變量在定義時還要初始化為FALSE。完善Timerc文件步驟4:在Timerc文件的“內(nèi)部函數(shù)聲明”區(qū),添加內(nèi)部函數(shù)的聲明代碼,如程序清單7-3所示。ConfigTimer2函數(shù)用于配置TIM2,ConfigTimer5函數(shù)用于配置TIM5。完善Timerc文件步驟4:在Timerc文件的“內(nèi)部函數(shù)實現(xiàn)”區(qū),添加CongTimer2和ConfigTimer5函數(shù)的實現(xiàn)代碼,如程序清單7-4所示。由于這兩個函數(shù)的功能類似,下面按照順序僅對CongTimer2函數(shù)中的語句進行解釋說明。(1)在使用TIM2之前,需要通過RCC_APB1PeriphClockCmd函數(shù)使能TIM2的時鐘。(2)通過TIM_TimeBaseInit函數(shù)對TIM2進行配置,該函數(shù)涉及TIM2_CR1的DIRCMS[1:0]、CKD[1:0],TIM2_ARR,TIM2_PSC,以及TIM2_EGR的UG。DIR用于設置計數(shù)器計數(shù)方向,CMS[1:0]用于選擇中央對齊模式,CKD[1:0]用于設置時鐘分頻系數(shù),可參見圖7-2和表7-1,本實驗中,TIM2設置為邊沿對齊模式,計數(shù)器遞增計數(shù)。TIM2_ARR和TIM2_PSC用于設置計數(shù)器的自動重裝載值和預分頻器的值,可參見圖7-8和圖7-9,以及表7-7和表7-8,本實驗中,這兩個值通過CongTimer2函數(shù)的參數(shù)a和psc來決定。UG用于產(chǎn)生更新事件,可參見圖7-6和表7-5,本實驗中將該值設置為1,用于重新初始化計數(shù)器,并產(chǎn)生一個更新事件。完善Timerc文件步驟4:(3)通過TIM_ITConfig函數(shù)使能TIM2的更新中斷,該函數(shù)涉及TIM2_DIER的UIEUIE用于禁止和允許更新中斷,可參見圖7-4和表7-3。(4)通過NVIC_Imit函數(shù)使能TIM2的中斷,同時設置搶占優(yōu)先級為0,子優(yōu)先級為3。(5)通過TIM_Cmd函數(shù)使能TIM2,該函數(shù)涉及TIM2_CR1的CEN,可參見圖7-2和表7-1。完善Timerc文件步驟4:完善Timerc文件步驟4:在Timerc文件的“內(nèi)部函數(shù)實現(xiàn)”區(qū),在ConfigTimer5函數(shù)實現(xiàn)區(qū)的后面添加TIM2_IRQHandler和TIM5_IQHandler中斷服務函數(shù)的實現(xiàn)代碼,如程序清單7-5所示。由于這兩個中斷服務函數(shù)的功能類似,下面按照順序僅對TIM2IRQHandler函數(shù)中的語句進行解釋說明。(1)Timerc的CongTimer2函數(shù)中使能了TIM2的更新中斷,因此當TIM2遞增計數(shù)產(chǎn)生溢出時,會執(zhí)行TIM2_IRQHandler函數(shù)。完善Timerc文件步驟4:(2)通過TIM_GetITStatus函數(shù)獲取TIM2更新中斷標志,該函數(shù)涉及TIM2_DIER的UIE和TIM2_SR的UIF,可參見圖7-4、圖7-5、表7-3和表7-4。本實驗中,UIE為1,表示使能更新中斷,當TIM2遞增計數(shù)產(chǎn)生溢出時,UIF由硬件置為1并產(chǎn)生更新中斷,執(zhí)行TIM2IRQHandler函數(shù)。因此,在TIM2_IRQHandler函數(shù)中還需要通過TIM_CIearITPendingBi函數(shù)將UIF清零。(3)變量s_i2msFlag是2ms標志位,然而,TIM2_IRQHandler函數(shù)是1ms執(zhí)行一次,因此,還需要一個計數(shù)器(s_iCnt2),TIM2_IRQHandler函數(shù)執(zhí)行一次,s_iCnt2就執(zhí)行一次加1操作,當s_iCnt2等于2時,將s_i2msFlag置為1,并將s_iCnt2清零。完善Timerc文件步驟5:在Project面板中,雙擊打開Mainc文件,在Main.c文件的“包含頭文件”區(qū)的最后,添加代碼#include"Timerh"。這樣就可以在Maic文件中調(diào)用Timer模塊的API函數(shù)等,實現(xiàn)對Timer模塊的操作。
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 模板工程付款合同范本
- 2025年新入職護士理論考試指導題庫500題(含答案)
- 2025年水利三類人員C證理論考試指導題庫-下(多選、判斷題)
- 臨時柴油運輸合同范本
- 汽車用油加盟合同范本
- 卡車汽車租賃合同范本
- 景觀小品轉(zhuǎn)讓合同范本
- 幼兒園大班安全詳細教案
- 醫(yī)學影像技術在整形美容中的應用
- 小班安全快樂的寒假課件
- 2024《整治形式主義為基層減負若干規(guī)定》全文課件
- 手機短視頻拍攝與剪輯(微課版) 課件 第7章 視頻攝像
- 農(nóng)村建房清包工合同協(xié)議書
- 鎳礦石購銷合同
- (新版)電工三級-職業(yè)技能等級認定考試題庫(學生用)
- 《高性能樹脂》課件
- 中央2024年中央宣傳部直屬單位招聘106人筆試歷年典型考題及考點附答案解析
- 《教育向美而生-》讀書分享課件
- 拒絕校園欺凌從我做起完整版課件
- 技術進口合同登記證
- DZ∕T 0372-2021 固體礦產(chǎn)選冶試驗樣品配制規(guī)范(正式版)
評論
0/150
提交評論