TIM1的CCER寄存器赋0后为什么通道1不正常

2019-07-20 01:29发布

如题,利用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主输出
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-20 01:57
 精彩回答 2  元偷偷看……
edmund1234
2楼-- · 2019-07-20 07:05
你不说, 谁能猜到你的不正常是什么啊?

一周热门 更多>