STM8教程實(shí)驗(yàn)10-定時(shí)器TIM3_第1頁(yè)
STM8教程實(shí)驗(yàn)10-定時(shí)器TIM3_第2頁(yè)
STM8教程實(shí)驗(yàn)10-定時(shí)器TIM3_第3頁(yè)
STM8教程實(shí)驗(yàn)10-定時(shí)器TIM3_第4頁(yè)
STM8教程實(shí)驗(yàn)10-定時(shí)器TIM3_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、例程十定時(shí)器TIM3定時(shí)器的使用是很重要的,可以說(shuō)是單片機(jī)的靈魂來(lái)的,它的功能非常強(qiáng)大,單 片機(jī)可以利用它來(lái)做很多事情。這個(gè)例程主要解析一下 STM8S里面定時(shí)器TIM2 的主要功能特點(diǎn)。TIM2是個(gè)通用定時(shí)器,和TIM3是一樣的。通用定吋器由帶有可編程預(yù)分頻器的位自動(dòng)裝載計(jì)數(shù)器構(gòu)成。它適用于多種場(chǎng)含,包拆:基本的定時(shí)測(cè)量輸入信號(hào)的脈沖長(zhǎng)度(輸入捎獲)產(chǎn)生輸出波形(輸出比較,PWM和單脈沖) 與其他定吋器或外部信號(hào)同步(外部吋鐘,復(fù)位.觸發(fā)和使能信號(hào))(僅針對(duì)帶冇TI陽(yáng)5的芯片) 定吋器可由內(nèi)部時(shí)鐘驅(qū)動(dòng)。TIM2/TIIVI3的主要功能TIM2TIM3的功能包括:低位向上計(jì)數(shù)和自動(dòng)裝載計(jì)數(shù)器

2、4位可編程(可以實(shí)吋修改的)預(yù)分赧器,計(jì)教器吋鐘頻率的分頻系數(shù)為132托&之間的2的 幕 3個(gè)獨(dú)立通逍:輸入捕莪一輸出比較一 PWM主成(邊緣對(duì)齊模式一單脈沖模式輸出如下事件笈主吋產(chǎn)主中斷;- 更新:計(jì)數(shù)器向上溢出.計(jì)數(shù)器初蛤化(通過(guò)軟件-輸入捕獲-輸出比較圖 79TIM2/TIM3 框圖TIME BASE UNIT6噸b Ck ChT1rrt; tnR-甫,r時(shí)基單元包含: 化位向上計(jì)數(shù)器預(yù)分頻器 “位自動(dòng)裝載寄存器沒(méi)有重復(fù)寄存器=計(jì)數(shù)器便用內(nèi)部吋理(fMASTHR)+它由CK_PSC提供”井經(jīng)過(guò)預(yù)分頻器分?jǐn)劗a(chǎn)生計(jì)數(shù)器吋群CK CNT,時(shí)基單元TIMx PSCPjiuto-Rek3&

3、amp;d ReliefL16-blt C&UHBirTlMx_AfiflH. aRRLTlMx_.CinRH.CNTRL“UIF UEV3 / 9# / 9預(yù)分頻器預(yù)分頻黠的實(shí)現(xiàn):預(yù)分頻器基于4泣寄荷器控制的伯位計(jì)數(shù)器,由于寄存器帶有韁沖器因此可以隨吋修改預(yù)分 頻的數(shù)值計(jì)數(shù)器可以取值為1到32了 68之間的2的幕進(jìn)行分頻。計(jì)數(shù)器吋鐘頻率的計(jì)算公式;fCK.CNT =如戶蟲(chóng)冋濾則預(yù)分頻器的值由預(yù)裝載寄存器寫(xiě)入=一旦寫(xiě)入預(yù)裝載寄存器的LS字節(jié)時(shí),帶有當(dāng)前使用值的影 子寄荷器就被寫(xiě)入了新的值新的預(yù)分頻值在下一個(gè)周期時(shí)生效(在下一個(gè)更新事件之后h對(duì)TIMxPSCRM-器的徴攥作通過(guò)預(yù)裝裁奇存

4、器實(shí)現(xiàn),囚北可以隨時(shí)僕取不受陽(yáng)制°計(jì)數(shù)模式在向上計(jì)數(shù)模式中.計(jì)數(shù)潴從0計(jì)數(shù)到用戶定義的比較值仃IMx_ARR寄存器的值),然G重新從0 開(kāi)始計(jì)數(shù)井產(chǎn)生一仆計(jì)數(shù)器溢出事件,同時(shí),如杲TIM1_CR117-的UDIS位是6將會(huì)產(chǎn)生一 個(gè)更新事件(UEV). 0描述了向上讓數(shù)模式匚# / 9置位TIMjEGR寄療器的UG位(通過(guò)軟件方式或苦輕用從韓式控制器)也同樣可以產(chǎn)生一個(gè)史新 事件.# / 9風(fēng)馳電子STM8開(kāi)發(fā)板2012愜用軟件置位TIMx_CR1寄存器的UDIS位.可以禁止更新事件,這樣可以避免左史即預(yù)裝我寄 存器吋史新影子寄存器。在UDIS位被淸除之前+將不產(chǎn)主更荻事件匚但是在應(yīng)

