STM8S_库函数_TIM1输出PWM信号

大家好,我是单片机爱好者-MCU起航。这一节依然介绍如何使用库函数方式控制STM8S103F3P6片上的定时器1,也就是TIM1。上一节说了如何使用TIM1测量PWM的周期和占空比,这一节看一下如何使用TIM1来输出一个我们想要的PWM。

学过51,或者有一些基础的同学应该都比较熟悉了。脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。

PWM可以用来控制风扇转速,呼吸灯,甚至有的人用高速PWM实现简易的DA输出的功能。用途是非常广泛的!

在89C51或者89C52的单片机里面,如果要生成一个PWM波形,怎么操作?

1、用定时器算好高电平、低电平持续的时间,开启。

2、时间到了以后,进入中断,更新。

3、如此循环。

这样有什么问题?

1、频繁的进入中断,占用CPU资源。

2、PWM频率不能太高。

在STM8或者其它的高级单片机中,是如何生成PWM的呢?

首先,还是要用到定时器。

第二,该定时器中有相关的PWM寄存器,可以配置频率,占空比,极性等。

第三,启动,然后就完了。

优点非常明显:配置简单,使用简单,不用频繁的进入中断。

接下来,我们实习一个简单的PWM功能,要求如下:2MHZ的时钟下,PWM周期设置为4096个时钟周期,占空比为四分之一,也就是1024。

代码如下:

/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
#include "timer1_config.h"

/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
void Delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {   
    nCount--;
  }
}
void main(void)
{
  GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_SLOW);
  timer1_init();
  Delay(20000);
  while(1);
  
}

其实延时的部分是没有什么作用的,只是随便放在这里。通过代码可以看出来,使用的通道还是TIM1的通道3,也就是PC3。

关于PWM的具体参数,在函数timer1_init()里,该函数代码如下:

#include "timer1_config.h"
#include "uart.h"
#define CCR1_Val  ((uint16_t)1023)
/***************************************
*               TIMER1初始化
*           输出PWM,设置占空比和周期
***************************************/
void timer1_init(void)
{

  TIM1_DeInit();  
  
  TIM1_TimeBaseInit(0x0000, TIM1_COUNTERMODE_UP, 4095, 0x00);

  TIM1_OC3Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, 
  TIM1_OUTPUTNSTATE_DISABLE, 
               CCR1_Val, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH,
               TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);

  TIM1_Cmd(ENABLE);
  TIM1_CtrlPWMOutputs(ENABLE);
  
}

根据函数名称,我们可以知道这些代码的功能:

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

2、TIM1时基初始化:不分频、向上计数、时基周期为4096个时钟周期、没有重复计数。

3、TIM1的通道3初始化:PWM1模式、输出或输入启用、禁止互补输出、占空比、(后面几个意义不大)输出比较极性、互补输出比较极性、输出比较空闲状态、互补输出比较空闲状态。

4、TIM1使能。

5、TIM1的PWM输出使能。

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

打完收工!至此,TIM1的功能基本聊完了!

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

发表评论

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