新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM8s--定時器(time4)

STM8s--定時器(time4)

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

● 8位向上計數(shù)的自動重載計數(shù)器;
● 3位可編程的預分配器(可在 運行中修改),提供1, 2, 4, 8, 16, 32, 64 和128 這8種分頻比例。
中斷產生
– 在計數(shù)器更新時:計數(shù)器溢出。

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

幾個相關的寄存器;

控制寄存器1 (TIMx_CR1)

控制寄存器2 (TIMx_CR2)[注意:TIM4沒有該寄存器]

事件產生寄存器(TIMx_EGR)

狀態(tài)寄存器1 (TIMx_SR1)

中斷使能寄存器(TIMx_IER)

自動重裝載寄存器(TIMx_ARR)

預分頻寄存器(TIMx_PSCR)計數(shù)器時鐘頻率fCK_CNT=fCK_PSC/ 2(PSC[2:0])

計數(shù)器(TIMx_CNTR){TIMx_CNTRL TIMx_CNTRH}

詳細內容見:STM8S數(shù)據(jù)手冊

8位定時器

main()

{

//首先初始化GPIO

PD_DDR=0x08;

PD_CR1=0x08;//將PD3設置成推挽輸出

PD_CR2=0x00;

//然后初始化定時器4

TIM4_IER=0x00;//禁止中斷

TIM4_EGR=0x01;//允許產生更新事件

TIM4_PSCR=0x07;//計數(shù)器時鐘=主時鐘/128=2MHZ/128

//相當于計數(shù)器周期為64uS

TIM4_ARR=255;//設定重裝載時的寄存器值,255是最大值

TIM4_CNTR=255;//設定計數(shù)器的初值

//定時周期=(ARR+1)*64=16320uS

TIM4_CR1=0x01;//b0=1,允許計數(shù)器工作

//b1=0,允許更新

//設置控制器,啟動定時器

TIM4_IER=0x01;//允許更新中斷

_asm("rim");//允許CPU全局中斷

while(1)//進入無限循環(huán)

{

}

}

@far@interruptvoidTIM4_UPD_OVF_IRQHandler(void)

{

TIM4_SR1=0x00;//清除更新標志

PD_ODR=PD_ODR^0x08;//LED驅動信號取反

//LED閃爍頻率=2MHZ/128/255/2=30.63

}

0

16位定時器:

main()

{

//首先初始化GPIO

PD_DDR=0x08;

PD_CR1=0x08;//將PD3設置成推挽輸出

PD_CR2=0x00;

//然后初始化定時器4

TIM2_IER=0x00;//禁止中斷

TIM2_EGR=0x01;//允許產生更新事件

TIM2_PSCR=0x01;//計數(shù)器時鐘=主時鐘/128=2MHZ/2

//相當于計數(shù)器周期為1uS

//設定重裝時的寄存器值

//注意必須保證先寫入高8位,再寫入低8位

TIM2_ARRH=0xEA;//設定重裝載時的寄存器的高8位

TIM2_ARRL=0x60;

TIM2_CNTRH=0xEA;//設定計數(shù)器的初值

TIM2_CNTRL=0x60;

//定時周期=1*60000=60000uS=60ms

TIM2_CR1=0x01;//b0=1,允許計數(shù)器工作

//b1=0,允許更新

//設置控制器,啟動定時器

TIM2_IER=0x01;//允許更新中斷

_asm("rim");//允許CPU全局中斷

while(1)//進入無限循環(huán)

{

}

}

//函數(shù)功能:定時器4的更新中斷服務程序

//輸入?yún)?shù):無

//輸出參數(shù):無

//值:無

@far@interruptvoidTIM2_UPD_IRQHandler(void)

{

TIM2_SR1=0x00;//清除更新標志

PD_ODR=PD_ODR^0x08;//LED驅動信號取反

//LED閃爍頻率=2MHZ/2/60000/2=8.3

}



關鍵詞: STM8s定時器time

評論


技術專區(qū)

關閉