前言
定時器作為微控制器不可缺少的外設(shè),在STM32中也是如此。相信不少初學(xué)者學(xué)到定時器的時候?qū)TM32的學(xué)習(xí)熱情就大打折扣甚至想要放棄了,因為這一部分知識確實比較復(fù)雜。但是,如果你在之前對GPIO、串口通信、外部中斷的學(xué)習(xí)中把這些外設(shè)掌握了的話,學(xué)習(xí)這個新知識并不難。
例本章共計1萬余字,從STM32定時器的原理、寄存器介紹、定時器配置以及定時器的幾個常用的功能(如定時器中斷、定時器輸出比較PWM波形、定時器輸入捕獲測電平長度、定時器編碼器模式應(yīng)用等)的使用方法來教大家掌握定時器這一外設(shè)。
一、定時器基本介紹
1. STM32定時器
1、上來說就是用來定時的機器,是存在于STM32單片機中的一個外設(shè)。STM32總共有8個定時器,分別是2個高級定時器(TIM1、TIM8),4個通用定時器(TIM2、TIM3、TIM4、TIM5)和2個基本定時器(TIM5、TIM6),如下圖所示:
這三種定時器的區(qū)別如下:
即:高級定時器具有捕獲/比較通道和互補輸出,通用定時器只有捕獲/比較通道,基本定時器沒有以上兩者。
2. 通用定時器功能和特點
STM32的眾多定時器中我們使用最多的是高級定時器和通用定時器,而高級定時器一般也是用作通用定時器的功能,下面我們就以通用定時器為例進行講解,其功能和特點包括:
位于低速的APB1總線上(APB1)
16 位向上、向下、向上/向下(中心對齊)計數(shù)模式,自動裝載計數(shù)器(TIMx_CNT)。
16 位可編程(可以實時修改)預(yù)分頻器(TIMx_PSC),計數(shù)器時鐘頻率的分頻系數(shù) 為 1~65535 之間的任意數(shù)值。
4 個獨立通道(TIMx_CH1~4),這些通道可以用來作為:
① 輸入捕獲
② 輸出比較
③ PWM 生成(邊緣或中間對齊模式)
④ 單脈沖模式輸出
- 可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用 1 個定時器控制另外一個定時器)的同步電路。
- 如下事件發(fā)生時產(chǎn)生中斷/DMA(6個獨立的IRQ/DMA請求生成器):
①更新:計數(shù)器向上溢出/向下溢出,計數(shù)器初始化(通過軟件或者內(nèi)部/外部觸發(fā)) ②觸發(fā)事件(計數(shù)器啟動、停止、初始化或者由內(nèi)部/外部觸發(fā)計數(shù)) ③輸入捕獲 ④輸出比較 ⑤支持針對定位的增量(正交)編碼器和霍爾傳感器電路 ⑥觸發(fā)輸入作為外部時鐘或者按周期的電流管理
STM32 的通用定時器可以被用于:測量輸入信號的脈沖長度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和 PWM)等。
使用定時器預(yù)分頻器和 RCC 時鐘控制器預(yù)分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調(diào)整。STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。
3. 計數(shù)器模式
通用定時器可以向上計數(shù)、向下計數(shù)、向上向下雙向計數(shù)模式。
①向上計數(shù)模式:計數(shù)器從0計數(shù)到自動加載值(TIMx_ARR),然后重新從0開始計數(shù)并且產(chǎn)生一個計數(shù)器溢出事件。
②向下計數(shù)模式:計數(shù)器從自動裝入的值(TIMx_ARR)開始向下計數(shù)到0,然后從自動裝入的值重新開始,并產(chǎn)生一個計數(shù)器向下溢出事件。
③中央對齊模式(向上/向下計數(shù)):計數(shù)器從0開始計數(shù)到自動裝入的值-1,產(chǎn)生一個計數(shù)器溢出事件,然后向下計數(shù)到1并且產(chǎn)生一個計數(shù)器溢出事件;然后再從0開始重新計數(shù)。
** 4. 定時器工作原理**
a.定時器框圖
下面就是STM32定時器的工作款圖了,是學(xué)習(xí)STM32定時器必須要掌握的。很多學(xué)習(xí)者學(xué)會了通過庫函數(shù)來配置定時器,實現(xiàn)了簡單的應(yīng)用卻忽略了基本原理,這就對導(dǎo)致在復(fù)雜應(yīng)用的設(shè)計上出現(xiàn)低級的錯誤。所以建議讀者認真掌握定時器的工作框圖,明白內(nèi)在的原理。
框圖可以分為四個大部分(用紅色筆表示出),分別是:①時鐘產(chǎn)生器部分,②時基單元部分,③輸入捕獲部分、④輸出比較部分。
b.時鐘產(chǎn)生器部分
在第一部分時鐘選擇上,STM32定時器有四種時鐘源選擇(圖中藍色筆標(biāo)識),分別是:
①內(nèi)部時鐘(CK_INT)
②外部時鐘模式:外部觸發(fā)輸入(ETR)
③內(nèi)部觸發(fā)輸入(ITRx):使用一個定時器作為另一個定時器的預(yù)分頻器,如可以配置一個定時器Timer1而作為另一個定時器Timer2的預(yù)分頻器。
④外部時鐘模式:外部輸入腳(TIx)
這四種情況可由右圖表示:
其中,內(nèi)部觸發(fā)輸入口1~4除了ITR1/ITR2/ITR3/ITR4之外還有一種情況:用一個定時器作為另一個定時器的分頻器。
外部捕獲比較引腳有兩種,分別是:
引腳1:TI1FP1或TI1F_ED
引腳2:TI2FP2
c.時基單元
時基單元就是定時器框圖的第二部分,它包括三個寄存器,分別是:計數(shù)器寄存器(TIMx_CNT)、預(yù)分頻器寄存器(TIMx_PSC)和自動裝載寄存器(TIMx_ARR)。對這三個寄存器的介紹如下:
計數(shù)器寄存器(TIMx_CNT)
向上計數(shù)、向下計數(shù)或者中心對齊計數(shù);
計數(shù)器寄存器(TIMx_CNT)
可將時鐘頻率按1到65535之間的任意值進行分頻,可在運行時改變其設(shè)置值;
自動裝載寄存器(TIMx_ARR)
如果TIMx_CR1寄存器中的ARPE位為0,ARR寄存器的內(nèi)容將直接寫入影子寄存器;如果ARPE為1,ARR寄存器的那日同將在每次的更新時間UEV發(fā)生時,傳送到影子寄存器;
如果TIM1_CR1中的UDIS位為0,當(dāng)計數(shù)器產(chǎn)生溢出條件時,產(chǎn)生更新事件。
d.輸入捕獲通道
IC1、2和IC3、4可以分別通過軟件設(shè)置將其映射到TI1、TI2和TI3、TI4;
4個16位捕捉比較寄存器可以編程用于存放檢測到對應(yīng)的每一次輸入捕捉時計數(shù)器的值;
當(dāng)產(chǎn)生一次捕捉,相應(yīng)的CCxIF標(biāo)志位被置1;同時如果中斷或DMA請求使能,則產(chǎn)生中斷或DMA請求。
如果當(dāng)CCxIF標(biāo)志位已經(jīng)為1,當(dāng)又產(chǎn)生一個捕捉,則捕捉溢出標(biāo)志位CCxOF將被置1。
v
e.輸出比較通道(PWM)
PWM模式運行產(chǎn)生:
定時器2、3和4可以產(chǎn)生4獨立的信號
頻率和占空比可以進行如下設(shè)定:
一個自動重載寄存器用于設(shè)定PWM的周期;
每個PWM通道有一個捕捉比較寄存器用于設(shè)定占空時間。
例如:產(chǎn)生一個40KHz的PWM信號:在定時器2的時鐘為72MHz下,占空比為50% :
預(yù)分頻寄存器設(shè)置為0 (計數(shù)器的時鐘為TIM1CLK/(O+1)),自動重載寄存器設(shè)為 1799,CCRx寄存器設(shè)為899。
兩種可設(shè)置PWM模式:
邊沿對齊模式
中心對齊模式
二、定時器中斷應(yīng)用
1.內(nèi)部時鐘選擇
除非APB1的分頻系數(shù)是1,否則通用定時器的時鐘等于APB1時鐘的2倍。
默認調(diào)用SystemInit函數(shù)情況下:
SYSCLK=72M
AHB時鐘=72M
APB1時鐘=36M
所以APB1的分頻系數(shù)=AHB/APB1時鐘=2
所以,通用定時器時鐘CK_INT=2*36M=72M
2.計數(shù)器模式
向下計數(shù)模式:(時鐘分頻因子=1)
- 向下計數(shù)模式:(時鐘分頻因子=1)
中央對齊計數(shù)模式:(時鐘分頻因子=1 ARR=6)
** 3.定時器中斷實驗相關(guān)寄存器**
- 計數(shù)器當(dāng)前值寄存器CNT
- 預(yù)分頻寄存器TIMx_PSC
- 自動重裝載寄存器(TIMx_ARR)
- 控制寄存器1(TIMx_CR1)
- DMA中斷使能寄存器(TIMx_DIER)
-
微控制器
+關(guān)注
關(guān)注
48文章
7456瀏覽量
150858 -
定時器
+關(guān)注
關(guān)注
23文章
3232瀏覽量
114331 -
GPIO
+關(guān)注
關(guān)注
16文章
1189瀏覽量
51837
發(fā)布評論請先 登錄
相關(guān)推薦
評論