STM32通用定時器配置

2021-08-21 09:13:15 字數 2720 閱讀 8683

stm32通用定時器配置

一、stm32

通用定時器原理                        

stm32 

系列的cpu

,有多達8

個定時器,其中tim1

和tim8

是能夠產生三對pwm

互補輸出的高階定時器,常用於三相電機的驅動,它們的時鐘由apb2

的輸出產生。其它6

個為普通定時器,時鐘由apb1

的輸出產生。

下圖是stm32參考手冊上時鐘分配圖中,有關定時器時鐘部分的截圖:

從圖中可以看出,定時器的時鐘不是直接來自apb1

或apb2

,而是來自於輸入為apb1

或apb2

的乙個倍頻器,圖中的藍色部分。

下面以通用定時器2

的時鐘說明這個倍頻器的作用:當apb1

的預分頻係數為1

時,這個倍頻器不起作用,定時器的時鐘頻率等於apb1

的頻率;當apb1

的預分頻係數為其它數值(

即預分頻係數為2

、4、8

或16)

時,這個倍頻器起作用,定時器的時鐘頻率等於apb1

的頻率兩倍。

可能有同學還是有點不理解,ok

,我們舉乙個例子說明。假定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

提供時鐘,而且還要為其它外設提供時鐘;設定這個倍頻器可以在保證其它外設使用較低時鐘頻率時。

stm32

外設使用者手冊,如圖:

再舉個例子:當ahb=72mhz

時,apb1

的預分頻係數必須大於

2,因為

apb1

的最大頻率只能為

36mhz

。如果apb1

的預分頻係數

=2,則因為這個倍頻器,

tim2~7

仍然能夠得到

72mhz

的時鐘頻率。能夠使用更高的時鐘頻率,無疑提高了定時器的解析度,這也正是設計這個倍頻器的初衷。

timer_cfg(); //定時器的配置

//開啟定時器2

tim_cmd(tim2,enable);

voidtimer_config(void)

我們每個語句都來解釋一下。首先我們想使用定時器,就必須使能定時器的時鐘,這就是函式

rcc_apb1periphclockcmd();

,通過它開啟 

rcc_apb1periph_tim2

。tim_deinit(tim2);

該函式主要用於復位

tim2

定時器,使之進入初始狀態。

然後我們對自動重裝載暫存器賦值,

tim_period

的大小實際上表示的是需要經過

tim_period

次計數後才會發生一次更新或中斷。接下來需要設定時鐘預分頻數

tim_prescaler

,這裡有乙個公式,我們舉例來說明:例如

時鐘頻率

=72mhz/(

時鐘預分頻

+1)

。說明當前設定的這個

tim_prescaler

,直接決定定時器的時鐘頻率。通俗點說,就是一秒鐘能計數多少次。比如算出來的時鐘頻率是

2000

,也就是

一秒鐘會計數

2000

次,而此時如果

tim_period

設定為4000

,即4000

次計數後就會中斷一次。由於時鐘頻率是一秒鐘計數

2000

次,因此只要

2秒鐘,就會中斷一次。

再往後的**,還有乙個需要注意的,

tim_timebasestructure.tim_countermode=tim_countermode_up;

就是我們一般採用向上計數模式,即每次計數就會加

1,直到暫存器溢位發生中斷為止。最後別忘了,需要使能定時器!!

發生中斷時間

=(tim_prescaler+1)* (tim_period+1)/flk

用上述公式可算出:發生中斷時間 (

2000-1+1)*

(36000-1+1)/72000000=1

秒步驟五:編寫中斷服務程式。同樣需要注意的,一進入中斷服務程式,第一步要做的,就是清除掉中斷標誌位。由於我們使用的是向上溢位模式,因此使用

的函式應該是:

tim_clearitpendingbit(tim2,tim_flag_update);

stm32通用定時器

stm32的定時器是個強大的模組,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做pwm輸出或者輸入捕獲功能。時鐘源問題 名為timx的有八個,其中tim1和tim8掛在apb2匯流排上,而tim2 tim7則掛在 apb1匯流排上。其中tim1 tim8稱為高階控制定時器 adva...

STM32 通用定時器基本定時功能

1.stm32的timer簡介 stm32中一共有11個定時器,其中2個高階控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的systick,看門狗定時器以後再詳細研究。今天主要是研究剩下的8個定時器。定時器計數器解析度 計數器型...

STM32 通用定時器基本定時功能

1.stm32的timer簡介 stm32中一共有11個定時器,其中2個高階控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的systick,看門狗定時器以後再詳細研究。今天主要是研究剩下的8個定時器。定時器計數器解析度 計數器型...