stm32高级定时器的互补输出pwm空闲电平设置问题

2019-07-20 04:51发布

想通过配置 stm32 的 TIM1 输出1ms 5个的 200KHz 的互补PWM,希望两路互补PWM空闲时均为低电平。

方法为在TIM更新中断函数中通过全局变量自加到5,改变 CCxE CCxEN 来控制PWM的开关。结果发现两路空闲时均为高电平。
1.尝试过 TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_ForcedAction_InActive)  和 TIM_ForcedOC2Config(TIM1, TIM_ForcedAction_InActive),发现只能对互补路有效果,另外一路不论在pwm工作或空闲都一直保持高电平没有pwm。


2.修改OSSR OSSI OCPolarity IdelState等均无效果,两路空闲时依旧是高电平。


3.采用重复计数器关闭TIM计数器的方式,两路互补电平为一高一低

调了好多天了依然不出效果,很急,有没有前辈有类似经验啊?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
szczyb1314
1楼-- · 2019-07-22 03:06
代码在公司电脑上,发不上来
你的需求:输出PWM,空闲的时候输出PWM的引脚是固定的低电平?
我的做法:需要输出PWM时,初始化定时器输出PWM,在空闲的时候初始化这个引脚为普通输出引脚,设置低电平输出。等你再次需要输出PWM时重新初始化为PWM输出即可。
心静
2楼-- · 2019-07-22 06:30
szczyb1314 发表于 2018-11-29 08:18
代码在公司电脑上,发不上来
你的需求:输出PWM,空闲的时候输出PWM的引脚是固定的低电平?
我的做法:需 ...

是的,我的需求就是在关闭定时器后,是固定的低电平,(因为我是隔一段时间发几个脉冲),昨天试了一下,改成IO模式,也就是(GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能)改成输出模式,然后确实可以拉低,但是再改成复用模式后,就没有PWM产生了;
心静
3楼-- · 2019-07-22 09:52
 精彩回答 2  元偷偷看……
szczyb1314
4楼-- · 2019-07-22 13:04
空闲的时候把定时器失能关掉,初始化为普通IO,设置低电平。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
之后你要初始的啊:GPIO_Init();不调用这个那叫初始化?                                       
然后GPIO_ResetBits();                                               

需要PWM的时候,重新初始PWM功能,定时器使能打开。
直接调用下你的PWM的初始化函数重新从头到尾初始化一遍PWM。
szczyb1314
5楼-- · 2019-07-22 17:23
 精彩回答 2  元偷偷看……
opk666
6楼-- · 2019-07-22 20:48
 精彩回答 2  元偷偷看……

一周热门 更多>