STM8S_库函数_TIM2输出PWM信号

大家好,我是单片机爱好者-MCU起航。这一节介绍如何使用库函数方式控制STM8S103F3P6片上的定时器2,也就是TIM2。上一节说了TIM2定时器自动装载,这一节看一下如何使用TIM2来输出一个我们想要的PWM。

其实PWM的功能是比较简单的,而且在讲TIM1的时候已经说过了。而TIM2的PWM功能和TIM1是很像的,所以这一节我们一切从简。毕竟在库函数方式下,很多操作都是非常方便的。

直接上例子,这次我们直接让TIM2的通道1输出一个PWM。具体需求:16MHZ的时钟下,PWM周期设置为1000微秒,占空比为800,管脚位置如图:

PD4,刚好是STM8S103F3P6的1号管脚。具体代码如下:

/* 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_HSIDIV1);
  GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);
  timer2_init();
  while(1);
  
}

主函数里的代码比较简单,和之前不一样的地方在于多了一个系统时钟的频率设置。之前提过,STM8S103的单片机出厂的时候默认使用内部的RC提供时钟,频率最高16MHZ,出厂时设置为2MHZ。这个频率我们是可以通过寄存器或者库函数修改的,修改方法也很简单。

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

1分频,其实就是不分频,因为16/1还是16.

然后一个GPIO初始化,一个TIM2初始化,然后就是while(1)原地踏步。

看下TIM2初始化的代码:

#include "timer2_config.h"
#include "uart.h"
#define CCR1_Val  ((uint16_t)800)
/***************************************
*               TIMER1初始化
*           检测外部频率和脉冲
***************************************/
void timer2_init(void)
{

  TIM2_DeInit();  
  
  TIM2_TimeBaseInit(TIM2_PRESCALER_16, 1000-1);

  TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 800, TIM2_OCPOLARITY_HIGH);

  /* TIM1 counter enable */
  TIM2_Cmd(ENABLE);
  
}

函数功能也比较简单。

1、TIM2的寄存器恢复默认设置。

2、TIM2的时基初始化,系统时钟16分频,定时周期1000个周期。因为系统时钟是16MHZ,16分频后是1MHZ,一个周期是1us,1000个刚好1000微秒。

3、TIM2的PWM输出初始化,PWM1功能使能,输出状态使能,占空比800,输出比较极性为高电平。

4、TIM2启动。

最后,编译、下载、上电,使用示波器或者虚拟示波器观察PD4管脚的输出信号,功能正常!

打完收工!

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

《STM8S_库函数_TIM2输出PWM信号》有2条留言

留下评论

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