久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > STM32通用定時器(時鐘選擇,模式選擇)

STM32通用定時器(時鐘選擇,模式選擇)

作者: 時間:2016-11-28 來源:網絡 收藏

涉及寄存器

CR1

9876543210

CKD[1:0]

ARPE

CMS[1:0]

DIR

OPM

URS

UDIS

CEN

接下來再做兩個輸入的實驗

實驗6

TIMER-5:輸入捕獲模式。

現象:通過V100 的JOYSTICK鍵的SELECT鍵進入捕獲,硬件仿真看CRR的值。

首先是基本的配置:ARR的值、時鐘PSC、采樣CKD、計數方式。

然后配置輸入通道。

選擇輸入捕獲模式、輸入極性、把T1配到CC1上、選好輸入的濾波跟分頻,就可以了。

講下輸入濾波功能,在此實驗中Fdts=CK_INT/2,Fsample=Fdts/4,所以定時器時鐘為2K,所以采樣周期為4ms。才8次的話周期小于32ms的干擾會濾除。

相關寄存器

CR1

9876543210

CKD[1:0]

ARPE

CMS[1:0]

DIR

OPM

URS

UDIS

CEN

PSC

ARR

CCMR1(輸入)

IC2F[3:0]

IC2PSC[1:0]

CC2S[1:0]

IC1F[3:0]

IC1PSC[1:0]

CC1S[1:0]

CCER

15 14131211 10987 6543210

CC4P

CC4E

CC3P

CC3E

CC2P

CC2E

CC1P

CC1E

實驗7

TIMER-6:PWM輸入

現象:由TIMER3輸出通道1產生一路周期2秒占空比50%的PWM波,飛線到TIMER4的輸入通道1,有TIMER4來測量該PWM得周期和占空比。

在做實驗之前引入三種從模式控制:復位、觸發、門控。通過SMCR選擇后可以進入這三種從模式

SMCR

1514131211 109876543210

ETP

ECE

ETPS[1:0]

ETF[3:0]

MSM

TS[2:0]

SMS[2:0]

SMS: 100101110

復位門控觸發

所謂從模式簡單理解就是受控于別人了,包括何時啟動、何時停止、何時復位。相關作用請看手冊。提示一點就是進入這三種模式后時鐘是誰的問題?肯定不是外部時鐘1了,可以是內部時鐘和外部時鐘2.

接著看實驗,PWM方式的原理是這樣的,如前文提到過輸入時可以把T1映射到CC1上去同時映射到CC2上,將CC1和CC2的捕獲邊沿搞成相反的,比如CC1捕獲T1上升沿,CC2捕獲T1下降沿,還要再設置T1為復位從模式,上升沿有效,這樣T1上升沿后計數器開始計數。下降沿CC2捕獲發生,此為PWM占空比,在來一個上升沿,CC1捕獲發生此為PWM周期。注意CC1捕獲的第一次無效。

這是從模式跟輸入捕獲的一種組合使用,從模式還可以跟輸出比較組合使用。比如手冊上的單脈沖實驗。

接著做4個實驗跟定時器的級聯和定時器同步有關系,在實驗前先得說說主模式的問題。在CR2寄存器中的MMS位決定了定時器的主模式方式,即決定TRGO.幾種方式可以參看手冊。要說明一點就是一個定期器既可以是主模式同時它也是從模式,這就好像你是一個中層干部一樣,既可以領導別人同時又被別人領導,這個不沖突的。

簡單介紹下4個實驗。

實驗8

TIMER-8:TIMER2作為TIMER3的分頻器.

現象:LED以10秒周期閃爍。

TIMER3配置為PWM輸出,但是始終有TIMER2的溢出時間頻率來提供,其溢出頻率為100Hz所以TIMER3 PWM的周期為10S.

實驗9

TIMER-9:TIMER2來使能TIMER3.

現象:LD1前15秒以1秒的周期閃爍,后15秒熄掉,然后下個15秒再閃爍如此循環。

在這個實驗里TIEMR3輸出一個周期1秒的PWM波,仍然驅動LD1閃爍。同時從模式配成門控模式,TIEMR2將OC1作為TRGO,OC1是一個周期30S占空比50%的PWM波。

實驗10

TIMER-10:IMER2啟動TIMER3

現象:上電后延遲15秒LD1以1秒的周期閃爍。

此實驗跟上個實驗配置差不多只要把TIMER3有門控改為觸發方式即可。

實驗11

TIMER-11:TIMER4的通道1同時出發TIMER4和TIMER3兩個定時器

現象:按下JOYSTICK 的“選擇”鍵同時出發兩個定時器開始。同時TIMER3驅動LD1以1秒周期閃爍。

以上4個實驗實際上是主模式和從模式的組合以及主模式和外部時鐘1的組合。其實根據自己的需要還可以做出多種組合,這就是STM32定時器強大的地方。

最后多熟悉下庫函數,關于TIM的庫(2.0版本),本人認為有兩點錯誤:

1、TIM.C中CR1_CounterMode_Mask 的值為0x039F應該改為0x038F這樣才能覆蓋CR1的DIR位。

2、TIM.C中TIM_PrescalerConfig函數原文

if (TIM_PSCReloadMode == TIM_PSCReloadMode_Immediate)

{

TIMx->EGR |= TIM_EventSource_Update;

}

else

{

TIMx->EGR &= TIM_EventSource_Update;

}

紅色的這句好像不對吧?應該TIMx->EGR &=~ TIM_EventSource_Update;才對吧。


上一頁 1 2 下一頁

評論


技術專區

關閉