stm32f103 TIM1主从模式精确控制脉冲踩坑

一、背景:

博主使用TIM1主定时器-TIM4从定时器(发波引脚TIM1-CH4:PA11),TIM3主-TIM2从(发波引脚TIM3-CH1:PA6)控制电机,调试通过,方法参考下文:

STM32:F103/F407定时器主从模式输出精准脉冲个数_f103 pwm 脉冲计数-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_40435336/article/details/110938978二、踩坑问题:

因工程需求,需增加两对(四路)波形,因F103主从定时器配对资源有限,对TIM1与TIM3分时复用,新增了PA8(TIM1-CH1),PA9(TIM1-CH2),P7(TIM3-CH2),PB0(TIM3-CH3)作为发波引脚,设置参数照搬第一步,调试过程中用示波器验证波形,发现PA8与PA9的实际频率始终比代码设置频率大100HZ,PA11频率一直准确。

正确波形:设置2.8实际2.8

异常波形:设置2.8实际2.9

因TIM3(通用)新增两路波形都正常,而TIM1(高级)异常,猜想是高级定时器的特殊设置;另外PA11频率准确,而PA8、PA9频率不准,可能与通道号也有关。

走查代码后发现,TIM_OCxInit函数,x=1~3的配置流程与x=4不一样,对比如下图

x=1~3

x=4

只有高级定时器CH1~CH3才有互补通道,而博主之前使用的TIM1-CH4没有互补通道,不对TIM_OCIdleState进行设置,缺省值也能正确发波。

三、解决方法

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset(Set还是Reset请根据你实际配置的OC极性去配置)

补充TIM_OCIdleState的设置后。PA8、PA9的频率就准确了。

博主又测了一下PB14(TIM1-CH2N),作为N通道,把TIM_OutputNState、TIM_OCNPolarity、TIM_OCNIdleState配好了也能正确发波。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值