新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32 學(xué)習(xí)筆記_TIME定時(shí)器詳解2

STM32 學(xué)習(xí)筆記_TIME定時(shí)器詳解2

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/201611/321890.htm

實(shí)驗(yàn)7

TIMER-6:PWM輸入

現(xiàn)象:由TIMER3輸出通道1產(chǎn)生一路周期2秒占空比50%的PWM波,飛線到TIMER4的輸入通道1,有TIMER4來(lái)測(cè)量該P(yáng)WM得周期和占空比。

在做實(shí)驗(yàn)之前引入三種從模式控制:復(fù)位、觸發(fā)、門(mén)控。通過(guò)SMCR選擇后可以進(jìn)入這三種從模式

SMCR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

ETP

ECE

ETPS[1:0]

ETF[3:0]

MSM

TS[2:0]

SMS[2:0]

SMS: 100 101 110

復(fù)位 門(mén)控 觸發(fā)

所謂從模式簡(jiǎn)單理解就是受控于別人了,包括何時(shí)啟動(dòng)、何時(shí)停止、何時(shí)復(fù)位。相關(guān)作用請(qǐng)看手冊(cè)。提示一點(diǎn)就是進(jìn)入這三種模式后時(shí)鐘是誰(shuí)的問(wèn)題?肯定不是外部時(shí)鐘1了,可以是內(nèi)部時(shí)鐘和外部時(shí)鐘2.

接著看實(shí)驗(yàn),PWM方式的原理是這樣的,如前文提到過(guò)輸入時(shí)可以把T1映射到CC1上去同時(shí)映射到CC2上,將CC1和CC2的捕獲邊沿搞成相反的,比如CC1捕獲T1上升沿,CC2捕獲T1下降沿,還要再設(shè)置T1為復(fù)位從模式,上升沿有效,這樣T1上升沿后計(jì)數(shù)器開(kāi)始計(jì)數(shù)。下降沿CC2捕獲發(fā)生,此為PWM占空比,在來(lái)一個(gè)上升沿,CC1捕獲發(fā)生此為PWM周期。注意CC1捕獲的第一次無(wú)效。

這是從模式跟輸入捕獲的一種組合使用,從模式還可以跟輸出比較組合使用。比如手冊(cè)上的單脈沖實(shí)驗(yàn)。

接著做4個(gè)實(shí)驗(yàn)跟定時(shí)器的級(jí)聯(lián)和定時(shí)器同步有關(guān)系,在實(shí)驗(yàn)前先得說(shuō)說(shuō)主模式的問(wèn)題。在CR2寄存器中的MMS位決定了定時(shí)器的主模式方式,即決定TRGO.幾種方式可以參看手冊(cè)。要說(shuō)明一點(diǎn)就是一個(gè)定期器既可以是主模式同時(shí)它也是從模式,這就好像你是一個(gè)中層干部一樣,既可以領(lǐng)導(dǎo)別人同時(shí)又被別人領(lǐng)導(dǎo),這個(gè)不沖突的。

簡(jiǎn)單介紹下4個(gè)實(shí)驗(yàn)。

實(shí)驗(yàn)8

TIMER-8:TIMER2作為T(mén)IMER3的分頻器.

現(xiàn)象:LED以10秒周期閃爍。

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

實(shí)驗(yàn)9

TIMER-9:TIMER2來(lái)使能TIMER3.

現(xiàn)象:LD1前15秒以1秒的周期閃爍,后15秒熄掉,然后下個(gè)15秒再閃爍如此循環(huán)。

在這個(gè)實(shí)驗(yàn)里TIEMR3輸出一個(gè)周期1秒的PWM波,仍然驅(qū)動(dòng)LD1閃爍。同時(shí)從模式配成門(mén)控模式,TIEMR2將OC1作為T(mén)RGO,OC1是一個(gè)周期30S占空比50%的PWM波。

實(shí)驗(yàn)10

TIMER-10:IMER2啟動(dòng)TIMER3

現(xiàn)象:上電后延遲15秒LD1以1秒的周期閃爍。

此實(shí)驗(yàn)跟上個(gè)實(shí)驗(yàn)配置差不多只要把TIMER3有門(mén)控改為觸發(fā)方式即可。

實(shí)驗(yàn)11

TIMER-11:TIMER4的通道1同時(shí)出發(fā)TIMER4和TIMER3兩個(gè)定時(shí)器

現(xiàn)象:按下JOYSTICK 的“選擇”鍵同時(shí)出發(fā)兩個(gè)定時(shí)器開(kāi)始。同時(shí)TIMER3驅(qū)動(dòng)LD1以1秒周期閃爍。

以上4個(gè)實(shí)驗(yàn)實(shí)際上是主模式和從模式的組合以及主模式和外部時(shí)鐘1的組合。其實(shí)根據(jù)自己的需要還可以做出多種組合,這就是STM32定時(shí)器強(qiáng)大的地方。

最后多熟悉下庫(kù)函數(shù),關(guān)于TIM的庫(kù)(2.0版本),本人認(rèn)為有兩點(diǎn)錯(cuò)誤:

1、 TIM.C中CR1_CounterMode_Mask 的值為0x039F應(yīng)該改為0x038F這樣才能覆蓋CR1的DIR位。2、 TIM.C中TIM_PrescalerConfig函數(shù)原文if (TIM_PSCReloadMode == TIM_PSCReloadMode_Immediate){TIMx->EGR |= TIM_EventSource_Update;}else{TIMx->EGR &= TIM_EventSource_Update;}
紅色的這句好像不對(duì)吧?應(yīng)該TIMx->EGR &=~ TIM_EventSource_Update;才對(duì)吧。

