當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > STM32之外設(shè)定時(shí)器
STM32之外設(shè)定時(shí)器
STM32F103系列的定時(shí)器有三類:
基本定時(shí)器(2個(gè))
通用定時(shí)器(4個(gè))
高級(jí)定時(shí)器(2個(gè))
基本定時(shí)器:無(wú)對(duì)外輸入/輸出,常用作時(shí)基,實(shí)現(xiàn)基本的計(jì)數(shù)、定時(shí)功能。
通用定時(shí)器:除了基本定時(shí)器的時(shí)基功能外,還可對(duì)外做輸入捕捉、輸出比較以及連接其它傳感器接口【編碼器和霍爾傳感器】。
高級(jí)定時(shí)器:此類定時(shí)器的功能最為強(qiáng)大,除了具備通用定時(shí)器的功能外,還包含一些與電機(jī)控制和數(shù)字電源應(yīng)用相關(guān)的功能,比方帶死區(qū)控制的互補(bǔ)信號(hào)輸出、緊急剎車關(guān)斷輸入控制。
基本定時(shí)器
(1-1)基本定時(shí)器框圖
i.基本定時(shí)器時(shí)鐘 TIMxCLK,即內(nèi)部時(shí)鐘 CK_INT,經(jīng) APB1 預(yù)分頻器后分頻提供,如果 APB1 預(yù)分頻系數(shù)等于 1,則頻率不變,否則頻率乘以 2,庫(kù)函數(shù)中 APB1 預(yù)分頻的系數(shù)是 2,即 PCLK1=36M,所以定時(shí)器時(shí)鐘 TIMxCLK=36*2=72M。
ii.基本定時(shí)器時(shí)鐘經(jīng)過(guò) PSC 預(yù)分頻器之后,即 CK_CNT,用來(lái)驅(qū)動(dòng)計(jì)數(shù)器計(jì)數(shù)。PSC 是一個(gè) 16 位的預(yù)分頻器,可以對(duì)定時(shí)器時(shí)鐘 TIMxCLK 進(jìn)行 1~65536 之間的任何一個(gè)數(shù)進(jìn)行分頻。具體計(jì)算方式為:CK_CNT=TIMxCLK/(PSC+1)。
iii.計(jì)數(shù)器 CNT 是一個(gè) 16 位的計(jì)數(shù)器,只能往上計(jì)數(shù),最大計(jì)數(shù)值為 65535。當(dāng)計(jì)數(shù)達(dá) 到自動(dòng)重裝載寄存器的時(shí)候產(chǎn)生更新事件,并清零從頭開(kāi)始計(jì)數(shù)。
iv.自動(dòng)重裝載寄存器 ARR 是一個(gè) 16 位的寄存器,這里面裝著計(jì)數(shù)器能計(jì)數(shù)的最大數(shù) 值。當(dāng)計(jì)數(shù)到這個(gè)值的時(shí)候,如果使能了中斷的話,定時(shí)器就產(chǎn)生溢出中斷。
v.定時(shí)器的定時(shí)時(shí)間等于計(jì)數(shù)器的中斷周期乘以中斷的次數(shù)。計(jì)數(shù)器在 CK_CNT 的驅(qū)動(dòng) 下,計(jì)一個(gè)數(shù)的時(shí)間則是 CK_CLK 的倒數(shù),等于:1/(TIMxCLK/(PSC+1)),產(chǎn)生一次中斷的時(shí)間則等于:1/(CK_CLK * ARR)。如果在中斷服務(wù)程序里面設(shè)置一個(gè)變量 time,用來(lái) 記 錄 中 斷 的 次 數(shù) , 那 么 就 可 以 計(jì) 算 出 我 們 需 要 的 定 時(shí) 時(shí) 間 等 于 : 1/CK_CLK * (ARR+1)*time。
通用定時(shí)器
(1-2)通用定時(shí)器框圖
通用定時(shí)器框圖部分的內(nèi)容與高級(jí)定時(shí)器其存在疊加部分,所以相關(guān)的描述見(jiàn)高級(jí)定時(shí)器的描述,如下:
高級(jí)定時(shí)器
(1-3)高級(jí)定時(shí)器框圖
i.高級(jí)控制定時(shí)器有四個(gè)時(shí)鐘源可選:
(1)內(nèi)部時(shí)鐘源 CK_INT ——內(nèi)部時(shí)鐘 CK_INT 即來(lái)自于芯片內(nèi)部,等于 72M,一般情況下,我們都是使用內(nèi)部時(shí)鐘。當(dāng)從模式控制寄存器 TIMx_SMCR 的 SMS 位等于 000 時(shí),則使用內(nèi)部時(shí)鐘。
(2)外部時(shí)鐘模式 1:外部輸入引腳 TIx(x=1,2,3,4)——當(dāng)使用外部時(shí)鐘模式 1 的時(shí)候,時(shí)鐘信號(hào)來(lái)自于定時(shí)器的輸入通道,總共有 4 個(gè),分別為TI1/2/3/4,即TIMx_CH1/2/3/4。具體使用哪一路信號(hào),由TIM_CCMRx的位CCxS[1:0]配置,其中 CCMR1 控制 TI1/2,CCMR2 控制 TI3/4。
(3)外部時(shí)鐘模式 2:外部觸發(fā)輸入 ETR ——當(dāng)使用外部時(shí)鐘模式 2 的時(shí)候,時(shí)鐘信號(hào)來(lái)自于定時(shí)器的特定輸入通道 TIMx_ETR,只有 1 個(gè)。
(4)內(nèi)部觸發(fā)輸入(ITRx)——內(nèi)部觸發(fā)輸入是使用一個(gè)定時(shí)器作為另一個(gè)定時(shí)器的預(yù)分頻器。硬件上高級(jí)控制定時(shí)器和通用定時(shí)器在內(nèi)部連接在一起,可以實(shí)現(xiàn)定時(shí)器同步或級(jí)聯(lián)。主模式的定時(shí)器可以對(duì)從模式定時(shí)器執(zhí)行復(fù)位、啟動(dòng)、停止或提供時(shí)鐘。
ii.高級(jí)控制定時(shí)器控制器部分包括觸發(fā)控制器、從模式控制器以及編碼器接口。觸發(fā)控制器用來(lái)針對(duì)片內(nèi)外設(shè)輸出觸發(fā)信號(hào),比如為其它定時(shí)器提供時(shí)鐘和觸發(fā) DAC/ADC 轉(zhuǎn)換。
編碼器接口專門針對(duì)編碼器計(jì)數(shù)而設(shè)計(jì)。從模式控制器可以控制計(jì)數(shù)器復(fù)位、啟動(dòng)、遞增/遞減、計(jì)數(shù)。
iii.高級(jí)控制定時(shí)器時(shí)基單元功能包括四個(gè)寄存器,分別是計(jì)數(shù)器寄存器(CNT)、預(yù)分頻器寄存器(PSC)、自動(dòng)重載寄存器(ARR)和重復(fù)計(jì)數(shù)器寄存器(RCR)。其中重復(fù)計(jì)數(shù)器 RCR是高級(jí)定時(shí)器獨(dú)有,通用和基本定時(shí)器沒(méi)有。前面三個(gè)寄存器都是 16 位有效,TIMx_RCR寄存器是 8 位有效。
iv.輸入捕獲可以對(duì)輸入的信號(hào)的上升沿,下降沿或者雙邊沿進(jìn)行捕獲,常用的有測(cè)量輸入信號(hào)的脈寬和測(cè)量 PWM 輸入信號(hào)的頻率和占空比這兩種。
輸入捕獲的大概的原理就是,當(dāng)捕獲到信號(hào)的跳變沿的時(shí)候,把計(jì)數(shù)器 CNT 的值鎖存到捕獲寄存器 CCR 中,把前后兩次捕獲到的 CCR 寄存器中的值相減,就可以算出脈寬或者頻率。如果捕獲的脈寬的時(shí)間長(zhǎng)度超過(guò)你的捕獲定時(shí)器的周期,就會(huì)發(fā)生溢出,這個(gè)我們需要做額外的處理。
v.輸出比較就是通過(guò)定時(shí)器的外部引腳對(duì)外輸出控制信號(hào)。(1)當(dāng)計(jì)數(shù)器 CNT 的值跟比較寄存器 CCR 的值相等的時(shí)候,輸出參考信號(hào) OCxREF 的信號(hào)的極性就會(huì)改變,其中 OCxREF=1(高電平)稱之為有效電平,OCxREF=0(低電平)稱之為無(wú)效電平,并且會(huì)產(chǎn)生比較中斷 CCxI,相應(yīng)的標(biāo)志位 CCxIF(SR 寄存器中)會(huì)置位。然后 OCxREF 再經(jīng)過(guò)一系列的控制之后就成為真正的輸出信號(hào) OCx/OCxN。(2)在生成的參考波形 OCxREF 的基礎(chǔ)上,可以插入死區(qū)時(shí)間(高級(jí)定時(shí)器所特有的),用于生成兩路互補(bǔ)的輸出信號(hào) OCx 和 OCxN,死區(qū)時(shí)間的大小具體由 BDTR 寄存器的位 DTG[7:0]配置。死區(qū)時(shí)間的大小必須根據(jù)與輸出信號(hào)相連接的器件及其特性來(lái)調(diào)整。(3)在輸出比較的輸出控制中,參考信號(hào) OCxREF 在經(jīng)過(guò)死區(qū)發(fā)生器之后會(huì)產(chǎn)生兩路帶死區(qū)的互補(bǔ)信號(hào) OCx_DT 和 OCxN_DT(通道 1~3 才有互補(bǔ)信號(hào),通道 4 沒(méi)有,其余跟通道1~3 一樣),這兩路帶死區(qū)的互補(bǔ)信號(hào)然后就進(jìn)入輸出控制電路,如果沒(méi)有加入死區(qū)控制,那么進(jìn)入輸出控制電路的信號(hào)就直接是 OCxREF。(4)輸出比較的輸出信號(hào)最終是通過(guò)定時(shí)器的外部 IO 來(lái)輸出的,分別為 CH1/2/3/4,其中前面三個(gè)通道還有互補(bǔ)的輸出通道 CH1/2/3N。
vi.斷路功能就是電機(jī)控制的剎車功能,使能斷路功能時(shí),根據(jù)相關(guān)控制位狀態(tài)修改輸出信號(hào)電平。在任何情況下,OCx 和 OCxN 輸出都不能同時(shí)為有效電平,這關(guān)系到電機(jī)控制常用的 H 橋電路結(jié)構(gòu)原因。