打印
[STM8]

stm8 开发例程 一些基础外设-------------PWM

[复制链接]
1060|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenqiang10|  楼主 | 2019-2-28 20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**************************************************************************
* 函数名:PWM_Init
* 描述  :PWM初始化
* 输入  :无
*
* 输出  :无
* 返回  :无
* 调用  :外部调用
*************************************************************************/
void PWM_Init(void)
{
    TIM2_PSCR =0x04;
    /* Set the Autoreload value */
    TIM2_ARRH = (uint8_t)(ARR >> 8);
    TIM2_ARRL = (uint8_t)(ARR);
    /*TIM2 Frequency=16M/16/(499+1)=2K*/
    /* PWM1 Mode configuration: Channel1
    TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%*/
  #if TIM2_Channel==TIM2_Channel1
    /*TIM2 Frequency = TIM2 counter clock/(ARR + 1) */

    TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,250, TIM2_OCPOLARITY_HIGH);


  #elif TIM2_Channel==TIM2_Channel2

    TIM2_OC2Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,500, TIM2_OCPOLARITY_HIGH);


  #elif TIM2_Channel==TIM2_Channel3

    TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,250, TIM2_OCPOLARITY_HIGH);

  #endif

  TIM2_CR1 |= (uint8_t)MASK_TIM2_CR1_CEN;

}

沙发
chenqiang10|  楼主 | 2019-2-28 20:36 | 只看该作者
/**************************************************************************
* 函数名:TIM2_OC1Init
* 描述  :TIM2 第一通道PWM初始化
* 输入  :TIM2_OCMode   常用参数TIM2_OCMODE_PWM1:0x60 ,TIM2_OCMODE_PWM2:0x70
           TIM2_OutputState  TIM2_OUTPUTSTATE_ENABLE:0x11
           TIM2_Pulse     占空比
           TIM2_OCPolarity  TIM2_OCPOLARITY_HIGH:0x00 ,TIM2_OCPOLARITY_LOW:0x22
*
* 输出  :无
* 返回  :无
* 调用  :外部调用
*************************************************************************/
void TIM2_OC1Init(uint8_t TIM2_OCMode,uint8_t TIM2_OutputState,uint16_t TIM2_Pulse,uint8_t TIM2_OCPolarity )
{
      /* Disable the Channel 1: Reset the CCE Bit, Set the Output State , the Output Polarity */
    TIM2_CCER1 &= (uint8_t)(~( MASK_TIM2_CCER1_CC1E | MASK_TIM2_CCER1_CC1P));
    /* Set the Output State &  Set the Output Polarity  */
    TIM2_CCER1 |= (uint8_t)((uint8_t)(TIM2_OutputState & MASK_TIM2_CCER1_CC1E ) |
                             (uint8_t)(TIM2_OCPolarity & MASK_TIM2_CCER1_CC1P));

    /* Reset the Output Compare Bits  & Set the Ouput Compare Mode */
    TIM2_CCMR1 = (uint8_t)((uint8_t)(TIM2_CCMR1 & (uint8_t)(~(uint8_t)MASK_TIM2_CCMR1_OC1M)) |
                            (uint8_t)TIM2_OCMode);
    /* Set the Pulse value */
    TIM2_CCR1H = (uint8_t)(TIM2_Pulse >> 8);
    TIM2_CCR1L = (uint8_t)(TIM2_Pulse);
    TIM2_CCMR1 |= (uint8_t)MASK_TIM2_CCMR1_OC1PE;
}

使用特权

评论回复
板凳
chenqiang10|  楼主 | 2019-2-28 20:37 | 只看该作者
/**************************************************************************
* 函数名:TIM2_OC2Init
* 描述  :TIM2 第二通道PWM初始化
* 输入  :TIM2_OCMode   常用参数TIM2_OCMODE_PWM1:0x60 ,TIM2_OCMODE_PWM2:0x70
           TIM2_OutputState  TIM2_OUTPUTSTATE_ENABLE:0x11
           TIM2_Pulse     占空比
           TIM2_OCPolarity  TIM2_OCPOLARITY_HIGH:0x00 ,TIM2_OCPOLARITY_LOW:0x22
*
* 输出  :无
* 返回  :无
* 调用  :外部调用
*************************************************************************/
void TIM2_OC2Init(uint8_t TIM2_OCMode,uint8_t TIM2_OutputState,uint16_t TIM2_Pulse,uint8_t TIM2_OCPolarity )
{
      /* Disable the Channel 1: Reset the CCE Bit, Set the Output State , the Output Polarity */
    TIM2_CCER1 &= (uint8_t)(~(MASK_TIM2_CCER1_CC2E | MASK_TIM2_CCER1_CC2P));
    /* Set the Output State &  Set the Output Polarity  */
    TIM2_CCER1 |= (uint8_t)((uint8_t)(TIM2_OutputState & MASK_TIM2_CCER1_CC2E ) |
                             (uint8_t)(TIM2_OCPolarity & MASK_TIM2_CCER1_CC2P));

    /* Reset the Output Compare Bits  & Set the Ouput Compare Mode */
    TIM2_CCMR2 = (uint8_t)((uint8_t)(TIM2_CCMR1 & (uint8_t)(~(uint8_t)MASK_TIM2_CCMR2_OC2M )) |
                            (uint8_t)TIM2_OCMode);
    /* Set the Pulse value */
    TIM2_CCR2H = (uint8_t)(TIM2_Pulse >> 8);
    TIM2_CCR2L = (uint8_t)(TIM2_Pulse);
    TIM2_CCMR2 |= (uint8_t)MASK_TIM2_CCMR2_OC2PE;
}

