天天看點

Stm32進階定時器(一)

stm32進階定時了解

Stm32進階定時器(一)

1 定時器的用途

2 進階定時器框圖

3 時基單元

4 通道

  • 已知一個波形求另一個未知波形(信号長度和占空比)
  • 已知波形的信号長度和占空比産生一個相應的波形
  • 增量正交編碼器驅動電機獲得動态資訊(速度、加速度)
  • 測量輸入信号的脈沖寬度(輸入捕獲)
  • 産生輸出波形(輸出比較、PWM、嵌入死區時間的互補PWM等)
  • ……

我們知道,當我們需要測量一段直線的長度時,我們需要一把直尺,根據直尺上的刻度讀出直線的長度,定時器也相當于直尺能夠測量和産生特定的波形。

比較項 定時器 直尺
最小刻度 CNT頻率 1mm/1cm
測量給定單元 輸入捕獲(PWM捕獲) 長度測量
産生單元 輸出比較(PWM輸出) 劃線

Stm32進階定時器(一)
定時器以時基單元位核心,輸入捕獲、輸出比較和刹車功能等所有的功能運作都圍繞時基單元的計數器進行。”驅動動力”指時基單元的驅動來源,主要分内外時鐘。

3.1 主要寄存器

計數器寄存器(TIMx_CNT)

預分頻器寄存器(TIMx_PSC)

自動裝載寄存器(TIMx_ARR)

重複次數寄存器(TIMx_RCR)

Stm32進階定時器(一)

工作流程:

   内部或外部驅動時鐘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.1 時鐘選擇

● 内部時鐘(CK_INT)

Stm32進階定時器(一)

● 外部時鐘模式1:外部輸入引腳

Stm32進階定時器(一)
Stm32進階定時器(一)

要配置向上計數器在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

Stm32進階定時器(一)
Stm32進階定時器(一)

標明此模式的方法為:令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)

Stm32進階定時器(一)

4.2 輸入捕獲通道

Stm32進階定時器(一)
Stm32進階定時器(一)
當觸發捕獲時,計數器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 輸出比較通道

Stm32進階定時器(一)
Stm32進階定時器(一)

4.4 刹車通道

Stm32進階定時器(一)

形而上者謂之道 形而下者謂之器。

繼續閱讀