[STM8] STM8S105 TIM1 TIM2定时器的定时时间初始化

[复制链接]
1978|1
 楼主| secretuniverse 发表于 2016-4-25 21:29 | 显示全部楼层 |阅读模式
很多刚接触stm8的入门者不知到如何使用TIM1和TIM2的定时器作为定时功能。

下面介绍如下:

TIM1的初始化1us:

系统时钟是16M。
  1. void set_TIM1_nus(u16 nus)
  2. {
  3. /*1u的记数周期*/
  4. /*TIM1_TimeBaseInit(0x0F,TIM1_COUNTERMODE_UP,nus,TIM1_RCR_RESET_VALUE);*/
  5. /* Set the Autoreload value */
  6. TIM1->ARRH = (u8)(nus >> 8);
  7. TIM1->ARRL = (u8)(nus);

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

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

  13. /* Set the Repetition Counter value */
  14. TIM1->RCR = TIM1_RCR_RESET_VALUE;

  15. /*打开1中断*/
  16. /*TIM1_ITConfig( TIM1_IT_UPDATE , ENABLE); */
  17. TIM1->IER |= (u8)TIM1_IT_UPDATE;

  18. /*计时器打开*/
  19. /*TIM1_Cmd(ENABLE); */
  20. TIM1->CR1 |= TIM1_CR1_CEN;

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

  25. }

  26. TIM2的初始化如下:

  27. 初始化为1ms

  28. void time2_set_1ms(void)
  29. {
  30. My_TIM2_TimeBaseInit(TIM2_PRESCALER_16,1000);

  31. My_TIM2_ITConfig( TIM2_IT_UPDATE , ENABLE);

  32. My_TIM2_SetCounter(0x0000);

  33. /*计时器打开*/
  34. My_TIM2_Cmd(ENABLE);
  35. My_TIM2_ClearFlag(TIM2_FLAG_UPDATE);
  36. }

  37. 中断处理部分,两者基本上都是一致的:

  38. 中断处理函数里面清除本次的中断就好了。其他功能自己定义。

  39. TIMx_ClearFlag(TIM_FLAG_UPDATE);


643757107 发表于 2016-4-25 22:00 | 显示全部楼层
最好搞几个参数,自动配置称自己想要的各种情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

55

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部