stm32通用定時(shí)器

STM32的定時(shí)器是個(gè)強(qiáng)大的模塊,定時(shí)器使用的頻率也是很高的,定時(shí)器可以做一些基本的定時(shí),還可以做PWM輸出或者輸入捕獲功能。

時(shí)鐘源問(wèn)題:

名為T(mén)IMx的有八個(gè),其中TIM1和TIM8掛在APB2總線上,而TIM2-TIM7則掛在

APB1總線上。其中TIM1&TIM8稱為高級(jí)控制定時(shí)器(advanced control timer).他們所在的APB2總線也比APB1總線要好。APB2可以工作在72MHz下,而APB1最大是36MHz。

定時(shí)器的時(shí)鐘不是直接來(lái)自APB1或APB2,而是來(lái)自于輸入為APB1或APB2的一個(gè)倍頻器。

下面以定時(shí)器2~7的時(shí)鐘說(shuō)明這個(gè)倍頻器的作用:當(dāng)APB1的預(yù)分頻系數(shù)為1時(shí),這個(gè)倍頻器不起作用,定時(shí)器的時(shí)鐘頻率等于APB1的頻率;當(dāng)APB1的預(yù)分頻系數(shù)為其它數(shù)值(即預(yù)分頻系數(shù)為2、4、8或16)時(shí),這個(gè)倍頻器起作用,定時(shí)器的時(shí)鐘頻率等于APB1的頻率兩倍。

假定AHB=36MHz,因?yàn)锳PB1允許的最大頻率為36MHz,所以APB1的預(yù)分頻系數(shù)可以取任意數(shù)值;當(dāng)預(yù)分頻系數(shù)=1時(shí),APB1=36MHz,TIM2~7的時(shí)鐘頻率=36MHz(倍頻器不起作用);當(dāng)預(yù)分頻系數(shù)=2時(shí),APB1=18MHz,在倍頻器的作用下,TIM2~7的時(shí)鐘頻率=36MHz。

有人會(huì)問(wèn),既然需要TIM2~7的時(shí)鐘頻率=36MHz,為什么不直接取APB1的預(yù)分頻系數(shù)=1?答案是:APB1不但要為T(mén)IM2~7提供時(shí)鐘,而且還要為其它外設(shè)提供時(shí)鐘;設(shè)置這個(gè)倍頻器可以在保證其它外設(shè)使用較低時(shí)鐘頻率時(shí),TIM2~7仍能得到較高的時(shí)鐘頻率。

再舉個(gè)例子:當(dāng)AHB=72MHz時(shí),APB1的預(yù)分頻系數(shù)必須大于2,因?yàn)锳PB1的最大頻率只能為36MHz。如果APB1的預(yù)分頻系數(shù)=2,則因?yàn)檫@個(gè)倍頻器,TIM2~7仍然能夠得到72MHz的時(shí)鐘頻率。能夠使用更高的時(shí)鐘頻率,無(wú)疑提高了定時(shí)器的分辨率,這也正是設(shè)計(jì)這個(gè)倍頻器的初衷。

TIM通用定時(shí)器配置步驟:

1.配置TIM時(shí)鐘  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);2.定時(shí)器基本配置void TIM2_Configuration(void){TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//  TIM_OCInitTypeDef  TIM_OCInitStructure ;TIM_DeInit(TIM2);                              //復(fù)位TIM2定時(shí)器TIM_TimeBaseStructure.TIM_Period = 5;        // 2.5ms     TIM_TimeBaseStructure.TIM_Prescaler = 36000;    // 分頻36000       TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  // 時(shí)鐘分頻  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //計(jì)數(shù)方向向上計(jì)數(shù)TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ClearFlag(TIM2, TIM_FLAG_Update);TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); TIM_Cmd(TIM2, ENABLE);       }TIM_Period設(shè)置了在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間。TIM_Prescaler設(shè)置了用來(lái)作為T(mén)IMx時(shí)鐘頻率除數(shù)的預(yù)分頻值。它的取值必須在0x0000和0xFFFF之間。TIM_ClockDivision的作用是做一段延時(shí),一般在特殊場(chǎng)合的時(shí)候會(huì)用到,可不關(guān)心。TIM_CounterMode選擇了計(jì)數(shù)器模式?!   IM_CounterMode_Up    TIM向上計(jì)數(shù)模式    TIM_CounterMode_Down    TIM向下計(jì)數(shù)模式    TIM_CounterMode_CenterAligned1   TIM中央對(duì)齊模式1計(jì)數(shù)模式    TIM_CounterMode_CenterAligned2   TIM中央對(duì)齊模式2計(jì)數(shù)模式    TIM_CounterMode_CenterAligned3   TIM中央對(duì)齊模式3計(jì)數(shù)模式單片機(jī)時(shí)鐘頻率72MHz,APB1 二分頻36MHz,故TIM2自動(dòng)2倍頻至72MHz,故定時(shí)器中斷頻率為72000000/36000/5=400Hz3.使能定時(shí)器中斷TIM_Cmd(TIM2, ENABLE);4.配置NVIC。NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);5.寫(xiě)中斷函數(shù)void TIM2_IRQHandler(void){......//中斷處理}  

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


技術(shù)專區(qū)

關(guān)閉