打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM8S系列单片机TIM1的PWM配置与TIM2的区别

为什么STM8的PWM用TIM1不能输出,TIM2可以,下面针对TIM1的PWM输出做了下列程序代码的编写。

STM8S系列单片机

PC1管脚来控制PWM的输出,即TIM1_CH1通道

PC2管脚来控制PWM的输出,即TIM1_CH2通道

PC3管脚来控制PWM的输出,即TIM1_CH3通道

 

//PWM初始化
void Driver_PWMON(u8 ch,u8 Num)

    //开TIM1时钟
    CLK->PCKENR1 |= CLK_PCKENR1_TIM1;
    
    //设置PWM频率,Fpwm=Fmaster/TIM2_ARR 
    //这里Fpwm = 2000000/100 = 20K
    TIM1->ARRH = 0;
    TIM1->ARRL = 100;
                    
    //启动计数,开始PWM输出
    TIM1->BKR |= TIM1_BKR_MOE;
    
    switch(ch)
    {
        case 1:
            
            TIM1->CCMR1 |= 0x70;//设置TIM1_CH1为PWM模式2 有效电平为高电平
            
            pwm_ch_on(1);//开启TIM1_CH1 通道输出
                        
            TIM1->CCR1H = 0;//初始化PWM通道占空比 1:1   
            TIM1->CCR1L = Num;
            break;
        case 2:
            TIM1->CCMR2 |= 0x70;//设置TIM1_CH2为PWM模式2 有效电平为高电平
            
            pwm_ch_on(2);//开启TIM1_CH1 通道输出
                        
            TIM1->CCR2H = 0;//初始化PWM通道占空比 1:1   
            TIM1->CCR2L = Num;
            break;
        case 3:
            TIM1->CCMR3 |= 0x70;//设置TIM1_CH3为PWM模式2 有效电平为高电平
            
            pwm_ch_on(3);//开启TIM1_CH1 通道输出
                        
            TIM1->CCR3H = 0;//初始化PWM通道占空比 1:1   
            TIM1->CCR3L = Num;
            break;
        case 4:
            TIM1->CCMR4 |= 0x70;//设置TIM1_CH4为PWM模式2 有效电平为高电平
            
            pwm_ch_on(4);//开启TIM1_CH1 通道输出
                        
            TIM1->CCR4H = 0;//初始化PWM通道占空比 1:1   
            TIM1->CCR4L = Num;
            break;
    }
    TIM1->CR1 |= TIM1_CR1_CEN;
}

//PWM占空比调节 0-100
void Driver_PWMSet(u8 ch,u8 Num)
{
    if(Num > 100)
          return;
    switch(ch)
    {
        case 1:
             TIM1->CCR1L = Num;
            break;
        case 2:
            TIM1->CCR2L = Num;
            break;
        case 3:
            TIM1->CCR3L = Num;
            break;
        case 4:
            TIM1->CCR4L = Num;
            break;
    }
}

//打开PWM通道
void pwm_ch_on(u8 ch)
{
    switch(ch)
    {
        case 1:
            TIM1->CCER1 |= 0x01;
            break;
        case 2:
            TIM1->CCER1 |= 0x10;
            break;
        case 3:
            TIM1->CCER2 |= 0x01;
            break;
        case 4:
            TIM1->CCER2 |= 0x10;
            break;
    }
}

//关闭PWM通道
void pwm_ch_close(u8 ch)
{
    switch(ch)
    {
        case 1:
            TIM1->CCER1  &= ~0x01;
            break;
        case 2:
            TIM1->CCER1  &= ~0x10;
            break;
        case 3:
            TIM1->CCER2  &= ~0x01;
            break;
        case 4:
            TIM1->CCER2  &= ~0x10;
            break;
    }
}

//运行主函数

int main(void)

  Driver_PWMON(1,0);
  Driver_PWMON(2,0);
  Driver_PWMON(3,0);
  while(1)
  { 
     u8 a= 0,b=0;
    for(b=1 ;b<4; b++)
    {
      for(a=1;a<99;a++)
      {
        Driver_PWMSet(b,a);
        delay_ms(5);
      }
      for(a=99;a>0;a--)
      {
        Driver_PWMSet(b,a);
        delay_ms(5);
      }
    }
  }
}

 

TIM2的跟TIM1的区别是:TIM1->BKR |= TIM1_BKR_MOE;

TIM2不需要配置这个寄存器。

OCi的输出使能通过(TIM1_CCERi和TIM1_BKR寄存器中)CCiE、MOE、OISi和
OSSR位和OSSI位的组合来控制。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
stm32 TIM定时器 PWM脉冲输出[操作寄存器+库函数]-Changing's Blog
STM32输入捕获简介
电机的速度pid闭环控制代码及注释
详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!
独立键盘扫描程序,带松手检测,可区别长击与短击
STM32学习笔记一一PWM 输出
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服