打印
[STM32F1]

通用定时器PWM中央模式疑问

[复制链接]
617|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
billy_2005|  楼主 | 2018-1-29 16:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有无朋友做过通用定时器下的PWM中央对齐模式,以下是初始化代码,我在大循环里让一路的值不断加大,但出来的效果是PWM是只往一边变化而不是两边变化。请指导。
        //PWM~定时器3
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟使能
                                                                                                       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        TIM_TimeBaseStructure.TIM_Period = arr-1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
                 
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
        //TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_Toggle;//试验过这个,效果还是只往一边变化
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能//正向通道有效//        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;//反向通道无效

        TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性
       
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器       

        TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器       

        TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器       

        TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
        TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器       

        TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器
       
        TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设
沙发
billy_2005|  楼主 | 2018-2-5 13:46 | 只看该作者
问题解决了,原来示波器自动对齐波形开始点,用两个探针同时测两路就可以看到效果了

使用特权

评论回复
板凳
dongliushui| | 2018-2-5 18:05 | 只看该作者
billy_2005 发表于 2018-2-5 13:46
问题解决了,原来示波器自动对齐波形开始点,用两个探针同时测两路就可以看到效果了 ...

帅。。。也就是说这个代码没问题了,收藏了。

使用特权

评论回复
地板
airwill| | 2018-2-5 21:49 | 只看该作者
嗯, 一看就猜到是你的示波器捕捉问题

使用特权

评论回复
5
zhuotuzi| | 2018-2-6 15:49 | 只看该作者
示波器太高级了的后果。

使用特权

评论回复
6
xuanhuanzi| | 2018-2-6 18:30 | 只看该作者
有一套,看来用仪器前,要先检查一下设置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

84

帖子

1

粉丝