使用rtthread硬件定时器中遇到的问题

65 阅读1分钟

用的是定时器1,奇怪的是在回调函数里面没有看见

换成定时2倒是可以调用回调函数了,但是时间上差了100倍,

找到原因好像是MX_TIM2_Init();定时器初始化没起作用

换了个定时器16,可以了,可能是之前用定时器1 2做pwm没删干净?未验证

 

其它配置:(前期要保证时钟是对的)

TIM_HandleTypeDef htim16;

/**
  * @brief TIM16 Initialization Function
  * @param None
  * @retval None
  */
void MX_TIM16_Init(void)
{

    htim16.Instance = TIM16;
    htim16.Init.Prescaler = 79;
    htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim16.Init.Period = 50;
    htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim16.Init.RepetitionCounter = 0;
    htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
    {
        Error_Handler();
    }

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{

  if(htim->Instance==TIM1)
  {
  /* USER CODE BEGIN TIM1_MspInit 0 */

  /* USER CODE END TIM1_MspInit 0 */
    /* TIM1 clock enable */
    __HAL_RCC_TIM1_CLK_ENABLE();
  /* USER CODE BEGIN TIM1_MspInit 1 */

  /* USER CODE END TIM1_MspInit 1 */
  }
  else if(htim->Instance==TIM2)
  {
  /* USER CODE BEGIN TIM2_MspInit 0 */

  /* USER CODE END TIM2_MspInit 0 */
    /* TIM2 clock enable */
    __HAL_RCC_TIM2_CLK_ENABLE();
  /* USER CODE BEGIN TIM2_MspInit 1 */

  /* USER CODE END TIM2_MspInit 1 */
  }
  else if(htim->Instance==TIM16)
  {
      /* USER CODE BEGIN TIM16_MspInit 0 */

      /* USER CODE END TIM16_MspInit 0 */
      /* TIM16 clock enable */
      __HAL_RCC_TIM16_CLK_ENABLE();
      /* USER CODE BEGIN TIM16_MspInit 1 */

      /* USER CODE END TIM16_MspInit 1 */
  }
}