時基單元
可編程高級控制定時器的主要部分是一個16位計數器和與其相關的自動裝載寄存器。這個計數器可以向上計數、向下計數或者向上向下雙向計數。此計數器時鍾由預分頻器分頻得到。 計數器、自動裝載寄存器和預分頻器寄存器可以由軟件讀寫,即使計數器還在運行讀寫仍然有效。 時基單元包含:
● 計數器寄存器(TIMx_CNT)
● 預分頻器寄存器 (TIMx_PSC)
● 自動裝載寄存器 (TIMx_ARR)
● 重復次數寄存器 (TIMx_RCR)
自動裝載寄存器是預先裝載的,寫或讀自動重裝載寄存器將訪問預裝載寄存器。根據在TIMx_CR1寄存器中的自動裝載預裝載使能位(ARPE)的設置,預裝載寄存器的內容被立即或在每次的更新事件UEV時傳送到影子寄存器。當計數器達到溢出條件(向下計數時的下溢條件)並當TIMx_CR1寄存器中的UDIS位等於0時,產生更新事件。更新事件也可以由軟件產生。隨后會詳細描述每一種配置下更新事件的產生。 計數器由預分頻器的時鍾輸出CK_CNT驅動,僅當設置了計數器TIMx_CR1寄存器中的計數器使能位(CEN)時,CK_CNT才有效。(更多有關使能計數器的細節,請參見控制器的從模式描述)。 注意,在設置了TIMx_CR寄存器的CEN位的一個時鍾周期后,計數器開始計數。 預分頻器描述預分頻器可以將計數器的時鍾頻率按1到65536之間的任意值分頻。它是基於一個(在TIMx_PSC寄存器中的)16位寄存器控制的16位計數器。因為這個控制寄存器帶有緩沖器,它能夠在運行時被改變。新的預分頻器的參數在下一次更新事件到來時被采用。
當發生一個更新事件時,所有的寄存器都被更新,硬件同時(依據URS位)設置更新標志位(TIMx_SR寄存器中的UIF位)。
● 重復計數器被重新加載為TIMx_RCR寄存器的內容。
● 自動裝載影子寄存器被重新置入預裝載寄存器的值(TIMx_ARR)。
● 預分頻器的緩沖區被置入預裝載寄存器的值(TIMx_PSC寄存器的內容)。
那么計數時間 = (1+TIM_Prescaler )/72M)*CNT ,即計數脈沖時間周期*脈沖時間次數。
針對中斷,則會設置TIM_TimeBaseStructure.TIM_Period,該值在計數達后會產生一次溢出中斷
那么溢出中斷的時間計算為:((1+TIM_Prescaler )/72M)*(1+TIM_Period )。
使用定時器,有計數模式的 則是按照取出定時器計數值計算。(特別注意:配置的TIM_Period不能小於要達到的CNT計數值,因為定時器在達到TIM_Period值后重裝計數器值,那么則無法用計數形式得到時間值)
有使用中斷的,則是以中斷默認值計算。