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

来源:互联网 发布:如何下载windows 10 编辑:程序博客网 时间:2024/06/06 07:34

    • 说明
    • 代码

1 说明

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

2 代码

/*TIM2_CH3 PWMPD2 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);}
0 0
原创粉丝点击