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個定時器。定時器計數器解析度 計數器型...