Stm32高級定時器(一)
1 定時器的用途
2 高級定時器框圖
3 時基單元
4 通道
1 定時器的用途
- 已知一個波形求另一個未知波形(信號長度和占空比)
- 已知波形的信號長度和占空比產生一個相應的波形
- 增量正交編碼器驅動電機獲得動態信息(速度、加速度)
- 測量輸入信號的脈沖寬度(輸入捕獲)
- 產生輸出波形(輸出比較、PWM、嵌入死區時間的互補PWM等)
- ……
我們知道,當我們需要測量一段直線的長度時,我們需要一把直尺,根據直尺上的刻度讀出直線的長度,定時器也相當於直尺能夠測量和產生特定的波形。
比較項 |
定時器 |
直尺 |
最小刻度 |
CNT頻率 |
1mm/1cm |
測量給定單元 |
輸入捕獲(PWM捕獲) |
長度測量 |
產生單元 |
輸出比較(PWM輸出) |
划線 |
2 高級定時器框圖
定時器以時基單元位核心,輸入捕獲、輸出比較和剎車功能等所有的功能運行都圍繞時基單元的計數器進行。”驅動動力”指時基單元的驅動來源,主要分內外時鍾。
3 時基單元
3.1 主要寄存器
計數器寄存器(TIMx_CNT)
預分頻器寄存器(TIMx_PSC)
自動裝載寄存器(TIMx_ARR)
重復次數寄存器(TIMx_RCR)
工作流程:
內部或外部驅動時鍾CK_PSC驅動預分頻器PSC計數分頻,產生CK_CNT驅動計數器CNT計數。自動重裝載寄存器在發生更新事件時將值傳到計數器CNT中作為初始計數值,REP寄存器則控制CNT溢出次數,當重復次數計數器從REP寄存器的數值遞減至0是計數器CNT停止計數。
3.2 影子寄存器
有陰影的寄存器,表示在物理上這個寄存器對應2個寄存器,一個是程序員可以寫入或讀出的寄存器,稱為preload register(預裝載寄存器),另一個是程序員看不見的、但在操作中真正起作用的寄存器,稱為shadow register(影子寄存器);
3.3 計數模式
向上計數模式:
在向上計數模式中,計數器從0計數到自動加載值(TIMx_ARR計數器的內容),然后重新從0開始計數並且產生一個計數器溢出事件。
向下計數模式:
在向下模式中,計數器從自動裝入的值(TIMx_ARR計數器的值)開始向下計數到0,然后從自動裝入的值重新開始並且產生一個計數器向下溢出事件。
中央對齊模式:
在中央對齊模式,計數器從0開始計數到自動加載的值(TIMx_ARR寄存器)-1,產生一個計數器溢出事件,然后向下計數到1並且產生一個計數器下溢事件;然后再從0開始重新計數。
3.4重復計數器功能
如果使用了重復計數器功能,在向上計數達到設置的重復計數次數(TIMx_RCR)時,產生更新事件(UEV);否則每次計數器溢出時才產生更新事件。
4 通道
4.1 時鍾選擇
● 內部時鍾(CK_INT)
● 外部時鍾模式1:外部輸入引腳
要配置向上計數器在T12輸入端的上升沿計數,使用下列步驟:
1. 配置TIMx_CCMR1寄存器CC2S=01,配置通道2檢測TI2輸入的上升沿。
2. 配置TIMx_CCMR1 寄存器的 IC2F[3:0],選擇輸入濾波器帶寬(如果不需要濾波器,保持 IC2F=0000)
3. 配置TIMx_CCER寄存器的CC2P=0,選定上升沿極性
4. 配置TIMx_SMCR寄存器的SMS=111,選擇定時器外部時鍾模式1
5. 配置TIMx_SMCR寄存器中的TS=110,選定TI2作為觸發輸入源
6. 設置TIMx_CR1寄存器的CEN=1,啟動計數器
● 外部時鍾模式2:外部觸發輸入ETR
選定此模式的方法為:令TIMx_SMCR寄存器中的ECE=1
計數器能夠在外部觸發ETR的每一個上升沿或下降沿計數。
要配置在ETR下每2個上升沿計數一次的向上計數步驟:
1. 本例中不需要濾波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000
2. 設置預分頻器,置TIMx_SMCR寄存器中的ETPS[1:0]=01
3. 選擇ETR的上升沿檢測,置TIMx_SMCR寄存器中的ETP=0
4. 開啟外部時鍾模式2,寫TIMx_SMCR寄存器中的ECE=1
5. 啟動計數器,寫TIMx_CR1寄存器中的CEN=1
注:設置ECE位與選擇外部時鍾模式1並將TRGI連到ETRF ( SMS=111和TS=111 ) 具有相同功效。
● 內部觸發輸入(ITRx)
4.2 輸入捕獲通道
當觸發捕獲時,計數器CNT的值傳到捕獲寄存器中。
配置在TI1輸入的上升沿時捕獲計數器的值到TIMx_CCR1寄存器中:
選擇有效輸入端:TIMx_CCR1必須連接到TI1輸入,所以寫入TIMx_CCR1寄存器中的CC1S=01,一旦CC1S不為00時,通道被配置為輸入,並且TIMx_CCR1寄存器變為只讀。
根據輸入信號的特點,配置輸入濾波器為所需的帶寬(即輸入為TIx時,輸入濾波器控制位是 TIMx_CCMRx寄存器中的ICxF位)。假設輸入信號在最多5個時鍾周期的時間內抖動,我們須配置濾波器的帶寬長於5個時鍾周期;因此我們可以(以fDTS頻率)連續采樣8次,以確認在TI1上一次真實的邊沿變換,即在TIMx_CCMR1寄存器中寫入IC1F=0011。
選擇TI1通道的有效轉換邊沿,在TIMx_CCER寄存器中寫入CC1P=0(上升沿)。
配置輸入預分頻器。在本例中,我們希望捕獲發生在每一個有效的電平轉換時刻,因此預分頻器被禁止(寫TIMx_CCMR1寄存器的IC1PS=00)。
設置TIMx_CCER寄存器的CC1E=1,允許捕獲計數器的值到捕獲寄存器中。
如果需要,通過設置TIMx_DIER寄存器中的CC1IE位允許相關中斷請求,通過設置TIMx_DIER寄存器中的CC1DE位允許DMA請求。
4.3 輸出比較通道
4.4 剎車通道