你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

pwm波设置问题?

[复制链接]
qazplm3218 提问时间:2020-3-19 15:34 /
STM32F103芯片

1、控制PWM的开启状态和关闭状态用什么函数??是TIM_Cmd(TIM1, ENABLE)和TIM_Cmd(TIM1, DISABLE)吗?
2、如何在上电开机状态和PWM关闭状态下,使两组互补的PWM都为高电平(H桥电路设计,没有PWM输出时都是高电平)?现在因为是互补的关系,所以两组PWM默认情况下电平都是反向的。

PWM波初始化程序:
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
                 
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_Pulse = 0;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;     
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

        TIM_OC1Init(TIM1, &TIM_OCInitStructure);
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);
       
        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
        TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);

        TIM_ARRPreloadConfig(TIM1, ENABLE);
        TIM_Cmd(TIM1, ENABLE);  //使能TIM1
        TIM_CtrlPWMOutputs(TIM1, ENABLE);

收藏 评论5 发布时间:2020-3-19 15:34

举报

5个回答
子曰好人 回答时间:2020-3-19 16:16:23
关闭某个管脚的PWM只需要Disable相关通道即可
  1. TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;     
  2. TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
复制代码

这两句代码是表明空闲时引脚状态的

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

qazplm3218 回答时间:2020-3-19 20:06:01
子曰好人 发表于 2020-3-19 16:16
关闭某个管脚的PWM只需要Disable相关通道即可

这两句代码是表明空闲时引脚状态的 ...

设置成这个,还是一样,没有效果??
TIM_OCInitStructure.TIM_OCIdleState =  TIM_OCIdleState_Set;                //TIM_OCIdleState_Reset     
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Set;                //TIM_OCIdleState_Reset
七哥 回答时间:2020-3-20 02:10:07
qazplm3218 发表于 2020-3-19 20:06
设置成这个,还是一样,没有效果??
TIM_OCInitStructure.TIM_OCIdleState =  TIM_OCIdleState_Set;                // ...

TIM_OCIdleState_Set
TIM_OCNIdleState_Set
这两个还是有点区别的
TIM_OCNIdleState_Set.jpg

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

qazplm3218 回答时间:2020-3-20 08:35:49
toofree 发表于 2020-3-20 02:10
TIM_OCIdleState_Set
TIM_OCNIdleState_Set
这两个还是有点区别的

你好,想要把两组互补的PWM初始状态和停止状态设置成高电平,要怎么设置?谢谢!!
子曰好人 回答时间:2020-3-20 09:05:12
qazplm3218 发表于 2020-3-19 20:06
设置成这个,还是一样,没有效果??
TIM_OCInitStructure.TIM_OCIdleState =  TIM_OCIdleState_Set;                // ...

我直接复制你的代码了,没注意看,下面这样写应该就是默认高电平了。建议多看用户手册
  1. TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;     
  2. TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;
复制代码

评分

参与人数 1ST金币 +2 收起 理由
MrJiu + 2 很给力!

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版