STM32 PWM输出极性的实验

在PWM模式2中,CNT<CCR时输出无效电平,CNT>CCR时输出有效电平。

PWM的有效输出电平在TIMx_CCER寄存器设置。

TIMx_CCER.1为0,OC1高电平有效;TIMx_CCER.1为1,OC1低电平有效。其他通道同理。

在PWM初始化函数中,通过TIM_OCInitStructure.TIM_OCPolarity设置输出极性,

    //配置PWM模式(TIMx_CCMR)
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    //配置输出使能(TIMx_CCER)  0:禁止输出  1:输出到对应引脚
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    //配置输出极性(TIMx_CCER)  0:OCx高电平有效  1:OCx低电平有效
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    //配置CCR寄存器(TIMx_CCRx) 16位宽
    TIM_OCInitStructure.TIM_Pulse = 64;
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);

如下代码摘自库函数TIM_OC2Init,说明在PWM初始化过程中确实是通过配置CCER寄存器对应位设置PWM的输出极性。

  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4);

下面通过示波器实验PWM的输出极性控制,

    //配置PWM模式(TIMx_CCMR)
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    //配置输出使能(TIMx_CCER)  0:禁止输出  1:输出到对应引脚
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    //配置输出极性(TIMx_CCER)  0:OCx高电平有效  1:OCx低电平有效
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    //配置CCR寄存器(TIMx_CCRx) 16位宽
    TIM_OCInitStructure.TIM_Pulse = 64;
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);

    //使能OC2的预装载寄存器(TIMx_CCMR.11)
    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
		
    //TIM_Cmd(TIM3, ENABLE);

如上代码设置,初始化TIM_OC2Init后,PWM输出即刻接到对应引脚PA7,此时CCR2寄存器内的值64与定时器计数值比较,因为我们没有打开定时器,所以此时CNT寄存器为0,有CNT < CCR2,在PWM Mode2下,输出无效电平,如上代码设置有效电平为低电平(即无效电平为高电平),因此此时应该输出高电平,

修改上述代码,将有效电平修改为高电平,

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

此时示波器的输出如下,

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值