關於stm32定時器定時周期的計算


1.TIMx(1-8),在庫設置默認的情況下,都是72M的時鍾;

名為TIMx的有八個,其中TIM1和TIM8掛在APB2總線上,而TIM2-TIM7則掛在

APB1總線上。其中TIM1&TIM8稱為高級控制定時器(advanced control timer).他們所在的APB2總線也比APB1總線要好。APB2可以工作在72MHz下,而APB1最大是36MHz。

 

 

定時器的時鍾不是直接來自APB1或APB2,而是來自於輸入為APB1或APB2的一個倍頻器。

下面以定時器2~7的時鍾說明這個倍頻器的作用:當APB1的預分頻系數為1時,這個倍頻器不起作用,定時器的時鍾頻率等於APB1的頻率;當APB1的預分頻系數為其它數值(即預分頻系數為2、4、8或16)時,這個倍頻器起作用,定時器的時鍾頻率等於APB1的頻率兩倍。

假定AHB=36MHz,因為APB1允許的最大頻率為36MHz,所以APB1的預分頻系數可以取任意數值;當預分頻系數=1時,APB1=36MHz,TIM2~7的時鍾頻率=36MHz(倍頻器不起作用);當預分頻系數=2時,APB1=18MHz,在倍頻器的作用下,TIM2~7的時鍾頻率=36MHz。

有人會問,既然需要TIM2~7的時鍾頻率=36MHz,為什么不直接取APB1的預分頻系數=1?答案是:APB1不但要為TIM2~7提供時鍾,而且還要為其它外設提供時鍾;設置這個倍頻器可以在保證其它外設使用較低時鍾頻率時,TIM2~7仍能得到較高的時鍾頻率。

再舉個例子:當AHB=72MHz時,APB1的預分頻系數必須大於2,因為APB1的最大頻率只能為36MHz。如果APB1的預分頻系數=2,則因為這個倍頻器,TIM2~7仍然能夠得到72MHz的時鍾頻率。能夠使用更高的時鍾頻率,無疑提高了定時器的分辨率,這也正是設計這個倍頻器的初衷

 

對定時器周期公式的理解:

T=(arr+1)*(PSC+1)/Tck  其中TCK為時鍾頻率,PSC為時鍾預分頻系數,arr為自動重裝載值。

f=Tck/(psc+1)*(arr+1)

Tck/(psc+1)即為時鍾頻率,1/f為機器周期,乘以(arr+1)即可得出定時器周期。

例子:TCK=72MHZ,psc=71.時鍾周期=1us.(arr+1)值為多少,定時器周期就為多少毫秒。

例子:

    TIM_TimeBaseStructure.TIM_Period = 5;        // 2.5ms     

    TIM_TimeBaseStructure.TIM_Prescaler = 36000;    // 分頻36000       

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  // 時鍾分頻  

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //計數方向向上計數

    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

1.定時器2時鍾頻率為72M/36000=2KZ。

2.最大自動重裝載值為5,則每隔5*1/2=2.5ms產生一次定時器中斷。

——————————————————————————————————————————————————————————

原文鏈接:http://news.eeworld.com.cn/mcu/2019/ic-news010242769.html


免責聲明!

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



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