TIM—基本定時器


定時器分類

      STM32F1 系列中,除了互聯型的產品,共有 8 個定時器,分為基本定時器,通用定時器和高級定時器

      基本定時器 TIM6 和 TIM7 是一個 16 位的只能向上計數的定時器,只能定時,沒有外部 IO。

      通用定時器 TIM2/3/4/5 是一個 16 位的可以向上/下計數的定時器,可以定時,可以輸出比較,可以輸入捕捉,每個定時器有四個外部 IO。

      高級定時器 TIM1/8 是一個 16 位的可以向上/下計數的定時器,可以定時,可以輸出比較,可以輸入捕捉,還可以有三相電機互補輸出信號,每個定時器有 8 個外部 IO。更加具體的分類詳情見圖 。

1

基本定時器功能框圖講解

     基本定時器的核心是時基,不僅基本定時器有,通用定時器和高級定時器也有。學習定時器時,我們先從簡單的基本定時器學起,到了后面的通用和高級定時器的學習中,我們直接跳過時基部分的講解即可。基本定時器的功能框圖見圖 .

2

1. 時鍾源

      定時器時鍾 TIMxCLK,即內部時鍾 CK_INT,經 APB1 預分頻器后分頻提供,如果 APB1 預分頻系數等於 1,則頻率不變,否則頻率乘以 2,庫函數中 APB1 預分頻的系數是 2,即 PCLK1=36M,所以定時器時鍾 TIMxCLK=36*2=72M。

2. 計數器時鍾

      定時器時鍾經過 PSC 預分頻器之后,即 CK_CNT,用來驅動計數器計數。PSC 是一個 16 位的預分頻器,可以對定時器時鍾 TIMxCLK 進行 1~65536 之間的任何一個數進行分頻。具體計算方式為:CK_CNT=TIMxCLK/(PSC+1)。

3. 計數器

     計數器 CNT 是一個 16 位的計數器,只能往上計數,最大計數值為 65535。當計數達到自動重裝載寄存器的時候產生更新事件,並清零從頭開始計數。

4. 自動重裝載寄存器

      自動重裝載寄存器 ARR 是一個 16 位的寄存器,這里面裝着計數器能計數的最大數值。當計數到這個值的時候,如果使能了中斷的話,定時器就產生溢出中斷。

5. 定時時間的計算

      定時器的定時時間等於計數器的中斷周期乘以中斷的次數。計數器在 CK_CNT 的驅動下,計一個數的時間則是 CK_CLK 的倒數,等於:1/(TIMxCLK/(PSC+1)),產生一次中斷的時間則等於:1/(CK_CLK * ARR)。如果在中斷服務程序里面設置一個變量 time,用來 記 錄 中 斷的 次 數,那 么 就 可 以計 算 出我們 需 要 的 定時 時 間等於 : 1/CK_CLK * (ARR+1)*time。

定時器初始化結構體詳解

      在標准庫函數頭文件 stm32f4xx_tim.h 中對定時器外設建立了四個初始化結構體,基本定時器只用到其中一個即 TIM_TimeBaseInitTypeDef,具體的見代碼清單,其他三個我們在高級定時器章節講解。

 typedef struct {
 uint16_t TIM_Prescaler; // 預分頻器
 uint16_t TIM_CounterMode; // 計數模式
 uint32_t TIM_Period; // 定時器周期
 uint16_t TIM_ClockDivision; // 時鍾分頻
 uint8_t TIM_RepetitionCounter; // 重復計算器
 } TIM_TimeBaseInitTypeDef;

      (1) TIM_Prescaler:定時器預分頻器設置,時鍾源經該預分頻器才是定時器時鍾,它設定 TIMx_PSC 寄存器的值。可設置范圍為 0 至 65535,實現 1 至 65536 分頻。

      (2) TIM_CounterMode:定時器計數方式,可是在為向上計數、向下計數以及三種中心對齊模式。基本定時器只能是向上計數,即 TIMx_CNT 只能從 0 開始遞增,並且無需初始化。

      (3) TIM_Period:定時器周期,實際就是設定自動重載寄存器的值,在事件生成時更新到影子寄存器。可設置范圍為 0 至 65535。

       (4) TIM_ClockDivision:時鍾分頻,設置定時器時鍾 CK_INT 頻率與數字濾波器采樣時鍾頻率分頻比,基本定時器沒有此功能,不用設置。

      (5) TIM_RepetitionCounter:重復計數器,屬於高級控制寄存器專用寄存器位,利用它可以非常容易控制輸出 PWM 的個數。這里不用設置。雖然定時器基本初始化結構體有 5 個成員,但對於基本定時器只需設置其中兩個就可以,想想使用基本定時器就是簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM