首页 > 解决方案 > STM32 - 定时器更新中断不起作用

问题描述

我在 STM32F7 中使用定时器 6 来生成时钟信号。问题是无论我为自动重载寄存器使用什么值,我都得到了相同的时钟频率(10 kHz)。AHPB 时钟为 8 MHz。下面是初始化函数和中断回调:

static void MX_TIM7_Init(void)
{
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  htim7.Instance = TIM7;
  htim7.Init.Prescaler = 0;
  htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim7.Init.Period = 124;
  htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
}

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
    if (htim->Instance == TIM7){
        HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
    } 
}

我主要调用 HAL_TIM_Base_Start_IT(&htim7); 在进入空的while循环之前。无论我如何更改 ARR 值,我在 LED_Pin 处得到的输出都是 10 kHz。当我运行调试器时,SR 寄存器中的 UIF 标志没有在 IRQ 处理程序中清除,尽管 __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE); 叫做。有谁知道问题是什么?设置计时器时我错过了什么吗?

标签: timerinterruptstm32

解决方案


推荐阅读