关于STM32的PWM快速打开/关闭,以及空闲时管脚电平设置

[复制链接]
 楼主| mohanwei 发表于 2009-10-28 09:43 | 显示全部楼层 |阅读模式
现在使用TIM3来产生PWM波形,并通过软件打开/关闭PWM以实现调制波形。做法是:
打开:TIM_Cmd(TIM3, ENABLE);
关闭:TIM_Cmd(TIM3, DISABLE);
跟踪到TIM_Cmd之后,发现直接操作寄存器就可以了:TIMx->CR1 |= CR1_CEN_Set;
这个问题算解决了。
但是PWM关闭后,管脚电平是高电平,这不是我需要的……需要的是低电平。尝试关闭PWM后,加一行GPIO_ResetBits(GPIOC, GPIO_Pin_6);以把管脚设置为低电平。测试代码:
while(1)
{
       ENABLE_PWM();
        Delay_ms(10);//延时若干ms
        DISABLE_PWM();
        GPIO_ResetBits(GPIOC, GPIO_Pin_6);
        Delay_ms(10);//延时若干ms
}
用示波器观测了一下,发现PWM关闭期间管脚电平有时是高电平,有时是低电平……查找手册也没找到相关说法。用TIM_OC1Init()把TIM3重新配置一下倒是可以解决,但是速度太慢了。不知香水城有什么好办法没有?
香水城 发表于 2009-10-28 10:00 | 显示全部楼层
“PWM关闭期间管脚电平有时是高电平,有时是低电平”,这是因为你关闭输出的时机不对。如果希望关闭PWM时,引脚为低,则应在PWM输出低时关闭;反之则在PWM输出高时关闭。

如果你使用的是PWM输出模式,每个周期都会有一个更新中断,可以在更新中断关闭PWM输出。

另一个办法是在关闭PWM输出时,设置寄存器转换至强制输出模式。
 楼主| mohanwei 发表于 2009-10-28 17:57 | 显示全部楼层
不错,通过TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_InActive);强制输出低电平解决了,呵呵。
511 发表于 2009-10-28 17:58 | 显示全部楼层
关注,,
01dxwlm 发表于 2014-1-21 16:14 | 显示全部楼层
在使用 TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_InActive) 后再使用TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_Active),为啥也不会有PWM输出?
明月小厨 发表于 2014-1-23 12:35 | 显示全部楼层
这个问题提的非常好,我改天做相关的测试。把PWM设为超慢速,然后观察。
mryw 发表于 2014-2-13 16:30 | 显示全部楼层
mohanwei 发表于 2009-10-28 17:57
不错,通过TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_InActive);强制输出低电平解决了,呵呵。 ...

关闭PWM输出后,我需要的是高电平。怎么通过 TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_InActive);您可以详细解释一下吗?
 楼主| mohanwei 发表于 2014-2-13 16:49 | 显示全部楼层
mryw 发表于 2014-2-13 16:30
关闭PWM输出后,我需要的是高电平。怎么通过 TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_InActive);您 ...

很久没搞这个了,你根据函数名称,搜索到出处,看看注释,看它处理了哪些寄存器,对照着手册研究一下吧……
直觉既然有“TIM_ForcedAction_InActive”这个宏,那么也应该有对应的“TIM_ForcedAction_Active”,替换掉估计就可以了
abcd1234xyz 发表于 2014-5-15 14:09 | 显示全部楼层
通过TIM_ForcedOC1Config函数可以实现强制输出高或低,但是之后要重新打开PWM输出怎么实现呀?
zkmcu 发表于 2014-10-17 21:51 | 显示全部楼层
同问,强制关闭后,如何重新开PWM
yc_xpg 发表于 2014-11-24 12:00 | 显示全部楼层
重新打开PWM需要调用库函数 TIM_SelelctOCxM函数设为你需要的PWM模式,这个函数也可以设为强制PWM输出高低电平
350182617 发表于 2014-11-24 13:10 | 显示全部楼层
我也刚遇到这个问题,试了很多都没有效果,只能把占空比调成0,暂时是解决了这个问题,不知有没有隐患存在。。。
yanzizoucuole 发表于 2015-1-6 14:18 | 显示全部楼层
楼主,强制关闭后,如何重新开PWM!qq多少
81190865 发表于 2015-1-7 16:12 | 显示全部楼层
直接重新配置管脚行不行呢?不关闭PWM,只关闭PWM的输出
kuheye 发表于 2016-7-15 09:19 | 显示全部楼层
81190865 发表于 2015-1-7 16:12
直接重新配置管脚行不行呢?不关闭PWM,只关闭PWM的输出

以前我使用PIC单片机,就是这样处理,不关闭PWM,
只是将I/O设置为输入状态,

不过STM8不知道是否可以,至少要注意不能设置成"上拉输入"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

9320

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部