STM32F407高级定时器TIM1输出比较功能无法正常工作求助
高级定时器TIM1输出比较模式无法正常工作问题
我尝试使用TIM1作为输出比较定时器输出常规脉冲信号(无需PWM),但始终未能成功。将在其他定时器上可正常运行的代码迁移至TIM1后,依旧无法正常工作。我了解到高级定时器需要设置TIMx_BDTR.MOE位,尝试该操作后仍未得到预期的输出比较效果。
初始化代码
void TIMER1_Init() { TIM_OC_InitTypeDef tim1OC_init; GPIO_InitTypeDef gpio_init; // Enable the TIM1 clock __HAL_RCC_TIM1_CLK_ENABLE(); // Enable the GPIO clock for TIM1 channel pin (e.g., PA8 for TIM1_CH1) __HAL_RCC_GPIOA_CLK_ENABLE(); // Configure GPIO pin for TIM1_CH1 gpio_init.Pin = GPIO_PIN_8; gpio_init.Mode = GPIO_MODE_AF_PP; gpio_init.Pull = GPIO_NOPULL; gpio_init.Speed = GPIO_SPEED_FREQ_LOW; gpio_init.Alternate = GPIO_AF1_TIM1; HAL_GPIO_Init(GPIOA, &gpio_init); // Required bit setting for advanced timers TIM1->CCER |= TIM_CCER_CC1E_Msk; TIM1->BDTR |= TIM_BDTR_MOE; TIM1->CR1 |= TIM_CR1_CEN; // Initialize TIM1 base htimer1.Instance = TIM1; htimer1.Init.Prescaler = 1; htimer1.Init.Period = 0xFFFFFFFF; if (HAL_TIM_OC_Init(&htimer1) != HAL_OK) { Error_handler(); } // Configure Output Compare mode for TIM1_CH1 tim1OC_init.OCMode = TIM_OCMODE_TOGGLE; tim1OC_init.OCPolarity = TIM_OCPOLARITY_HIGH; tim1OC_init.Pulse = pulse[4]; if (HAL_TIM_OC_ConfigChannel(&htimer1, &tim1OC_init, TIM_CHANNEL_1) != HAL_OK) { Error_handler(); } }
补充说明
我已调用HAL_TIM_OC_Start_IT(&htimer1, TIM_CHANNEL_1),并搭配中断处理函数TIM1_CC_IRQHandler(void)及NVIC设置:
HAL_NVIC_SetPriority(TIM1_CC_IRQn,15,0); HAL_NVIC_EnableIRQ(TIM1_CC_IRQn);
内容的提问来源于stack exchange,提问作者jlaufer
相关产品推荐
相关产品推荐