5、該產(chǎn)生史新事件 時(shí)計(jì)數(shù)器仍會(huì)被清0,冋吋頂分頗器的計(jì)數(shù)也被濟(jì)0(但預(yù)分頻樂(lè)的數(shù)值小變),此外,如呆設(shè)置 TTIMx_CR1寄存器中的URS位(選擇史新詰求),設(shè)置UG位將產(chǎn)生一個(gè)史新事件UEX但硬件 不設(shè)置5f標(biāo)志(即不產(chǎn):生中斷請(qǐng)求)這是為了避免在料我模式下涓除計(jì)垃器時(shí),同時(shí)產(chǎn)生吏新 和捕獲中斷口巧發(fā)生一個(gè)更新韋件時(shí),所有的寄存器都被更新,硬件同時(shí)(依據(jù)URS位)設(shè)置更新標(biāo)志徑 (TIMx_SR寄存器的UF位”自動(dòng)裝載影子寄存器被車新置入預(yù)裝載寄存器的僅TIMx_ARR).預(yù)分頻器的緩存器被置入頊裝載寄存器的值仃IMx_PSC寄存器的內(nèi)容),卜-圖給出一些例子,說(shuō)明TIMx_ARR=0x36

6、吋,計(jì)數(shù)器在不同吋鐘頻率卜-的動(dòng)作°坪站的預(yù)分頻為Z囚此計(jì)數(shù)器的吋鐘(CK_CNT)頻率是預(yù)分頻時(shí)鐘(CKJSC)頻率的一半匚 関32禁止了自動(dòng)裝載功能(ARPE=O)所以在計(jì)數(shù)器達(dá)到0x36吋,計(jì)數(shù)器溢出,娜子寄存器立刻 被史新,同時(shí)產(chǎn)主一個(gè)史新事件=圖32當(dāng)ARPE=0(ARR預(yù)裝載h預(yù)分頻為2時(shí)的計(jì)數(shù)器史新。ck psc luinjinnnnnnfinnnnnnnnnnnnnnnnnnRCNT_EM TIMER CLOCK = CK CMTrouuwwwuwiCOUNTER REGISTER3132)(33)(34歸或3皿00和他® 3帕碗或虬COUNTER OVER

7、FLOW1nUPDATE EVENT (UEV|nilPHATF INTFRFHjPT FL AR (UIF)value iransfend knmedialBly in shadow朋3的預(yù)分頻為仁因此CK_CNT(n頻率與CKJSC暫影3便能了自動(dòng)重載(ARPE=1),所以在計(jì)數(shù)器達(dá)到皿FF產(chǎn)生溢出。0x36在溢出時(shí)被寫(xiě)入, 同吋產(chǎn)生一個(gè)更新事件=4 / 9圖33 ARPE=1仃IMJARR預(yù)裝載)時(shí)的計(jì)數(shù)器更新ck_psc jLrLrLrLrLrLrLnrLrLrLrLrLrLrLrCNT ENTIMER CLOCK = CK.CNT_CQUMTER REGISTER FA )uumqi

8、nnmuuuinCOUNTER OVERFLOWUPDATE EVEHT (U£V|5 / 9# / 9計(jì)數(shù)模式就介紹一種向上技術(shù)模式,其他模式可以參考STM8寄存器.pdf文檔第115頁(yè)至118頁(yè)捕獲/比較通道輸入部分請(qǐng)參考"5如魏2輸入部分框圖所示,定時(shí)器帶有兩個(gè)輸入通道,通道1在內(nèi)部鏈接到比較器匚 圖82 輸入部分框圖# / 9風(fēng)馳電子STM8開(kāi)發(fā)板2012圖83TIM2通道1的輸入部分框圖T11F ED:1c lhe clocfc/trnggeir witrollflfrnDUASTtRfitterdownooualeiTI1FTilf 巳OilTI2FP1divi

9、der/1.Z2. MJSICPSICF3:01<X1PTflCTl-CCMRlTIM? CCER1TI2F rising P (from channT 2)TI2F 恒Ilin® (from channel 2)(hom cloeMn contrbHsr>CG1tTIM2_CCMR1 TIM2.CCEA1圖84輸出部分框圖6 / 9風(fēng)馳電子STM8開(kāi)發(fā)板2012# / 9風(fēng)馳電子STM8開(kāi)發(fā)板2012圖85通道1的輸出部分框罔# / 9風(fēng)馳電子STM8開(kāi)發(fā)板2012# / 9風(fēng)馳電子STM8開(kāi)發(fā)板2012通道輸出的具體的原理可以參考 STM8寄存器.pdf文檔第133頁(yè)

10、至138頁(yè)中斷迪用宦時(shí)器包括4個(gè)中斷源;捕茯/比較3中斷捕茯/比較2中斷捕獲/出較1中斷史新中斷在使用中斷功能吋,需要先設(shè)置TIMxJERf器的CC3IE位戎CC2IE位或CC1IE位使能中斷請(qǐng) 求。通過(guò)軟件設(shè)置TIMx_EGR寄存誥的相應(yīng)位也能產(chǎn)主不冋的中版源-了解通用定時(shí)器TIM3現(xiàn)在關(guān)鍵是學(xué)會(huì)怎么去用,怎樣去設(shè)置定時(shí)器的寄存器 好的,跟以前一樣從主函數(shù)看起int main (void)C/* Infinite loop"設(shè)置內(nèi)鄭冉速時(shí)鐘為主時(shí)鐘*CLK_HSrPrescalerConfig(CLKPRESCALER_HS工口工HL);/*1<Set High speed

11、internal clock */ TIM3_MQde = BaseTimeTini3_Init (丨;LED_lnit.();Set-LdOFF ();_nable_interrupt ();#elif= PWMPWM_Init ();while (1)/* 添力匚你的代碼 */|#if TIM3_Mode =BaseTimeLED Display ();#*lif Tir-i3_Mode=-PWMTeat PWM_LED ();看過(guò)這主函數(shù),是否覺(jué)得這和前面的例程寫(xiě)得有點(diǎn)不一樣呢?是的,這個(gè)TIM3的功能強(qiáng)大,功能比較多,在我的例程中,我寫(xiě)了幾個(gè)常用和比較重要的功能, 所以才有了預(yù)定義的方

12、法,這種形式對(duì)調(diào)試程序比較重要,呆會(huì)在詳細(xì)解釋。這 種#if#endif 或#if Helif#endif。這就預(yù)定義,只有后面為真,編譯器 才會(huì)編譯那些代碼,否則就不會(huì)編譯。大家學(xué)過(guò)C語(yǔ)言的都是知道這種編程方法, 希望大家能領(lǐng)會(huì)這種方法。下面還是主要看看的我們STM8S勺TIM3的各個(gè)功能的初始話。在這個(gè)例程中,介紹了定時(shí)器的基本定時(shí),主要利用基本定時(shí)來(lái)實(shí)現(xiàn) 最精準(zhǔn)的1ms的延遲函數(shù)和TIM3的PW啲功能。#if TTM3_Mode BaseTimeTim3_lnit ();LED !nit ();SetLedOFF ();enableinterrupt();#elif TIIwI3_Mod

13、e = PUMPWM init-();#endif這個(gè)就是初始化,如果是TIM3_Mode=BaseTim的話就是利用TIM3的定時(shí)器功 能。看看里面的初始化吧。7 / 9風(fēng)馳電子STM8開(kāi)發(fā)板2012void Tini3_lnit. (void)T丄M3_uelnit();TlM3_Tiin*3AsaIni-t ( 3P TM3_P RES CALE R_16 ,;TTM3_Prescale rConfig(TTM3_PRESCALER_16# Tin3_PSCRELOADMODE_IMHEDIATE), TiM3_ARRPreloadCorLfig (ehabLE );TIM3_ITCon

14、fig IIM3 _Z T _U PDAT E f ENABLE);TIM3_Cmd(ENABLE);)這個(gè)初始化函數(shù)定義了 TIM3的計(jì)數(shù)頻率為主時(shí)鐘的16分頻,就是1M當(dāng)從0計(jì) 數(shù)到999就是1ms但計(jì)數(shù)到999是馬上又自動(dòng)重裝系數(shù),又從 0開(kāi)始計(jì)數(shù),當(dāng) 計(jì)數(shù)到999,會(huì)產(chǎn)生一個(gè)中斷。_en ablenterrupt(); 這個(gè)就是開(kāi)總中斷其他的2個(gè)初始化就LED的初始化,前面已經(jīng)講過(guò)了,這里就不再重復(fù)了。下面看看中斷服務(wù)子程序Interjrtipt void TIM3_UPD_OVF_BRK_IRQHand丄g弋(aoiM)T irairLgDelay_De creme nt ();TI

15、M3_ClearITPendingBit (THM:3_:rT_UPDATE); 一 一 一這個(gè)TIM3計(jì)數(shù)溢出中斷的中斷號(hào)為0xF,里面的函數(shù)是放中斷后要處理的語(yǔ)句, 最后要清楚標(biāo)志位,TIM3_ClearlTPendingBit(TIM3_IT_UPDATE);否則就跳不出 中斷。這里主要是實(shí)現(xiàn)1ms的延遲函數(shù),所以只調(diào)用了 TimingDelay_Decrement();這個(gè)函數(shù)??纯此暮瘮?shù)原型一void TimingDelay_Decrement. (void)if (TimingDelay i = 0x00)TimingDelay-;就是每近一次中斷TimingDelay就減1,T

16、imingDelay定義為靜態(tài)全局變量,這 樣的話就可以實(shí)現(xiàn)1ms精準(zhǔn)延遲。下面看看延遲函數(shù)的原型void delay_ms(nTime)Timi ngDe1ay = nTirne;while CTimingDelay L = 0);整個(gè)延遲思想是TimingDelay不等于0的話,就在這等到TimingDelay為0, TimingDelay減1是進(jìn)去中斷子程序,TimingDelay 是全局靜態(tài)變量。這個(gè)功能 使用流水燈LED來(lái)演示,所以大家在主函數(shù)的文件頭部那里這樣定義就行 #dfine1非tdmfiriEPWM0#defineEaseTime1這個(gè)就是表示#if TIM3 Mode二二

