[N32G45x] 定时器级联应用之周期门控

[复制链接]
645|0
 楼主| sy12138 发表于 2022-12-30 11:55 | 显示全部楼层 |阅读模式
本帖最后由 sy12138 于 2022-12-30 13:42 编辑

#技术资源# #申请原创# #每日话题#

今天简单讲一哈定时器级联应用之一-周期门控
原理也很简单,例如我们使用TIM2、TIM3、TIM4三个定时器,用TIM2控制TIM3,TIM3控制TIM4。

配置也比较容易,使能TIM2、TIM3的主从模式,选择TIM2、TIM3的主模式选择更新事件触发输出,TIM3、TIM4从模式选择门控模式,并且TIM3触发源选择TIM2、TIM4触发源选择TIM3,这样我们就可以实现TIM2门控TIM3,TIM3门控TIM4了。
代码配置:
  1. TIM_TimeBaseStructure.Period    = 255;
  2.     TIM_TimeBaseStructure.Prescaler = 0;
  3.     TIM_TimeBaseStructure.ClkDiv    = 0;
  4.     TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;

  5.     TIM_InitTimeBase(TIM2, &TIM_TimeBaseStructure);

  6.     TIM_TimeBaseStructure.Period = 3;
  7.     TIM_InitTimeBase(TIM3, &TIM_TimeBaseStructure);

  8.     TIM_TimeBaseStructure.Period = 3;
  9.     TIM_InitTimeBase(TIM4, &TIM_TimeBaseStructure);

  10.     /* Master Configuration in PWM1 Mode */
  11.     TIM_OCInitStructure.OcMode      = TIM_OCMODE_PWM1;
  12.     TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
  13.     TIM_OCInitStructure.Pulse       = 64;
  14.     TIM_OCInitStructure.OcPolarity  = TIM_OC_POLARITY_HIGH;

  15.     TIM_InitOc1(TIM2, &TIM_OCInitStructure);

  16.     /* Select the Master Slave Mode */
  17.     TIM_SelectMasterSlaveMode(TIM2, TIM_MASTER_SLAVE_MODE_ENABLE);

  18.     /* Master Mode selection */
  19.     TIM_SelectOutputTrig(TIM2, TIM_TRGO_SRC_UPDATE);

  20.     /* Slaves Configuration: PWM1 Mode */
  21.     TIM_OCInitStructure.OcMode      = TIM_OCMODE_PWM1;
  22.     TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
  23.     TIM_OCInitStructure.Pulse       = 1;

  24.     TIM_InitOc1(TIM3, &TIM_OCInitStructure);

  25.     TIM_InitOc1(TIM4, &TIM_OCInitStructure);

  26.     /* Slave Mode selection: TIM3 */
  27.     TIM_SelectSlaveMode(TIM3, TIM_SLAVE_MODE_GATED);
  28.     TIM_SelectInputTrig(TIM3, TIM_TRIG_SEL_IN_TR1);

  29.     /* Select the Master Slave Mode */
  30.     TIM_SelectMasterSlaveMode(TIM3, TIM_MASTER_SLAVE_MODE_ENABLE);

  31.     /* Master Mode selection: TIM3 */
  32.     TIM_SelectOutputTrig(TIM3, TIM_TRGO_SRC_UPDATE);

  33.     /* Slave Mode selection: TIM4 */
  34.     TIM_SelectSlaveMode(TIM4, TIM_SLAVE_MODE_GATED);
  35.     TIM_SelectInputTrig(TIM4, TIM_TRIG_SEL_IN_TR2);

  36.     /* TIM enable counter */
  37.     TIM_Enable(TIM3, ENABLE);
  38.     TIM_Enable(TIM2, ENABLE);
  39.     TIM_Enable(TIM4, ENABLE);
代码中大家可以看到,TIM4的触发源选择IR2,TIM3触发源选择IR1,这个是为啥呢?

ba47b8adc1920af7d00fd45b1635d4b.png

需要注意看这张表,主从定时器选择都是有对应关系的

然后我们用逻辑分析仪看一下TIM的输出波形
3a8de27474fe190285b39ae6f9f6bb3.png
从波形可以看出,由上到下分别是TIM2、TIM3、TIM4输出的PWM,但是为什么TIM2 = 4 TIM3 = 16 TIM4呢?这里指的是频率而非周期

因为TIM3和TIM4的装载值我们都配置的是4-1,即TIM2更新4次后TIM3才更新一次,TIM4对于TIM3也是同理,这样就得到我们现在的波形啦!!


您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

404

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部