打印

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

[复制链接]
24434|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
关注,,

使用特权

评论回复
5
01dxwlm| | 2014-1-21 16:14 | 只看该作者
在使用 TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_InActive) 后再使用TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_Active),为啥也不会有PWM输出?

使用特权

评论回复
6
明月小厨| | 2014-1-23 12:35 | 只看该作者
这个问题提的非常好,我改天做相关的测试。把PWM设为超慢速,然后观察。

使用特权

评论回复
7
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);您可以详细解释一下吗?

使用特权

评论回复
8
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”,替换掉估计就可以了

使用特权

评论回复
9
abcd1234xyz| | 2014-5-15 14:09 | 只看该作者
通过TIM_ForcedOC1Config函数可以实现强制输出高或低,但是之后要重新打开PWM输出怎么实现呀?

使用特权

评论回复
10
zkmcu| | 2014-10-17 21:51 | 只看该作者
同问,强制关闭后,如何重新开PWM

使用特权

评论回复
11
yc_xpg| | 2014-11-24 12:00 | 只看该作者
重新打开PWM需要调用库函数 TIM_SelelctOCxM函数设为你需要的PWM模式,这个函数也可以设为强制PWM输出高低电平

使用特权

评论回复
12
350182617| | 2014-11-24 13:10 | 只看该作者
我也刚遇到这个问题,试了很多都没有效果,只能把占空比调成0,暂时是解决了这个问题,不知有没有隐患存在。。。

使用特权

评论回复
13
yanzizoucuole| | 2015-1-6 14:18 | 只看该作者
楼主,强制关闭后,如何重新开PWM!qq多少

使用特权

评论回复
14
81190865| | 2015-1-7 16:12 | 只看该作者
直接重新配置管脚行不行呢?不关闭PWM,只关闭PWM的输出

使用特权

评论回复
15
kuheye| | 2016-7-15 09:19 | 只看该作者
81190865 发表于 2015-1-7 16:12
直接重新配置管脚行不行呢?不关闭PWM,只关闭PWM的输出

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

不过STM8不知道是否可以,至少要注意不能设置成"上拉输入"

使用特权

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

本版积分规则

177

主题

9320

帖子

24

粉丝