STM8S_库函数_TIM2定时器自动装载使用

大家好,我是单片机爱好者-MCU起航。这一节我们介绍如何使用库函数方式控制STM8S103F3P6片上的定时器2,也就是TIM2。前面几节说了TIM1的用法,包括基本的定时、捕获、输入PWM测量、输出PWM。TIM2的功能其实和TIM1类似,只是没有那么强大。所以我们只看其中比较常见的功能:定时和PWM输出。

这一节先研究下定时功能。

关于TIM2,我先放一个数据手册里的截图,了解它的主要功能:

可以看到,计数、自动装载、预分频器、输入捕获、输出比较、PWM生成、单脉冲,这些功能TIM2都有,所以它也是很强大的。

这里我们通过代码实现一个简单的功能:500ms一次中断。

用到的功能:分频,向上计数,自动重装载。

代码如下:

/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
#include "timer2_config.h"
/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
void Delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {   
    nCount--;
  }
}
void main(void)
{
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4);
  GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_SLOW);
  timer2_init();
  while (1);
  
}

跟TIM1的定时中断类似,主函数里先初始化PB4,然后对TIM2进行初始化,代码如下:

#include "timer2_config.h"

/***************************************
*               TIMER2初始化
*               0.5秒一次中断
***************************************/
void timer2_init(void)
{
  disableInterrupts();
  TIM2_DeInit();
  TIM2_TimeBaseInit(TIM2_PRESCALER_16, 62499);
  TIM2_Cmd(ENABLE);
  TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
  enableInterrupts();
}

函数名字都很简单,我就说下这一行的功能:

TIM2_TimeBaseInit(TIM2_PRESCALER_16, 62499);

TIM2的时基初始化,系统时钟做16分频然后提供给TIM2,定时周期为62499+1,也就是62500.

系统时钟为2MHZ,16分频后是125000,62500刚好是它的一半,也就是0.5秒。

中断部分的代码如下:

 INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
 {
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
  TIM2_ClearITPendingBit(TIM2_IT_UPDATE);
  GPIO_WriteReverse(GPIOB, GPIO_PIN_4);
 }

功能也很简单,清除TIM2的中断标志,然后PB4状态翻转。

最后,编译、下载、上电,功能正常!

打完收工!

要获取该程序完整的工程文件,可以关注公众号:单片机爱好者,然后回复关键词:STM8S。可以获取完整的下载链接,里面包含工程文件、视频、PPT、数据手册等所有相关资料。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据