高级会员

- 积分
- 762
- 金钱
- 762
- 注册时间
- 2021-5-18
- 在线时间
- 28 小时
|
在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;
此时示波器的输出如下,
原文链接:http://bj.dyrs.com.cn/story/202111/1164808
|
|