使用特权

评论回复
地板
chenqiang10|  楼主 | 2019-2-28 22:10 | 只看该作者
/**************************************************************************
* 函数名:TIM2_OC3Init
* 描述  :TIM2 第三通道PWM初始化
* 输入  :TIM2_OCMode   常用参数TIM2_OCMODE_PWM1:0x60 ,TIM2_OCMODE_PWM2:0x70
           TIM2_OutputState  TIM2_OUTPUTSTATE_ENABLE:0x11
           TIM2_Pulse     占空比
           TIM2_OCPolarity  TIM2_OCPOLARITY_HIGH:0x00 ,TIM2_OCPOLARITY_LOW:0x22
*
* 输出  :无
* 返回  :无
* 调用  :外部调用
*************************************************************************/
void TIM2_OC3Init(uint8_t TIM2_OCMode,uint8_t TIM2_OutputState,uint16_t TIM2_Pulse,uint8_t TIM2_OCPolarity )
{
      /* Disable the Channel 1: Reset the CCE Bit, Set the Output State , the Output Polarity */
    TIM2_CCER2 &= (uint8_t)(~( MASK_TIM2_CCER2_CC3E | MASK_TIM2_CCER2_CC3P));
    /* Set the Output State &  Set the Output Polarity  */
    TIM2_CCER2 |= (uint8_t)((uint8_t)(TIM2_OutputState & MASK_TIM2_CCER2_CC3E ) |
                             (uint8_t)(TIM2_OCPolarity & MASK_TIM2_CCER2_CC3P));

    /* Reset the Output Compare Bits  & Set the Ouput Compare Mode */
    TIM2_CCMR3 = (uint8_t)((uint8_t)(TIM2_CCMR1 & (uint8_t)(~(uint8_t)MASK_TIM2_CCMR3_OC3M )) |
                            (uint8_t)TIM2_OCMode);
    /* Set the Pulse value */
    TIM2_CCR3H = (uint8_t)(TIM2_Pulse >> 8);
    TIM2_CCR3L = (uint8_t)(TIM2_Pulse);
    TIM2_CCMR3 |= (uint8_t)MASK_TIM2_CCMR3_OC3PE;
}

使用特权

评论回复
5
chenqiang10|  楼主 | 2019-2-28 22:10 | 只看该作者
void SetTIM2_PWM_Frequency(uint16_t TIM2_Period)
{
      /* Set the Autoreload value */
  
    TIM2_ARRH = (uint8_t)(TIM2_Period >> 8);
    TIM2_ARRL = (uint8_t)(TIM2_Period);
}

使用特权

评论回复
6
chenqiang10|  楼主 | 2019-2-28 22:13 | 只看该作者
void SetTIM2_PWM_DutyCycle( uint16_t TIM2_Pulse)
{
  
   
  #if TIM2_Channel==TIM2_Channel1
    /* Set the Pulse value */
    TIM2_CCR1H = (uint8_t)(TIM2_Pulse >> 8);
    TIM2_CCR1L = (uint8_t)(TIM2_Pulse);
   
  #elif TIM2_Channel==TIM2_Channel2
    TIM2_CCR2H = (uint8_t)(TIM2_Pulse >> 8);
    TIM2_CCR2L = (uint8_t)(TIM2_Pulse);
   
  #elif TIM2_Channel==TIM2_Channel3
    TIM2_CCR3H = (uint8_t)(TIM2_Pulse >> 8);
    TIM2_CCR3L = (uint8_t)(TIM2_Pulse);
   
  #endif
}

使用特权

评论回复
7
guanjiaer| | 2019-3-11 13:11 | 只看该作者
控制电机的无上利器啊

使用特权

评论回复
8
heimaojingzhang| | 2019-3-11 13:41 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
9
keaibukelian| | 2019-3-11 14:16 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
10
chenqiang10|  楼主 | 2019-3-16 21:33 | 只看该作者

不客气,好东西大家分享啊

使用特权

评论回复
11
chenqiang10|  楼主 | 2019-3-16 21:34 | 只看该作者

一起学习,开发stm8s

使用特权

评论回复
12
chenqiang10|  楼主 | 2019-3-16 21:34 | 只看该作者
guanjiaer 发表于 2019-3-11 13:11
控制电机的无上利器啊

是啊,电机转速还是不太好控制的。

使用特权

评论回复
13
guanjiaer| | 2019-4-1 11:45 | 只看该作者
chenqiang10 发表于 2019-3-16 21:34
是啊,电机转速还是不太好控制的。

不是不太好  是很不好啊

使用特权

评论回复
14
keaibukelian| | 2019-4-1 12:03 | 只看该作者
chenqiang10 发表于 2019-3-16 21:34
一起学习,开发stm8s

是呢 一起学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

940

帖子

1

粉丝