17、 BaseTime當(dāng)你編譯的時(shí)候只編譯定時(shí)器這個(gè)功能的代碼。編譯后下載到風(fēng)馳電子STM8開(kāi)發(fā)板的時(shí)候就會(huì)見(jiàn)到LED不斷的流,每隔100ms下面接著寫(xiě)TIM3的PW功能#elif TIM3_Mode();void PWM I nit (甘想id)#if TIM3 Chaniti&l-=TIM3_Channel 1/*TTM3 Frequency = TTM3 counter elotk/(ARF + 1)*/TIM3_TinieBaseInit I.TTM3-PRE凸499);/*TIM3 Fraqli&ney = 16M/16/ (499+1) -2K*/* PWM1 Mode

18、 ccnfiguratian: ChannellTIM3 Chsnntll duty cycle = TIM3_CCR1/(TIM3_ARR + 1)J * 100 = 50*/TIM3_OClZnit (TIM3_OCMODE_Pml, TI M3 _OUT PUT ST AT E_E N AB LE r 2 5 0 , TI M3_O C PO LAE IT Y _H IGH); TiM3_oclPt&10adconfig(enable);#elif TTM3_Chan1 = -TIM3_Channe12TIM3_TinieEaselnit (TII13_PRESCALER_L6,

19、 999);TIM3 OCZmit (TIM3 OCMODE PtMMZ, TIM3 OUTPUT STATE fiHABLE, SDCt TIK3 OC POLARITY HIGH); TTM3_OC2Pre loadconfig(ENABLE);#fllif TIMS hs.nn«l = =TlM3_ehannel 3TI PI3_OC PO LARI TY_H I GH);TZM3_TittieEaseIlflit (TIM3_PRESCALER_16r 499);TIMS_OC3ini.t (IIM3_OCEODE_PWM3r II?I3_DUTFLITSTATE_ENABL

