<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32定時(shí)器詳解 -----影子寄存器,預裝寄存器

STM32定時(shí)器詳解 -----影子寄存器,預裝寄存器

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏
定時(shí)器
在STM32F10xxx系列的32位MCU上,定時(shí)器資源十分豐富,包括高級控制定時(shí)器,通用定時(shí)器和基本定時(shí)器。此外,還有能夠實(shí)現定時(shí)功能的系統滴答定時(shí)器,實(shí)時(shí)時(shí)鐘以及看門(mén)狗。關(guān)于這些定時(shí)器的介紹,占據了STM32F10xxx參考手冊1/5的篇幅,可見(jiàn)其功能的強大。
在低容量和中容量的STM32F103xx產(chǎn)品,以及互聯(lián)型產(chǎn)品STM32F105xx和STM32F107xx中,只有一個(gè)高級控制定時(shí)器TIM1。而在高容量和超大容量的STM32F103xx產(chǎn)品中,有兩個(gè)高級控制定時(shí)器TIM1和TIM8。
在所有STM32F10xxx系列產(chǎn)品中,都有通用定時(shí)器TIM2~TIM5,除非另有說(shuō)明。除此之外,在超大容量產(chǎn)品中,還有通用定時(shí)器TIM9~TIM14。
在高容量和超大容量的STM32F101xx和STM32F103xx產(chǎn)品,以及互聯(lián)型產(chǎn)品STM32F105xx和STM32F107xx中,有兩個(gè)基本定時(shí)器TIM6和TIM7。
其中,高級控制定時(shí)器的功能最為強大,可以實(shí)現所有其他定時(shí)器的所有功能。TrailBreaker開(kāi)發(fā)板使用的是高容量的STM32F103ZE,因此有兩個(gè)高級控制定時(shí)器TIM1和TIM8。下面我們就著(zhù)重介紹這兩個(gè)高級控制定時(shí)器。
TIM1和TIM8簡(jiǎn)介
高級控制定時(shí)器(TIM1和TIM8)由一個(gè)16位的自動(dòng)裝載計數器組成,它由一個(gè)可編程的預分頻器驅動(dòng)。 它適合多種用途,包含測量輸入信號的脈沖寬度(輸入捕獲),或者產(chǎn)生輸出波形(輸出比較、PWM、嵌入死區時(shí)間的互補PWM等)。 使用定時(shí)器預分頻器和RCC時(shí)鐘控制預分頻器,可以實(shí)現脈沖寬度和波形周期從幾個(gè)微秒到幾個(gè)毫秒的調節。
關(guān)于實(shí)驗中用到的LED部分原理圖和GPIO跑馬燈實(shí)驗所用到的相同,在此不再多做介紹。
TIM1和TIM8定時(shí)器的功能包括:
16位向上、向下、向上/下自動(dòng)裝載計數器
16位可編程(可以實(shí)時(shí)修改)預分頻器,計數器時(shí)鐘頻率的分頻系數為1~65535之間的任意數值
多達4個(gè)獨立通道: ─ 輸入捕獲 ─ 輸出比較 ─ PWM生成(邊緣或中間對齊模式) ─ 單脈沖模式輸出
死區時(shí)間可編程的互補輸出
使用外部信號控制定時(shí)器和定時(shí)器互聯(lián)的同步電路
允許在指定數目的計數器周期之后更新定時(shí)器寄存器的重復計數器
剎車(chē)輸入信號可以將定時(shí)器輸出信號置于復位狀態(tài)或者一個(gè)已知狀態(tài)
如下事件發(fā)生時(shí)產(chǎn)生中斷/DMA:
─ 更新:計數器向上溢出/向下溢出,計數器初始化(通過(guò)軟件或者內部/外部觸發(fā))
─ 觸發(fā)事件(計數器啟動(dòng)、停止、初始化或者由內部/外部觸發(fā)計數)
─ 輸入捕獲
─ 輸出比較
─ 剎車(chē)信號輸入
支持針對定位的增量(正交)編碼器和霍爾傳感器電路
觸發(fā)輸入作為外部時(shí)鐘或者按周期的電流管理
高級定時(shí)器框圖和時(shí)鐘簡(jiǎn)介
如框圖中的紅框所示,紅框中的部分,也是時(shí)基單元(Time-base unit),對時(shí)基單元進(jìn)行設置,就可以完成基礎的定時(shí)器的使用設置。
計數器時(shí)鐘可由下列時(shí)鐘源提供:
● 內部時(shí)鐘(CK_INT)
● 外部時(shí)鐘模式1:外部輸入引腳
● 外部時(shí)鐘模式2:外部觸發(fā)輸入ETR
● 內部觸發(fā)輸入(ITRx):使用一個(gè)定時(shí)器作為另一個(gè)定時(shí)器的預分頻器。如可以配置一個(gè)定時(shí)器Timer1而作為另一個(gè)定時(shí)器Timer2的預分頻器。詳見(jiàn)數據手冊的通用定時(shí)器部分。
內部時(shí)鐘源(CK_INT):
如果禁止了從模式控制器(SMS=000),則CEN、DIR(TIMx_CR1寄存器)和UG位(TIMx_EGR寄存器)是事實(shí)上的控制位,并且只能被軟件修改(UG位仍被自動(dòng)清除)。只要CEN位被寫(xiě)成’1’,預分頻器的時(shí)鐘就由內部時(shí)鐘CK_INT提供。 下圖顯示控制電路和向上計數器在一般模式下,不帶預分頻器時(shí)的操作。
外部時(shí)鐘源模式1
當TIMx_SMCR寄存器的SMS=111時(shí),此模式被選中。計數器可以在選定輸入端的每個(gè)上升沿或下降沿計數。 下圖為T(mén)I2外部時(shí)鐘連接例子
例如,要配置向上計數器在T12輸入端的上升沿計數,使用下列步驟:
1.配置TIMx_CCMR1寄存器CC2S=01
2.配置通道2檢測TI2輸入的上升沿
3.配置TIMx_CCMR1寄存器的IC2F[3:0],選擇輸入濾波器帶寬(如果不需要濾波器,保持IC2F=0000)
4.配置TIMx_CCER寄存器的CC2P=0,選定上升沿極性
5.配置TIMx_SMCR寄存器的SMS=111,選擇定時(shí)器外部時(shí)鐘模式1
6.配置TIMx_SMCR寄存器中的TS=110,選定TI2作為觸發(fā)輸入源
7.設置TIMx_CR1寄存器的CEN=1,使能計數器
注: 捕獲預分頻器不用作觸發(fā),所以不需要對它進(jìn)行配置
當上升沿出現在TI2,計數器計數一次,且TIF標志被設置。 在TI2的上升沿和計數器實(shí)際時(shí)鐘之間的延時(shí),取決于在TI2輸入端的重新同步電路。
下圖為外部時(shí)鐘模式1下的控制電路
外部時(shí)鐘源模式2
選定此模式的方法為:令TIMx_SMCR寄存器中的ECE=1。
計數器能夠在外部觸發(fā)ETR的每一個(gè)上升沿或下降沿計數。
下圖是外部觸發(fā)輸入的框圖
設置從模式控制寄存器的ETP位選擇選擇是用ETR還是ETR的反相來(lái)作為觸發(fā)操作
例如,要配置在ETR下每2個(gè)上升沿計數一次的向上計數器,使用下列步驟:
1.本例中不需要濾波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000
2.設置預分頻器,置TIMx_SMCR寄存器中的ETPS[1:0]=01
3.選擇ETR的上升沿檢測,置TIMx_SMCR寄存器中的ETP=0
4.開(kāi)啟外部時(shí)鐘模式2,寫(xiě)TIMx_SMCR寄存器中的ECE=1
5.啟動(dòng)計數器,寫(xiě)TIMx_CR1寄存器中的CEN=1
計數器在每2個(gè)ETR上升沿計數一次。
在ETR的上升沿和計數器實(shí)際時(shí)鐘之間的延時(shí)取決于在ETRP信號端的重新同步電路。
下圖為外部時(shí)鐘模式2下的控制電路
如圖,該圖為STM32的時(shí)鐘樹(shù),結合高級控制定時(shí)器框圖,我們可以看出,高級定時(shí)器的時(shí)鐘不是直接來(lái)自APB2,而是來(lái)自于輸入為APB2的一個(gè)倍頻器。
當APB2的預分頻系數為1時(shí),這個(gè)倍頻器不起作用,定時(shí)器的時(shí)鐘頻率等于A(yíng)PB2的頻率;當APB2的預分頻系數為其它數值(即預分頻系數為2、4、8或16)時(shí),這個(gè)分頻器起作用,定時(shí)器的時(shí)鐘頻率等于A(yíng)PB2的頻率相應倍數。
假定AHB=36MHz,因為APB2允許的最大頻率為72MHz,所以APB2的預分頻系數可以取任意數值;當預分頻系數=1時(shí),APB2=72MHz,TIM1和TIM8的時(shí)鐘頻率=72MHz(分頻器不起作用);當預分頻系數=2時(shí),APB1=36MHz,在倍頻器的作用下,TIM1和TIM8的時(shí)鐘頻率=72MHz。
有人會(huì )問(wèn),既然需要TIM1和TIM8的時(shí)鐘頻率為72MHz,為什么不直接取APB2的預分頻系數=1?答案是:APB2不但要為T(mén)IM1和TIM8提供時(shí)鐘,而且還要為其它外設提供時(shí)鐘;設置這個(gè)倍頻器可以在保證其它外設使用較低時(shí)鐘頻率時(shí),TIM1和TIM8仍能得到較高的時(shí)鐘頻率。
再舉個(gè)例子:當AHB=72MHz時(shí),APB2因為其他設備需要,時(shí)鐘為36MHZ,因為這個(gè)倍頻器,TIM1和TIM8仍然能夠得到72MHz的時(shí)鐘頻率。能夠使用更高的時(shí)鐘頻率,無(wú)疑提高了定時(shí)器的分辨率,這也正是設計這個(gè)倍頻器的初衷。
高級定時(shí)器寄存器簡(jiǎn)介
可編程高級控制定時(shí)器的主要部分是一個(gè)16位計數器和與其相關(guān)的自動(dòng)裝載寄存器。這個(gè)計數器可以向上計數、向下計數或者向上向下雙向計數。此計數器時(shí)鐘由預分頻器分頻得到。 計數器、自動(dòng)裝載寄存器和預分頻器寄存器可以由軟件讀寫(xiě),即使計數器還在運行讀寫(xiě)仍然有效。
時(shí)基單元,也就是決定了定時(shí)器的基本功能的模塊包含:
1.計數器寄存器(Counter register,簡(jiǎn)寫(xiě)為T(mén)IMx_CNT)
2.預分頻器寄存器 (Prescaler register,簡(jiǎn)寫(xiě)為T(mén)IMx_PSC)
3.自動(dòng)裝載寄存器 (Auto-reload register,簡(jiǎn)寫(xiě)為T(mén)IMx_ARR)
4.重復次數寄存器 (Repetition counter register,簡(jiǎn)寫(xiě)為T(mén)IMx_RCR)
1.影子寄存器
這張圖是高級定時(shí)器框圖的一部分,細心的人可以發(fā)現預分頻器寄存器、自動(dòng)重載寄存器和捕捉/比較寄存器下面有一個(gè)陰影,其他的寄存器有些也有陰影。
這表示在物理上這個(gè)寄存器對應2個(gè)寄存器:一個(gè)是我們可以可以寫(xiě)入或讀出的寄存器,稱(chēng)為預裝載寄存器,另一個(gè)是我們看不見(jiàn)的、無(wú)法真正對其讀寫(xiě)操作的,但在使用中真正起作用的寄存器,稱(chēng)為影子寄存器.
數據手冊介紹預裝載寄存器的內容可以隨時(shí)傳送到影子寄存器,即兩者是連通的(permanently),或者在每一次更新事件(UEV)時(shí)才把預裝載寄存器的內容傳送到影子寄存器。
原文如下:
The auto-reload register is preloaded. Writing to or reading from the auto-reload register accesses the preload register. The content of the preload register are transferred into the shadow register permanently or at each update event (UEV), depending on the auto-reload preload enable bit (ARPE) in TIMx_CR1 register. The update event is sent when the counter reaches the overflow (or underflow when downcounting) and if the UDIS bit equals 0 in the TIMx_CR1 register. It can also be generated by software. The generation of the update event is described in detailed for each configuration.
在圖中的,表示對應寄存器的影子寄存器可以在發(fā)生更新事件時(shí),被更新為它的預裝載寄存器的內容;而圖中的部分,表示對應的自動(dòng)重載寄存器可以產(chǎn)生一個(gè)更新事件(U)或更新事件中斷(UI)。
設計預裝載寄存器和影子寄存器的好處是,所有真正需要起作用的寄存器(影子寄存器)可以在同一個(gè)時(shí)間(發(fā)生更新事件時(shí))被更新為所對應的預裝載寄存器的內容,這樣可以保證多個(gè)通道的操作能夠準確地同步。如果沒(méi)有影子寄存器,軟件更新預裝載寄存器時(shí),則同時(shí)更新了真正操作的寄存器,因為軟件不可能在一個(gè)相同的時(shí)刻同時(shí)更新多個(gè)寄存器,結果造成多個(gè)通道的時(shí)序不能同步,如果再加上例如中斷等其它因素,多個(gè)通道的時(shí)序關(guān)系有可能會(huì )混亂,造成是不可預知的結果。
2.預分頻寄存器
預分頻器可以將計數器的時(shí)鐘頻率按1到65536之間的任意值分頻。它是基于一個(gè)在TIMx_PSC寄存器中的16位寄存器控制的16位計數器。因為這個(gè)控制寄存器帶有緩沖器,它能夠在運行時(shí)被改變。新的預分頻器的參數在下一次更新事件到來(lái)時(shí)被采用。
下面給出了在預分頻器運行時(shí),更改計數器參數的例子
當預分頻器的參數從1變到2時(shí),計數器的時(shí)序圖如下:
當預分頻器的參數從1變到4時(shí),計數器的時(shí)序圖如下:
預分頻寄存器各位的描述如下:
位15:0 PSC[15:0]:預分頻值
計數器的時(shí)鐘頻率(CK_CNT)等于fCK_PSC / (PSC[15:0] + 1)。
PSC的值保存在預分頻寄存器的預裝載寄存器中,在每次更新事件時(shí)加載至影子寄存器.
3.計數器寄存器
高級定時(shí)器計數模式:在向上計數模式中,計數器從0計數到自動(dòng)加載值(TIMx_ARR計數器的內容),然后重新從0開(kāi)始計數并且產(chǎn)生一個(gè)計數器溢出事件。
如果使用了重復計數器功能,在向上計數達到設置的重復計數次數(TIMx_RCR)時(shí),產(chǎn)生更新事件(UEV);否則每次計數器溢出時(shí)才產(chǎn)生更新事件。
在事件產(chǎn)生寄存器寄存器中(通過(guò)軟件方式或者使用從模式控制器)設置UG位也同樣可以產(chǎn)生一個(gè)更新事件。 設置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件;這樣可以避免在向預裝載寄存器中寫(xiě)入新值時(shí)更新影子寄存器。在UDIS位被清’0’之前,將不產(chǎn)生更新事件。但是在應該產(chǎn)生更新事件時(shí),計數器仍會(huì )被清’0’,同時(shí)預分頻器的計數也被請0(但預分頻器的數值不變)。此外,如果設置了TIMx_CR1寄存器中的URS位(選擇更新請求),設置UG位將產(chǎn)生一個(gè)更新事件UEV,但硬件不設置UIF標志(即不產(chǎn)生中斷或DMA請求)。這是為了避免在捕獲模式下清除計數器時(shí),同時(shí)產(chǎn)生更新和捕獲中斷。
當發(fā)生一個(gè)更新事件時(shí),所有的寄存器都被更新,硬件同時(shí)(依據URS位)設置更新標志位(TIMx_SR寄存器中的UIF位)。
● 重復計數器被重新加載為T(mén)IMx_RCR寄存器的內容。
● 自動(dòng)裝載影子寄存器被重新置入預裝載寄存器的值(TIMx_ARR)。
● 預分頻器的緩沖區被置入預裝載寄存器的值(TIMx_PSC寄存器的內容)。
下面給出一些例子,當TIMx_ARR=0x36時(shí)計數器在不同時(shí)鐘頻率下的動(dòng)作。
內部時(shí)鐘分頻因子為1 時(shí)的計數器時(shí)序圖如下:
內部時(shí)鐘分頻因子為2 時(shí)的計數器時(shí)序圖如下:
內部時(shí)鐘分頻因子為4時(shí)的計數器時(shí)序圖如下:
內部時(shí)鐘分頻因子為N時(shí)的計數器時(shí)序圖如下:
當ARPE=0時(shí)的更新事件(TIMx_ARR沒(méi)有預裝入) 時(shí)的計數器時(shí)序圖如下:
當ARPE=1時(shí)的更新事件(TIMx_ARR預裝入) 時(shí)的計數器時(shí)序圖如下:
在向下模式中,計數器從自動(dòng)裝入的值(TIMx_ARR計數器的值)開(kāi)始向下計數到0,然后從自動(dòng)裝入的值重新開(kāi)始并且產(chǎn)生一個(gè)計數器向下溢出事件。
如果使用了重復計數器,當向下計數重復了重復計數寄存器(TIMx_RCR)中設定的次數后,將產(chǎn)生更新事件(UEV),否則每次計數器下溢時(shí)才產(chǎn)生更新事件。
在TIMx_EGR寄存器中(通過(guò)軟件方式或者使用從模式控制器)設置UG位,也同樣可以產(chǎn)生一個(gè)更新事件。
設置TIMx_CR1寄存器的UDIS位可以禁止UEV事件。這樣可以避免向預裝載寄存器中寫(xiě)入新值時(shí)更新影子寄存器。因此UDIS位被清為0之前不會(huì )產(chǎn)生更新事件。然而,計數器仍會(huì )從當前自動(dòng)加載值重新開(kāi)始計數,并且預分頻器的計數器重新從0開(kāi)始(但預分頻系數不變)。
此外,如果設置了TIMx_CR1寄存器中的URS位(選擇更新請求) ,設置UG位將產(chǎn)生一個(gè)更新事件UEV但不設置UIF標志(因此不產(chǎn)生中斷和DMA請求),這是為了避免在發(fā)生捕獲事件并清除計數器時(shí),同時(shí)產(chǎn)生更新和捕獲中斷。
當發(fā)生更新事件時(shí),所有的寄存器都被更新,并且(根據URS位的設置)更新標志位(TIMx_SR寄存器中的UIF位)也被設置。
● 重復計數器被重置為T(mén)IMx_RCR寄存器中的內容
● 預分頻器的緩存器被加載為預裝載的值(TIMx_PSC寄存器的值)。
● 當前的自動(dòng)加載寄存器被更新為預裝載值(TIMx_ARR寄存器中的內容)。
注:自動(dòng)裝載在計數器重載入之前被更新,因此下一個(gè)周期將是預期的值。
下面是一些當TIMx_ARR=0x36時(shí),計數器在不同時(shí)鐘頻率下的動(dòng)作。
內部時(shí)鐘分頻因子為1 時(shí)的計數器時(shí)序圖如下:
內部時(shí)鐘分頻因子為2 時(shí)的計數器時(shí)序圖如下:
內部時(shí)鐘分頻因子為4時(shí)的計數器時(shí)序圖如下:
內部時(shí)鐘分頻因子為N時(shí)的計數器時(shí)序圖如下:
當沒(méi)有使用重復計數器時(shí)的更新事件時(shí)的計數器時(shí)序圖:
中央對齊模式(up/down counting) 在中央對齊模式,計數器從0開(kāi)始計數到自動(dòng)加載的值(TIMx_ARR寄存器)−s211,產(chǎn)生一個(gè)計數器溢出事件,然后向下計數到1并且產(chǎn)生一個(gè)計數器下溢事件;然后再從0開(kāi)始重新計數。
在此模式下,不能寫(xiě)入TIMx_CR1中的DIR方向位。它由硬件更新并指示當前的計數方向。
可以在每次計數上溢和每次計數下溢時(shí)產(chǎn)生更新事件;也可以通過(guò)(軟件或者使用從模式控制器)設置TIMx_EGR寄存器中的UG位產(chǎn)生更新事件。然后,計數器重新從0開(kāi)始計數,預分頻器也重新從0開(kāi)始計數。
設置TIMx_CR1寄存器中的UDIS位可以禁止UEV事件。這樣可以避免在向預裝載寄存器中寫(xiě)入新值時(shí)更新影子寄存器。因此UDIS位被清為0之前不會(huì )產(chǎn)生更新事件。然而,計數器仍會(huì )根據當前自動(dòng)重加載的值,繼續向上或向下計數。 此外,如果設置了TIMx_CR1寄存器中的URS位(選擇更新請求) ,設置UG位將產(chǎn)生一個(gè)更新事件UEV但不設置UIF標志(因此不產(chǎn)生中斷和DMA請求),這是為了避免在發(fā)生捕獲事件并清除計數器時(shí),同時(shí)產(chǎn)生更新和捕獲中斷。
當發(fā)生更新事件時(shí),所有的寄存器都被更新,并且(根據URS位的設置)更新標志位(TIMx_SR寄存器中的UIF位)也被設置。
上一頁(yè) 1 2 下一頁(yè)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>