新闻中心

EEPW首页>嵌入式系统>设计应用> STM8S-定时器2的PWM

STM8S-定时器2的PWM

作者: 时间:2016-11-26 来源:网络 收藏
//软件环境:IAR FOR STM8 V1.0

//作者:Nicole

本文引用地址://m.amcfsurvey.com/article/201611/321594.htm

//功能:定时器2PWM功能,控制小灯的亮灭间隔

//日期:2010.11.10

#include "iostm8s207k6.h"
void CLK_Init(void);
void TIM_Init(void);

// 函数功能:延时函数
// 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ

void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms != 0)
{
for(i=0;i<250;i++)
{
}
for(i=0;i<75;i++)
{
}
ms--;
}
}
// 函数功能:初始化时钟

void CLK_Init()
{
CLK_CKDIVR = 0x08;//8Mhz
}


// 函数功能:初始化定时器2的通道2,用于控制LED的亮度
void TIM_Init()
{
TIM2_CCMR1 = TIM2_CCMR1 | 0x70;// Output mode PWM2.
// 通道2被设置成比较输出方式
// OC2M = 111,为PWM模式2,
// 向上计数时,若计数器小于比较值,为无效电平
// 即当计数器在0到比较值时,输出为1,否则为0
TIM2_CCER1 = TIM2_CCER1 | 0x03;// CC polarity low,enable PWM output*/
// CC1P = 1,低电平为有效电平
// CC1E = 1,开启输出引脚

//初始化自动装载寄存器,决定PWM方波的频率,Fpwm=1000000/1000=1Khz

TIM2_ARRH = 0x03;// 自动重载寄存器ARR=0x03e8=1000
TIM2_ARRL = 0xe8;// 每记数500次产生一次中断,即1000ms

//初始化比较寄存器,决定PWM方波的占空比

TIM2_CCR1H = 0;
TIM2_CCR1L = 0;

// 初始化时钟分频器为1,即计数器的时钟频率为Fmaster=8Mhz/2*2*2=1000000

TIM2_PSCR = 0x03;

// 启动计数

TIM2_CR1 = TIM2_CR1 | 0x01;

}


main()

{
CLK_Init();// 初始化时钟
TIM_Init();// 初始化定时器

while(1)// 进入无限循环
{
TIM2_CCR1H = 0x01;
TIM2_CCR1L = 0xf4;
}

}



关键词:STM8S定时器PW

评论


技术专区

关闭