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

[复制链接]
2073|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 | 显示全部楼层
硬件上怎么接的
香水城 发表于 2019-11-18 17:58 | 显示全部楼层
定时器产生TRGO一般是不会产生中断的。具体看各STM32参考手册。
TIM1 and TIM8 DMA/interrupt enable register (TIMx_DIER)

倒是外部的触发TRGO接到从定时器时,这个触发事件可以触发从定时器的相关触发中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

1

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