最近做項目,用到定時器,索性重新學習一下,以前只是用于簡單的pwm生成和中斷處理,對定時器根本就沒有進行深入研究,今天借此機會,重新學習一下高級定時器,只要高級定時器學會了,基本定時器也就沒什么問題了。總體上來說,stm32的定時器,功能非常多。看了一下,大概有20個功能。我就按照數據手冊,一一的重新學習一下。
首先是框圖,娘的,看著就眼暈
1、時基:包含計數器寄存器(TIMx_CNT) 預分頻器寄存器 (TIMx_PSC) 自動裝載寄存器 (TIMx_ARR) 重復次數寄存器 (TIMx_RCR)
計數類似于51單片機中的TH1和TL1。預分頻器就是將輸入時鐘進行降低。重復寄存器類似與51中的自動裝載模式中的TH寄存器。最后一個寄存器與產生更新時間UEV與影子寄存器有關。UEV時間更新,對于預分頻寄存器來說,他可以看成兩個寄存器,一個叫可讀寫的,一個叫緩沖的,預分頻是根據緩沖為標準的,設置的時候,將數據寫入可讀寫,然后等待UEV時間的到來,在將可讀寫的寫入緩沖來更新。這就是UEV的作用。影子寄存器主要是防止多通道時序錯誤的問題。
有興趣的可以看一下 http://blog.163.com/liuyunqian@yeah/blog/static/70395843201043094819579/
2、計數器模式:向上,向下,上下計數
向上計數從0開始,到TIMx_APR,產生溢出,溢出時產生UEV,然后更新影子寄存器。若設置了TIMx_RCR,則到TIMx_RCR時即產生UEV。否則只能到溢出時產生UEV。
向下計數從TIMx_APR遞減到0,產生溢出,對于UEV和上面類似
中央對齊模式:從0遞增到TIMx_APR-1,產生溢出,然后在遞減到0,產生下溢。有1、2、3,三種模式,其中2、3和UIF有關
3、重復計數器:產生UEV。對PWM和輸入捕獲很有用處。
4、時鐘源:1、內部時鐘。
2、外部時鐘模式1:外部輸入引腳 外部時鐘模式2:外部觸發輸入ETR
3、內部觸發輸入(ITRx):使用一個定時器作為另一個定時器的預分頻器。如可以配置一個定時器Timer1而作為另一個定時器Timer2的預分頻器。
5、捕獲比較通道:主要多用于計頻和pwm輸出。t1和t8高級定時器通道中含有死區控制,使用時可設置。
對于時間測量:一個方法是測頻率,另一個是測周期,測頻率在限定的時間內(如1秒鐘)檢測脈沖的個數,測周期測試限定的脈沖個數之間的時間。
考慮的問題:
(1)、系統時鐘:頻率與精度,(2)、計數器位數,一般為16位,可以產生的限定時間越長,或在限定時間里記錄的脈沖個數越多。(3)、被測頻率的范圍,低頻檢測兩個脈沖時間,高頻在一定時間內檢測脈沖個數。(4)、中斷響應與軟件算法。
6、輸入捕獲模式:(1)配置TIMx的CCRx為輸入模式,即TIMx->CCMRx的0和1位為 "0x01" "0x02" 或"0x03"。(2)配置輸入濾波器,即TIMx->CCMRx的4-7位或15-12位。(3)配置通道的有效轉換邊沿,即TIMx->CCER的"1","5","9","13"位,0為上升沿,1為下降沿。(4)配置預分頻器,TIMx->CCMRx的第2-3位或第11-10位。(5)設置TIMx->CCER的"0","4","8","12"位(6)設置TIMx->DIER的中斷允許位。
對于輸入捕獲,應該是在中斷中進行處理。 可以計算高低電平的時間,同時也可以針對紅外解碼進行編程配置。
當檢測到捕獲后進入中斷開始處理。也可進入dma,或讀取CCRx。
7,PWM輸入:對于PWM輸入,主要是測頻率與測占空比。配置時,把1個引腳觸發映射到兩個CCRx中去,同時,將兩個CCR配置成為邊沿極性相反輸入,這樣的話,可以一個用來計頻率,另一用來計占空比。當頻率邊沿跳變時,記錄周期與占空比后,計數器清零,然后計算具體數據。
8,強置輸出模式:通過設置CCMR寄存器,可以使OCxREF強制為高或低一種狀態。且計數器和比較器仍在工作,并產生中斷或DMA。
9,輸出比較模式
圖片
10,PWM模式:TIMx_ARR決定周期周期,CCRx決定占空比。cnt計數到CCRx時,跳變電平。4路的占空比,可以獨立設置。
11,單脈沖模式:從模式啟動,在 輸出比較 或者 PWM 下產生波形。
12,在外部事件時清除OCxREF信號,外加比較器,可用于控制電流。例|:外部觸發預分頻器必須處于關閉,必須禁止外部時鐘模式2:TIMx_SMCR寄存器中的ECE=’0’。外部觸發極性(ETP)和外部觸發濾波器(ETF)可以根據需要配置。
13,編碼器接口模式:用于編碼器的脈沖和相位測量,在第一通道和第二通道中設置。對于編碼器而言,有A、B兩相相差90度,可通過比較A相在前還是B相在前,以判別編碼器的正轉與反轉,通過零位脈沖,可獲得編碼器的零位參考位。并且可以測量兩個編碼器事件的間隔,獲得動態的信息(速度,加速度,減速度)等。
我們假定配置如下: ● CC1S=’01’ (TIMx_CCMR1寄存器,IC1FP1映射到TI1) ● CC2S=’01’ (TIMx_CCMR2寄存器,IC2FP2映射到TI2) ● CC1P=’0’ (TIMx_CCER寄存器,IC1FP1不反相,IC1FP1=TI1) ● CC2P=’0’ (TIMx_CCER寄存器,IC2FP2不反相,IC2FP2=TI2) ● SMS=’011’ (TIMx_SMCR寄存器,所有的輸入均在上升沿和下降沿有效). ● CEN=’1’ (TIMx_CR1寄存器,計數器使能)
14,定時器輸入異或功能:TIMx_CR2寄存器中的TI1S位,允許通道1的輸入濾波器連接到一個異或門的輸出端,異或門的3個輸入端為TIMx_CH1、TIMx_CH2和TIMx_CH3。 13.3.18異或輸出能夠被用于所有定時器的輸入功能,如觸發或輸入捕獲。下節給出了此特性用于連接霍爾傳感器的例子。
15,霍爾傳感器:定時器輸入異或的應用,用于電機的測速。他可以映射到通用定時器,T2-T5,用T1或T8來控制電機。
16,TIMx定時器和外部觸發的同步:TIMx定時器能夠在多種模式下和一個外部的觸發同步:復位模式、門控模式和觸發模式。
復位模式:能在外部觸發時,使計數器復位。
門控模式:按照選中的輸入端電平使能計數器。
觸發模式:輸入端上選中的事件使能計數器
外部時鐘模式2可以與另一種從模式(外部時鐘模式1和編碼器模式除外)一起使用。這時,ETR信號被用作外部時鐘的輸入,在復位模式、門控模式或觸發模式可以選擇另一個輸入作為觸發輸入。不建議使用TIMx_SMCR寄存器的TS位選擇ETR作為TRGI。
17:定時器同步,使一個定時器作為另一個定時器的預分頻器。使用一個定時器使能另一個定時器(如:定時器2的使能由定時器1的輸出比較控制)使用一個定時器去啟動另一個定時器。使用一個外部觸發同步地啟動2個定時器。
18:調試模式,具體就不去討論了。
總體上來說,STM32的定時器功能非常多,也非常復雜,加入了電機控制的一些功能。初步的大概也就這意思。至于如何使用,還要在項目中細細研究。