20、Ef 25Df TIM3_OC3FreloadC0nfig(ENABLE);#endifTIW3_Cnid (ENABLE) ivoid這個(gè)初始化函數(shù)定義了 3個(gè)通道的初始化,初始化里面最重要的是設(shè)置了 PWM勺 頻率和占空比,對(duì)于怎么設(shè),大家看上面的例程代碼和注釋就清楚了。 在官方庫(kù) 里面沒(méi)有單獨(dú)對(duì)PW設(shè)置頻率和占空比,所以我就封裝了 2個(gè)這樣的函數(shù),大家 來(lái)看看。SetT工膽rrcqu2ric:¥ (uint 16_t TIM3_P© riod)/ * Set. theAutoreload value */TIM3->ARRH = (uint8_t)(TIM3_P

21、eriod » 8);TIM3->ARRL = (uintBt)(TTM3_PeLiod);大家看到這個(gè)函數(shù)是否和官方庫(kù)封裝的很相似呢?這是個(gè)很標(biāo)準(zhǔn)的函數(shù),其實(shí)大家要培養(yǎng)成良好的編程習(xí)慣,這樣讓人感覺(jué)你的編程是很規(guī)范的。 這個(gè)函數(shù)是實(shí) 現(xiàn)PW啲頻率的設(shè)置。頻率的設(shè)置還要跟時(shí)鐘有關(guān)系。TIM3 Freque ncy = TIM3 cou nter clock/(ARR +1)= TIM3 cou nterclock/( TIM3_Period+ 1)。void S-atTIM3_PWM_DutyCycl& ( ain匸rTM3_Pulse)#if friM3_Channel=TlM3_ChanneLl /* Set 七h(yuǎn)總 Pulse value */TIH3->CCR1H = (uint8_t)(TIM3_Puls& » B); TIH3->CCR1Ij = (uinz6_t) (TlM3_eulse) i#lif TTM3_C

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論