打印
[STM32F4]

TIM1的TIM1_TRGO和TIM1_TRGO2这两个中断无法产生

[复制链接]
1506|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
longxiguang|  楼主 | 2019-10-25 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好,因为个人应用场景的原因,需要用到TIM1的TRGO和TRGO2这两个触发器,我为这两个触发器配置了各种触发源,无一能够让触发器产生事件,有这方面经验的兄弟可否帮忙看看,源码如下:

static void MX_TIM1_Init(void)
{

  /* USER CODE BEGIN TIM1_Init 0 */

  /* USER CODE END TIM1_Init 0 */
        TIM_OC_InitTypeDef TIM_CHxHandler;
        TIM_ClockConfigTypeDef sClockSourceConfig = {0};
        TIM_MasterConfigTypeDef sMasterConfig = {0};
        TIM_OC_InitTypeDef sConfigOC = {0};
        TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};

  /* USER CODE BEGIN TIM1_Init 1 */

  /* USER CODE END TIM1_Init 1 */
  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 0;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 8000;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;                                //用TIM1的UPDATE事件作为TRGO触发器的触发源
  sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 8000;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_5) != HAL_OK)
  {
    Error_Handler();
  }
  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE;
  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;
  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  sBreakDeadTimeConfig.DeadTime = 0;
  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  sBreakDeadTimeConfig.BreakFilter = 0;
  sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
  sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
  sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
  sBreakDeadTimeConfig.Break2Filter = 0;
  sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
  sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE;
  if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  {
    Error_Handler();
  }

        SET_BIT(TIM1->CR2, TIM_CR2_CCPC);                        //Enable Capture/Compare Preloaded Control
        __HAL_TIM_MOE_ENABLE(&htim1);                //Enable the TIM main Output.
        /* USER CODE BEGIN TIM1_Init 2 */
        __HAL_TIM_CLEAR_FLAG(&htim1, TIM_FLAG_TRIGGER);
        __HAL_TIM_ENABLE_IT(&htim1, TIM_FLAG_TRIGGER);        //??Update??,??PI??

        //__HAL_TIM_CLEAR_FLAG(&htim1, TIM_FLAG_UPDATE);
        //__HAL_TIM_ENABLE_IT(&htim1, TIM_FLAG_UPDATE);        //??Update??,??PI??

        /* USER CODE END TIM1_Init 2 */
          TIM1->CCER |= TIM_CCER_CC5E;
        __HAL_TIM_ENABLE(&htim1);                        //Enable the TIM peripheral.

}

使用特权

评论回复
沙发
磨砂| | 2019-11-18 13:02 | 只看该作者
能进入中断吗

使用特权

评论回复
板凳
晓伍| | 2019-11-18 13:09 | 只看该作者
开启总中断了吗

使用特权

评论回复
地板
八层楼| | 2019-11-18 13:24 | 只看该作者
硬件上怎么接的

使用特权

评论回复
5
香水城| | 2019-11-18 17:58 | 只看该作者
定时器产生TRGO一般是不会产生中断的。具体看各STM32参考手册。
TIM1 and TIM8 DMA/interrupt enable register (TIMx_DIER)

倒是外部的触发TRGO接到从定时器时,这个触发事件可以触发从定时器的相关触发中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

1

粉丝