原文地址:
http://blog.sina.com.cn/s/blog_49cb42490100s6ud.html
http://www.cnblogs.com/daqiang/archive/2011/12/04/2275646.html
http://www.hb6.org/M/stm32-note-timer-interrupt.html
1.STM32的Timer簡介
STM32中一共有11個定時器,其中2個高級控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的SysTick,看門狗定時器以後再詳細研究。今天主要是研究剩下的8個定時器。
定時器 |
計數器分辨率 |
計數器類型 |
預分頻係數 |
產生DMA請求 |
捕獲/比較通道 |
互補輸出 |
TIM1 TIM8 |
16位 |
向上,向下,向上/向下 |
1-65536之間的任意數 |
可以 |
4 |
有 |
TIM2 TIM3 TIM4 TIM5 |
16位 |
向上,向下,向上/向下 |
1-65536之間的任意數 |
可以 |
4 |
沒有 |
TIM6 TIM7 |
16位 |
向上 |
1-65536之間的任意數 |
可以 |
0 |
沒有 |
其中TIM1和TIM8是能夠產生3對PWM互補輸出的高級定時器,常用於三相電機的驅動,時鐘由APB2的輸出產生。TIM2-TIM5是普通定時器,TIM6和TIM7是基本定時器,其時鐘由APB1輸出產生。由於STM32的TIMER功能太複雜了,所以只能一點一點的學習。因此今天就從最簡單的開始學習起,也就是TIM2-TIM5普通定時器的定時功能。
2.時鐘來源
名爲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的時鐘頻率。能夠使用更高的時鐘頻率,無疑提高了定時器的分辨率,這也正是設計這個倍頻器的初衷。
3.普通定時器中斷