本帖最后由 huo_hu 于 2015-10-16 14:05 编辑
stm32定时器功能之一是同步启动,比如你想让两个定时器tim3和tim4输出完全一模一样的pwm波形这个时候你
TIM_Cmd(TIM3, ENABLE);
TIM_Cmd(TIM4, ENABLE);
不管先开哪一个因为时间差定时器都不可能完全同步,如果能够同步定时器的CNT是完全一模一样的,要完成这个功能需要使用同步触发功能。
下面代码是个例子,目的是tim3为从模式受控于tim4的启动。
u16 tmp=0;
//。。。定时器配置略
TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_Enable);//Tim4使能输出作为触发信号
TIM_SelectInputTrigger(TIM3, TIM_TS_ITR3);//触发选择,ITR3即TIM4
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);//触发模式只启动;门模式起停都控制
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);//主从模式MSM
TIM_Cmd(TIM3, ENABLE);
while (--tmp);
TIM_Cmd(TIM4, ENABLE);//调试截获在这里可以看到tim3的CNT并没有计数
while (--tmp);
TIM_Cmd(TIM4, DISABLE);//这里看到tim4启动后tim3也同时启动
while (--tmp);
TIM_Cmd(TIM4, ENABLE);//调试截获可以看到tim3的CNT和tim4的CNT都有计数并且是完全一样的
while (--tmp);
TIM_Cmd(TIM4, DISABLE);
while (--tmp);
TIM_Cmd(TIM4, ENABLE);//同上
while (--tmp);
TIM_Cmd(TIM4, DISABLE);
while (--tmp);
TIM_Cmd(TIM4, ENABLE);
这里之所以使用停止后查看是因为调试仿真暂停程序运行后,读取两个CNT有时间差,这是看到的数据不会完全一样,但实际是一样的。