请教一下,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);
}
此帖出自
小平头技术问答
一周热门 更多>