STM8S105 PD2 输出PWM

        本电工最近做了一个军工项目,其他不在这里聊了,其中有一个功能是用PWM驱动MOS管,进而驱动加热膜。

硬件简介:

STM8S105C6T6, PD2---光耦----MOS---PI加热盘。

软件简介:

PD2端口,用TIM2_CH3,输出可调的PWM方波。

遇到的问题:

正常配置TIM2为PWM模式,代码都正确,但就是不输出PWM波形。其他两路,TIM2_CH1,TIM2_CH2,同样的代码,配置,都正常输出PWM波形。

void pwm_init( void )
{
    GPIO_Init( GPIOD, (GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4), GPIO_MODE_OUT_PP_HIGH_FAST );
  
    TIM2_TimeBaseInit( TIM2_PRESCALER_8, 500-1 );
    TIM2_OC1Init( TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 500, TIM2_OCPOLARITY_HIGH );
    TIM2_OC1PreloadConfig( ENABLE );
    
    TIM2_OC2Init( TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 500, TIM2_OCPOLARITY_HIGH );
    TIM2_OC2PreloadConfig( ENABLE );
    
    TIM2_OC3Init( TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 500, TIM2_OCPOLARITY_HIGH );
    TIM2_OC3PreloadConfig( ENABLE );
    
    TIM2_Cmd( ENABLE );
}
void SetTIM2_PWM_DutyCycle( uint8_t Chx,uint16_t TIM2_Pulse )
{
  if(Chx == FAN_EX)
  {
    TIM2->CCR1H = ( uint8_t )( TIM2_Pulse >> 8 );
    TIM2->CCR1L = ( uint8_t )( TIM2_Pulse );
    
    TIM2->CCR2H = ( uint8_t )( TIM2_Pulse >> 8 );
    TIM2->CCR2L = ( uint8_t )( TIM2_Pulse );
  }
  else if(Chx == FAN_IN)
  {
    TIM2->CCR3H = ( uint8_t )( TIM2_Pulse >> 8 );
    TIM2->CCR3L = ( uint8_t )( TIM2_Pulse );
  }
}


 

解决办法:

遇到问题,电工第一想着就是翻DATA SHEET,这个是个好习惯,比百度,论坛等,找问题要来的直接,干脆,不耽误时间。翻到下图这个地方,问题解决,还是原来的代码不变,只需要把option byte用STVP改一下,烧录一下即可。如下图的DATA SHEET,对于PD2口作为TIM2_CH3的重定义说明。需要把option byte AFR1 配置成1,如下图所示:

1

2

有任何问题,随时交流

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值