高级定时器TIM_RepetitionCounter的设置问题

2019-03-23 19:24发布

请教一下,STM32F2xx系列高级定时器TIM1和TIM8的TIM_RepetitionCounter到底应该怎么设置才能生效?我的不管怎么设置,就没有效果,相当于TIM_RepetitionCounter=0.代码如下:

#define TIMx TIM8
uint32_t period_ = ...
#define PRESCALER xxx

void Thb7128Bsp::configureTimer() {
        configGpio(); //
        
        TIM_Cmd(TIMx, DISABLE);

        /* Time base configuration */
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

        TIM_TimeBaseStructure.TIM_Period = period_;
        TIM_TimeBaseStructure.TIM_Prescaler = PRESCALER;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 10;        // 这里怎么设置结果都一样,相当于0

        TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure);

        TIM_SetAutoreload(TIMx, period_);
        TIM_ARRPreloadConfig(TIMx, ENABLE);

        TIM_GenerateEvent(TIMx, TIM_EventSource_Update);

        /* Prescaler configuration */
        TIM_ClearFlag(TIMx, TIM_FLAG_Update);
        TIM_ClearITPendingBit(TIMx, TIM_IT_Update);
        TIM_ITConfig(TIMx, TIM_IT_Update, ENABLE);

        TIM_OCInitTypeDef ocInitStructure;
        TIM_OCStructInit(&ocInitStructure);

        ocInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        ocInitStructure.TIM_OutputState = TIM_OutputState_Disable;
        ocInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
        ocInitStructure.TIM_Pulse = CalcCompare(period_);
//        ocInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        ocInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;
//        ocInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
        ocInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

        TIM_OCxInit(TIMx, &ocInitStructure);


        TIM_BDTRInitTypeDef bdtrInitStructure;
        TIM_BDTRStructInit(&bdtrInitStructure);
        bdtrInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;
        bdtrInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;
        bdtrInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
        bdtrInitStructure.TIM_DeadTime = 0x00;
        bdtrInitStructure.TIM_Break = TIM_Break_Disable;
        bdtrInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
        bdtrInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
        TIM_BDTRConfig(TIMx, &bdtrInitStructure);

        TIM_CtrlPWMOutputs(TIMx, ENABLE);

//        TIM_SelectCOM(TIMx, ENABLE);
//
//        TIM_CCPreloadControl(TIMx, ENABLE);

        setFrequency(CalcFrequency(period_));

        TIM_CCxCmd(TIMx, TIM_Channel_x, TIM_CCx_Enable);

        //        TIM_Cmd(TIMx, ENABLE);
} 此帖出自小平头技术问答
0条回答

一周热门 更多>