一、背景:
博主使用TIM1主定时器-TIM4从定时器(发波引脚TIM1-CH4:PA11),TIM3主-TIM2从(发波引脚TIM3-CH1:PA6)控制电机,调试通过,方法参考下文:
因工程需求,需增加两对(四路)波形,因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配好了也能正确发波。