STM8學習筆記---定時器 TIM2功能實現

STM8的TIM2、TIM3、TIM5是16位通用寄存器,他們的操作方法一樣。
在這裏插入圖片描述
主要功能如下在這裏插入圖片描述
相關寄存器如下:
在這裏插入圖片描述
如果只用到定時功能的話,需要用到的寄存器有自動裝載寄存器ARR、預分頻寄存器PSCR、事件產生寄存器EGR、狀態寄存器SR、控制寄存器CR、中斷使能寄存器IER。
此處用TIM2實驗,定時器2初始化代碼如下:

void Timer2_Init( void )
{
    TIM2_ARRH = ( unsigned char )( 1000 >> 8 );         //定時1ms
    TIM2_ARRL = ( unsigned char )( 1000 );
    TIM2_PSCR = 0x04;         // 16M / (2^4) =1M        //分頻值
   
    TIM2_EGR = 0x01;                             		//產生更新事件
    TIM2_SR1 = ( ~0x01 );                        		//清除更新中斷標誌
    TIM2_CR1 |= 0x01;                                   //使能計數器
    TIM2_IER |= 0x01;                          		 	//更新中斷使能
}

首先設置自動重裝載值,此處設置爲1000,也就是計數器從0開始計數,當計數到1000時,產生一箇中斷,然後從0開始重新計數。
下來設置分頻係數
在這裏插入圖片描述
系統默認使用的是內部16M晶振,設置分頻值爲4,定時器頻率就爲16M / ( 2^4 ) = 1MHz,計數值設置爲1000,這樣中斷一次就是1ms。
下來使能計數器,開啓更新中斷。這樣定時器初始化工作就設置完成了。
下來編寫中斷函數

#pragma vector  =  15                          // IAR中的中斷號,要在STVD中的中斷號上加2
__interrupt void Timer2_Handle( void )         //1ms 定時中斷
{
    TIM2_SR1 = ( ~0x01 );                      //清除更新中斷標誌
    time_cnt++;
    if( time_cnt > 999 )
    {
        time_cnt = 0;
        LED = !LED;
    }
}

進入中斷函數中首先清除中斷標誌位,下來統計中斷次數,因爲中斷1次爲1ms,當時間到達1s後,對LED燈狀態取反。這樣通過定時器2的定時功能就可以實現LED燈1s中閃爍一次。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章