OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3032|回复: 2

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

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-10-25
在线时间
17 小时
发表于 2019-6-5 16:55:15 | 显示全部楼层 |阅读模式
5金钱
如题,利用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主输出
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-6-6 02:36:04 | 显示全部楼层
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-6-6 08:53:03 | 显示全部楼层
你不说, 谁能猜到你的不正常是什么啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 10:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表