如题,利用TIM1输出三对PWM波时,想利用CCER寄存器取消输出,但是TIM1->CCER=0后OC1输出3V左右,OC1N输出1.5V左右,找不到原因啊,求助,初始化程序如下: NVIC_InitTypeDef NVIC_InitStructure; //中断管理
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定时器
TIM_OCInitTypeDef TIM_OCInitStructure; //PWM
TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //死区
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); ///使能TIM1时钟??是时钟使能要放在定义结构体变量后面,放在前面会报错 APB2 84MHz
NVIC_InitStructure.NVIC_IRQChannel= TIM1_UP_TIM10_IRQn ;; //?????定时器1中断 TIM1_CC_IRQn_IRQHandler
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_DeInit(TIM1);
TIM_TimeBaseInitStructure.TIM_Period =arr; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler =psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_CenterAligned1; //中央对齐计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0; // 加了这一句就好了 叼炸天
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);//初始化TIM1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于CCR1_Val时为低电平
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;// TIM_OCNPolarity_High时输出反相
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OCInitStructure.TIM_Pulse = 0; //设置跳变值,当计数器计数到这个值时,电平发生跳变
// 通道1
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
// 通道2
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
// 通道3
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStructure.TIM_DeadTime = 0;
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
TIM_ClearFlag(TIM1, TIM_FLAG_Update);
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_Cmd(TIM1,ENABLE); //使能定时器1
TIM_CtrlPWMOutputs(TIM1,ENABLE); //ENABLE 使能TIM1主输出
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>