You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:33:24