<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32 學習筆記_TIME定時器詳解2

          STM32 學習筆記_TIME定時器詳解2

          作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏

          本文引用地址:http://www.ex-cimer.com/article/201611/321890.htm

          實驗7

          TIMER-6:PWM輸入

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

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

          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ā)

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

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

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

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

          簡單介紹下4個實驗。

          實驗8

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

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

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

          實驗9

          TIMER-9:TIMER2來使能TIMER3.

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

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

          實驗10

          TIMER-10:IMER2啟動TIMER3

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

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

          實驗11

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

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

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

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

          1、 TIM.C中CR1_CounterMode_Mask 的值為0x039F應該改為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;}
          紅色的這句好像不對吧?應該TIMx->EGR &=~ TIM_EventSource_Update;才對吧。

          stm32通用定時器

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

          時鐘源問題:

          名為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的預分頻系數(shù)為1時,這個倍頻器不起作用,定時器的時鐘頻率等于APB1的頻率;當APB1的預分頻系數(shù)為其它數(shù)值(即預分頻系數(shù)為2、4、8或16)時,這個倍頻器起作用,定時器的時鐘頻率等于APB1的頻率兩倍。

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

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

          再舉個例子:當AHB=72MHz時,APB1的預分頻系數(shù)必須大于2,因為APB1的最大頻率只能為36MHz。如果APB1的預分頻系數(shù)=2,則因為這個倍頻器,TIM2~7仍然能夠得到72MHz的時鐘頻率。能夠使用更高的時鐘頻率,無疑提高了定時器的分辨率,這也正是設計這個倍頻器的初衷。

          TIM通用定時器配置步驟:

          1.配置TIM時鐘  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);2.定時器基本配置void TIM2_Configuration(void){TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//  TIM_OCInitTypeDef  TIM_OCInitStructure ;TIM_DeInit(TIM2);                              //復位TIM2定時器TIM_TimeBaseStructure.TIM_Period = 5;        // 2.5ms     TIM_TimeBaseStructure.TIM_Prescaler = 36000;    // 分頻36000       TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  // 時鐘分頻  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //計數(shù)方向向上計數(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設置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間。TIM_Prescaler設置了用來作為TIMx時鐘頻率除數(shù)的預分頻值。它的取值必須在0x0000和0xFFFF之間。TIM_ClockDivision的作用是做一段延時,一般在特殊場合的時候會用到,可不關心。TIM_CounterMode選擇了計數(shù)器模式?!   IM_CounterMode_Up    TIM向上計數(shù)模式    TIM_CounterMode_Down    TIM向下計數(shù)模式    TIM_CounterMode_CenterAligned1   TIM中央對齊模式1計數(shù)模式    TIM_CounterMode_CenterAligned2   TIM中央對齊模式2計數(shù)模式    TIM_CounterMode_CenterAligned3   TIM中央對齊模式3計數(shù)模式單片機時鐘頻率72MHz,APB1 二分頻36MHz,故TIM2自動2倍頻至72MHz,故定時器中斷頻率為72000000/36000/5=400Hz3.使能定時器中斷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.寫中斷函數(shù)void TIM2_IRQHandler(void){......//中斷處理}  

          上一頁 1 2 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();