STM8S---定时器产生PWM(TIM2)

原创 2015年07月06日 18:56:49

1 说明

  • 采用STM8S内部时钟(HSI);
  • PWM模式2;
  • 占空比为50%,频率为2Hz(方便测试LED灯);
  • PD2口外接LED灯,PD2口输出PWM波;
  • 系统时钟初始化很重要:CLK_CKDIVR |= 0x08;

2 代码

/*
TIM2_CH3 PWM
PD2 output
*/
#include <STM8S003F3P.h>

void CLK_init(void)
{
    CLK_ICKR |= 0X01;           //使能内部高速时钟 HSI
    CLK_CKDIVR |= 0x08;         //16M内部RC经2分频后系统时钟为8M
    while(!(CLK_ICKR&0x02));    //HSI准备就绪 
    CLK_SWR=0xe1;               //HSI为主时钟源 
}

void Init_Tim2(void)
{
    TIM2_CCMR3 |=   0X70;   //设置定时器2三通道(PD2)输出比较三模式
    TIM2_CCMR3 |= 0X04;     //输出比较3预装载使能

    TIM2_CCER2 |= 0x03;     //通道3使能,低电平有效,配置为输出

    //初始化时钟分频器为1,即计数器的时钟频率为Fmaster=8M/64=0.125MHZ
    TIM2_PSCR = 0X06;   
    //初始化自动装载寄存器,决定PWM 方波的频率,Fpwm=0.125M/62500=2HZ
    TIM2_ARRH = 62500/256;
    TIM2_ARRL = 62500%256;
    //初始化比较寄存器,决定PWM 方波的占空比:5000/10000 = 50%
    TIM2_CCR3H = 31250/256;
    TIM2_CCR3L = 31250%256;


    // 启动计数;更新中断失能
    TIM2_CR1 |= 0x81;
    //TIM2_IER |= 0x00;        
}

void Init_GPIO(void)
{
    /*设置为推挽输出,PD2接了LED灯*/
    PD_DDR |= 0X04;             //设置PD2端口为输出模式
    PD_CR1 |= 0X04;             //设置PD2端口为推挽输出模式
    PD_CR2 &= 0XFD;

    PA_DDR |= 0X08;             //设置PA3端口为输出模式
    PA_CR1 |= 0X08;             //设置PA3端口为推挽输出模式
    PA_CR2 |= 0XF7;
}

void main(void)
{
    CLK_init();
    Init_GPIO();
    Init_Tim2();
    while (1);
}
版权声明:本文为博主[原创]文章,未经博主允许可以转载,注明博客出处:[http://blog.csdn.net/FreeApe]

相关文章推荐

STM8S103之tim2PWM输出

本篇博文最后修改时间:2017年08月12日 10:58。 一、简介 本文以STM8S103F3P6编程为例,介绍STM8S103F3P6定时器2输出PWM。 二、实验平台 ...

STM8S---TIM2产生PWM与TIM1定时器周期中断的时钟问题

1 问题  在下面的测试程序中,如果将Init_CLK()函数中的 CLK_CKDIVR |= 0x08;去掉’|‘,则TIM1的功能实现跟预设定相同(10ms中断一次),但是TIM2的PWM频率就变...
  • FreeApe
  • FreeApe
  • 2015年07月08日 12:48
  • 3686

STM8S的按键PWM调光灯历程

STM8SPWM应用前几天有个项目用到PWM,今天整理下,弄个氛围灯;记录下,以后忘记了返回来还能看看。...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

stm8s003MCU_PWM_引脚功能配置

最近在使用stm8s003MCU进行一款LED灯产品的开发。我使用的是TIM2的PWM输出功能,使用TIM2_CHANNEL3,PA3引脚复用为TIM2_CH3。 一、如何复用PA3引脚为TIM2_...
  • spdian
  • spdian
  • 2017年01月11日 17:11
  • 2359

STM8S003xx学习笔记(2):16位高级控制定时器(TIM1)

在单片机中定时器是一个非常重要的概念,这篇文章主要是对定时器TIM1做一个学习笔记。 1 综述 STM8S003xx只含有TIM1、TIM2、TIM4,其中TIM1是高级控制寄存器,TIM2和TIM4...

STM8 TIM2 定时器的问题

定时50 ms  中断      所用的芯片为STM8S103F3P6,编译器为IAR  ,程序代码如下: // #include "iostm8s105c6.h" #include "iost...

STM8S PWM 应用 呼吸灯

//主功能接受:使用MCU STM8S105C6 的PWM通道2 PC2 来做呼吸灯 已经验证OK,呵 呵,这个PWM设置刚开始用还是有点麻烦,因为是自己摸索,花点时间,还是攻克了 。 //所用子...

STM8 中关于PWM1 和 PWM2的区别

STM8中PWM1和PWM2模式是时钟输出PWM波形控制的一个必选参数,使用库函数原型如下: void TIMx_OC2Init(TIM2_OCMode_TypeDef TIM2_OCMod...

STM32输出PWM时,PWM1和PWM2的区别

TIM_OCMode_PWM2;TIM_OCMode_PWM1 首先,本人虽然初学STM32但极力反对一种误人子弟的观点:“对于STM32这样级别的MCU,有库函数就不用去看寄存器怎么操...
  • kinsno
  • kinsno
  • 2015年07月05日 14:49
  • 7167
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STM8S---定时器产生PWM(TIM2)
举报原因:
原因补充:

(最多只允许输入30个字)