STM32F4 PWM斜坡

时间:2015-01-12 15:57:30

标签: interrupt stm32 pwm

我正在开展一个项目,我希望将pwm占空比从0增加到50%。我的周期是16000计数或1ms(16MHz默认计时器计数)。出于某种原因,它不是更新每个周期的占空比,而是更快地更新它。我想知道是不是因为我在计时器中断内计算新的占空比?以下是我正在使用的内容:

void TIM4_IRQHandler()
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
    TIM_ClearITPendingBit(TIM4, TIM_IT_Update);

    if (loop <= 8000) {
        TIM4 -> CCR1 = CCR_i;
        uint16_t y = CCR_i;
        CCR_i = y + 1;
        int x = loop;
        loop = x + 1;
    }
    if (loop == 8001) {
        TIM4 -> CCR1 = 0;
        uint16_t x = CCR_i;
        CCR_i = x + 1;
        int c = loop;
        loop = c + 1;
    }

    if (loop > 8001) {

        int t;
        for(t = 0; t < 10; t++){
            // wait
        }

        GPIO_SetBits(GPIOG, GPIO_Pin_8);
        //Stop2();
        TIM_ITConfig(TIM4, TIM_IT_Update, DISABLE);
        NVIC_DisableIRQ(TIM4_IRQn);
        }
    }
 }

1 个答案:

答案 0 :(得分:0)

爆炸,看起来我很傻 - 计时器正在按照我想要的方式完成 - 只需要8秒,持续1ms的时间就可以达到500us的脉冲宽度,每周增加62.5ns。