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);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

goodlinux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值