5. 经过上面的介绍应该知道如何设置主定时器和从定时器了吧,AT32F403A的定时器很多,所以可以组合的种类也很多,十分的灵活哦。
总结:
对于主定时器可以选择多种信号源作为触发输出,对于从定时器可以选择不同的TMR作为自己的主定时器,同时从定时器也可以选择自己的模式,当收到主定时器的触发信号后做什么处理,例如启动、复位等等。
好啦,话不多说啦,我们实际coding一个例子吧!
/* TMR3 Peripheral Configuration----------------------------------------*/
/*TMR3 Slave Configuration: PWM1 Mode */
TMR_TimeBaseStructInit(&TMR_TMReBaseStructure);
TMR_TMReBaseStructure.TMR_Period = 2;
TMR_TMReBaseStructure.TMR_DIV = 0;
TMR_TMReBaseStructure.TMR_ClockDivision = 0;
TMR_TMReBaseStructure.TMR_CounterMode = TMR_CounterDIR_Up;
TMR_TimeBaseInit(TMR3, &TMR_TMReBaseStructure);
TMR_OCStructInit(&TMR_OCInitStructure);
TMR_OCInitStructure.TMR_OCMode = TMR_OCMode_PWM1;
TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
TMR_OCInitStructure.TMR_Pulse= 1;
TMR_OC1Init(TMR3, &TMR_OCInitStructure);
/*Slave Mode selection: TMR3 */
TMR_SelectSlaveMode(TMR3, TMR_SlaveMode_Gate);
TMR_SelectInputTrigger(TMR3, TMR_TRGSEL_ITR0);
/*TMR4 Peripheral Configuration ----------------------------------------*/
/*TMR4 Slave Configuration: PWM1 Mode */
TMR_TMReBaseStructure.TMR_Period = 1;
TMR_TMReBaseStructure.TMR_DIV = 0;
TMR_TMReBaseStructure.TMR_ClockDivision = 0;
TMR_TMReBaseStructure.TMR_CounterMode = TMR_CounterDIR_Up;
TMR_TimeBaseInit(TMR4, &TMR_TMReBaseStructure);
TMR_OCInitStructure.TMR_OCMode = TMR_OCMode_PWM1;
TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
TMR_OCInitStructure.TMR_Pulse= 1;
TMR_OC1Init(TMR4, &TMR_OCInitStructure);
/*Slave Mode selection: TMR4 */
TMR_SelectSlaveMode(TMR4, TMR_SlaveMode_Gate);
TMR_SelectInputTrigger(TMR4, TMR_TRGSEL_ITR0);
/*TMR1 Peripheral Configuration ----------------------------------------*/
/*TMRe Base configuration */
TMR_TMReBaseStructure.TMR_DIV = 0;
TMR_TMReBaseStructure.TMR_CounterMode = TMR_CounterDIR_Up;
TMR_TMReBaseStructure.TMR_Period = 319;
TMR_TMReBaseStructure.TMR_ClockDivision = 0;
TMR_TMReBaseStructure.TMR_RepetitionCounter = 4;
TMR_TimeBaseInit(TMR1, &TMR_TMReBaseStructure);
/*Channel 1 Configuration in PWM mode */
TMR_OCInitStructure.TMR_OCMode = TMR_OCMode_PWM2;
TMR_OCInitStructure.TMR_OutputState= TMR_OutputState_Enable;
TMR_OCInitStructure.TMR_OutputNState = TMR_OutputNState_Enable;
TMR_OCInitStructure.TMR_Pulse = 127;
TMR_OCInitStructure.TMR_OCPolarity = TMR_OCPolarity_Low;
TMR_OCInitStructure.TMR_OCNPolarity = TMR_OCNPolarity_Low;
TMR_OCInitStructure.TMR_OCIdleState = TMR_OCIdleState_Set;
TMR_OCInitStructure.TMR_OCNIdleState = TMR_OCIdleState_Reset;
TMR_OC1Init(TMR1, &TMR_OCInitStructure);
/*Automatic Output enable, Break, dead TMRe and lock configuration*/
TMR_BRKDTStructInit(&TMR_BDTRInitStructure);
TMR_BDTRInitStructure.TMR_OSIMRState = TMR_OSIMRState_Enable;
TMR_BDTRInitStructure.TMR_OSIMIState = TMR_OSIMIState_Enable;
TMR_BDTRInitStructure.TMR_LOCKgrade = TMR_LOCKgrade_1;
TMR_BDTRInitStructure.TMR_DeadTime = 5;
TMR_BDTRInitStructure.TMR_Break = TMR_Break_Disable;
TMR_BDTRInitStructure.TMR_BreakPolarity = TMR_BreakPolarity_High;
TMR_BDTRInitStructure.TMR_AutomaticOutput = TMR_AutomaticOutput_Disable;
TMR_BRKDTConfig(TMR1, &TMR_BDTRInitStructure);
/*Master Mode selection */
TMR_SelectOutputTrigger(TMR1, TMR_TRGOSource_Update);
/*Select the Master Slave Mode */
TMR_SelectMasterSlaveMode(TMR1, TMR_MasterSlaveMode_Enable);
/*TMR1 counter enable */
TMR_Cmd(TMR1, ENABLE);
/*TMR enable counter */
TMR_Cmd(TMR3, ENABLE);
TMR_Cmd(TMR4, ENABLE);
/*Main Output Enable */
TMR_CtrlPWMOutputs(TMR1, ENABLE);
这个例子实现了定时器1去触发定时器3和定时器4;主定时器的触发输出为update事件,两个从定时器的从模式则配置为门控模式。