久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

STM8S 定時(shí)器的使用

 心不留意外塵 2016-11-21

http://blog.csdn.net/liuyu60305002/article/details/6951916

2011

看了網(wǎng)上的資源,,都不怎么好用,于是決定總結(jié)總結(jié),,記錄下定時(shí)器的簡單實(shí)用方法,。

環(huán)境: STM8SF103 ,仿真器為:STLINK

TIM4 屬于8位定時(shí)器,,最大128分頻,。

這個(gè)定時(shí)器的時(shí)鐘源是系統(tǒng)時(shí)鐘源(fMaster),然后直接通過預(yù)分頻器分頻后供CK_CNT使用,。如:系統(tǒng)頻率為4MHz,,經(jīng)過128分頻后,提供給定時(shí)器使用的頻率就為 31250Hz


因?yàn)轫?xiàng)目需要,,我這里使用的內(nèi)部RC 16MHz振蕩器,并進(jìn)行LSI 4分頻,,所以主頻為4MHz,。

  1. //main.c  
  2. void Init_Tim4(void)  
  3. {  
  4.         /*很多人都是在這里裝填0xFF,其實(shí)是為了讓PSC盡快生效,,對于PSC的設(shè)置,,需要在下一個(gè)更新事件時(shí)才會(huì)生效*/  
  5.         TIM4_CNTR=0; //計(jì)數(shù)器值  
  6.     TIM4_ARR=0xFA; //自動(dòng)重裝寄存器  250,產(chǎn)生125次定時(shí)1S  
  7.     TIM4_PSCR=0x07; //預(yù)分頻系數(shù)為128  
  8.     TIM4_EGR=0x01; //手動(dòng)產(chǎn)生一個(gè)更新事件,用于PSC生效       注意,,是手動(dòng)更新  
  9.       
  10.     TIM4_IER=0x01; //更新事件中斷 使能  
  11.     TIM4_CR1=0x01; //使能計(jì)時(shí)器,,TIM4_CR0停止計(jì)時(shí)器  
  12. }  
  13.   
  14. void main(void)  
  15. {  
  16.         _asm("rim"); //這是必須的,因?yàn)橄到y(tǒng)重啟后,,軟件中斷級別為3級,,處于最高級,除了TRAP,TLI,RESET三個(gè)中斷外不響應(yīng)其他中斷,。  
  17.         //rim將軟件級別更改為0級別,,這樣其他中斷就能得到相應(yīng)。  
  18.         Init_Tim4();  
  19.         while(1);  
  20. }  
  21.   
  22. //中斷向量表必須將TIM4的中斷處理函數(shù)填寫進(jìn)去  
  23.     {0x82, TIM4_UPD_OVF_IRQHandler}, /* irq23 */  
  24.   
  25. //處理函數(shù)如下:  
  26. /*定時(shí)器4用作看門狗喂狗定時(shí),因?yàn)榭撮T狗最大延時(shí)510ms, 
  27. 定時(shí)器頻率為4MHz/128=31250 = 250 * 125,125 / 5 = 25 (200ms)*/  
  28. @far @interrupt void TIM4_UPD_OVF_IRQHandler(void)  
  29. {  
  30.     t4++;  
  31.     TIM4_SR=0; //清除中斷標(biāo)志  
  32.     //t4==125  //定時(shí)1S  
  33.     if(t4==25) //25 * 250 定時(shí)200ms  
  34.     {  
  35.         FREE_IWDG; //喂狗,,如果單純定時(shí)用,,可以拿掉  
  36.        //可以嘗試點(diǎn)亮LED燈  
  37.         t4=0;  
  38.     }  
  39.     return;  
  40. }  

定時(shí)器延時(shí)計(jì)算過程,如主頻4MHz,,預(yù)分頻為128,,定時(shí)器頻率等于 4000000 / 128 = 31250 (Hz),,周期為32us。4分頻時(shí)周期為1us,。

如:主頻8MHz,,預(yù)分頻為128,定時(shí)器頻率等于 8000000 / 128 = 62500 (Hz),,周期為16us,。


整個(gè)代碼沒有使用庫函數(shù),諸如TIM4_SR TIM4_CR1之類的定義在stm8s103k.h,,其他的頭也可以,。


定時(shí)器2  (16位計(jì)時(shí)器) 的簡單實(shí)用與此類似,但需要注意設(shè)置初值的方法,,如:

  1. void Init_Tim2(void)  
  2. {  
  3.     TIM2_EGR=0x01; //手動(dòng)產(chǎn)生更新事件,,重新初始化計(jì)數(shù)器,并允許產(chǎn)生一個(gè)更新事件    
  4.     //設(shè)置定時(shí)器初值  
  5.     TIM2_CNTRH=0; //不能使用TIM2_CNTR直接設(shè)值,,TIM2_CNTRL=0;   
  6.     //設(shè)定自動(dòng)重裝寄存器值      
  7.     //這里得注意不能使用TIM2_ARR的方式進(jìn)行設(shè)值,,TIM2是十六位的。  
  8.     //如TIM2_ARR=0xFA,,實(shí)際上是賦給高字節(jié)了,,TIM2_ARRH=0xFA,而不是想象中的賦給低字節(jié),。  
  9.     TIM2_ARRH=0x7A; //31250 4MHz / 128 = 31250Hz  (1S)  
  10.     TIM2_ARRL=0x12; //0x7A12 31250   意味著每產(chǎn)生一次中斷時(shí)間為1S  
  11.     TIM2_PSCR=0x07; //分頻128  
  12.   
  13.     TIM2_IER=0x01; //中斷允許位使能  
  14.     TIM2_CR1=0x01; //使能計(jì)時(shí)器  
  15. }  

整個(gè)使用需要注意幾點(diǎn):

第一,、總中斷的開啟 _asm("rim")

第二、中斷向量表對應(yīng)位置的中斷處理過程改寫

第三,、定時(shí)器自身的使能,,包括中斷使能和計(jì)時(shí)器使能

第四、默認(rèn)情況下,,TIM4的外設(shè)時(shí)鐘是開啟的,,CLK_PCKENR為0xFF,外設(shè)TIM4時(shí)鐘如果關(guān)閉,,時(shí)鐘是運(yùn)行不起來的,。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多