STM8S105 TIM1 TIM2 定時器的定時時間初始化

很多剛接觸STM8單片機的入門者不知到如何使用TIM1和TIM2的定時器作爲定時功能。

下面介紹如下:

TIM1的初始化1us:

系統時鐘是16M。

void set_TIM1_nus(u16 nus)
{
 /*1u的記數週期*/
 /*TIM1_TimeBaseInit(0x0F,TIM1_COUNTERMODE_UP,nus,TIM1_RCR_RESET_VALUE);*/
 /* Set the Autoreload value */
 TIM1->ARRH = (u8)(nus >> 8);
 TIM1->ARRL = (u8)(nus);

 /* Set the Prescaler value */
 TIM1->PSCRH = (u8)(0x0F >> 8);
 TIM1->PSCRL = (u8)(0x0F);

 /* Select the Counter Mode */
 TIM1->CR1 = (u8)(((TIM1->CR1) & (u8)(~(TIM1_CR1_CMS | TIM1_CR1_DIR))) | (u8)(TIM1_COUNTERMODE_UP));

 /* Set the Repetition Counter value */
 TIM1->RCR = TIM1_RCR_RESET_VALUE;
 
 /*打開1中斷*/
 /*TIM1_ITConfig( TIM1_IT_UPDATE , ENABLE); */
 TIM1->IER |= (u8)TIM1_IT_UPDATE;
 
 /*計時器打開*/
 /*TIM1_Cmd(ENABLE); */
 TIM1->CR1 |= TIM1_CR1_CEN;

 /*TIM1_ClearFlag(TIM1_FLAG_UPDATE); */
   /* Clear the flags (rc_w0) clear this bit by writing 0. Writing ??has no effect*/
 TIM1->SR1 = (u8)(~(u8)(TIM1_FLAG_UPDATE));
 TIM1->SR2 = (u8)((u8)(~((u8)((u16)TIM1_FLAG_UPDATE >> 8))) & (u8)0x1E);

}

TIM2的初始化如下:

初始化爲1ms

void time2_set_1ms(void)
{
 My_TIM2_TimeBaseInit(TIM2_PRESCALER_16,1000);

 My_TIM2_ITConfig( TIM2_IT_UPDATE , ENABLE);
 
 My_TIM2_SetCounter(0x0000);
 
 /*計時器打開*/
 My_TIM2_Cmd(ENABLE);
 My_TIM2_ClearFlag(TIM2_FLAG_UPDATE);
}

中斷處理部分,兩者基本上都是一致的:

中斷處理函數裏面清除本次的中斷就好了。其他功能自己定義。

TIMx_ClearFlag(TIM_FLAG_UPDATE);

 

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