OpenEdv-开源电子网

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

哪位朋友用过高级定时器的翻转模式产生PWM波的,进来帮看个问题了

[复制链接]

18

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-11-12
在线时间
54 小时
发表于 2016-6-15 15:52:09 | 显示全部楼层 |阅读模式
10金钱
背景是这样的:
我使用的TIM8,CH3和CH4因要输出频率可调的方波,所以使用了翻转模式配置。

目前情况是这样的(只看通道3):
配置好后因通道输出电平不变化,我加了句 TIM_CtrlPWMOutputs(TIM8, ENABLE);然后就正常产生了方波,可是发现示波器显示的频率与我要求的2KHZ(CCR3的值为 (计数频率/1000)-1)差别很大(示波器显示的才不到100HZ)。我改变CCR3的值让其产生4KHZ的方波时,示波器显示的频率还是上次的值(小与100HZ)。我单步调试时,执行完定时器使能后就直接产生了方波,而不是进入CC中断函数才改变电平状态的。我觉着我的翻转模式未生效啊。使用PWM模式可正常输出匹配频率的方波。


以上情况就是这样,哪位朋友知道忽略了哪个地方么(问题出在用的是高级定时器这里)????????

#if    TIMER8_EN
        /* TIM8 clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8 | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 ;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOC, &GPIO_InitStructure);
          PrescalerValue = (u16) (SystemCoreClock / 12000000) - 1;
        Channel3Pulse   =         (12000000/1000)-1;
        Channel4Pulse        =    (12000000/1000)-1;
          /* Time base configuration */
          TIM_TimeBaseStructure.TIM_Period = TimerPeriod;         
          TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;   
          TIM_TimeBaseStructure.TIM_ClockDivision = 0;
          TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

          TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);

        /* PWM1 Mode configuration: Channel3 */
  /* Channel 1, 2,3 and 4 Configuration in PWM mode */
          //TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; //工作与翻转模式,当CCRx的值等于CNT的值时,电平翻转以此产生PWM波
          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
          TIM_OCInitStructure.TIM_Pulse = Channel3Pulse;
          TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

          TIM_OC3Init(TIM8, &TIM_OCInitStructure);
        TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Disable);

          TIM_OCInitStructure.TIM_Pulse = Channel4Pulse;
          TIM_OC4Init(TIM8, &TIM_OCInitStructure);
        TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Disable);

        TIM_OCInitStructure.TIM_Pulse = 12;
          TIM_OC1Init(TIM8, &TIM_OCInitStructure);
        TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Disable);

        TIM_OCInitStructure.TIM_Pulse = 10;
          TIM_OC2Init(TIM8, &TIM_OCInitStructure);
        TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Disable);

        //TIM_ClearITPendingBit(TIM3,TIM_IT_CC3|TIM_IT_CC4);         //清除中断Pending位,避免使能中断后立即进入中断
        Drv_NVIC_IntPrioSet(TIM8_CC_IRQn,TIM8_PRIO);
        Drv_NVIC_IRQSet(TIM8_CC_IRQn,&Drv_Time8_IntHandler);
#endif  /* TIM8_EN */
#if   TIMER2_EN
        Drv_Time2_Close();
#endif   /* TIM2_EN */

#if   TIMER3_EN
        Drv_Time3_Close();
#endif   /* TIM3_EN */

#if   TIMER8_EN
        TIM_ITConfig(TIM8,TIM_IT_CC3|TIM_IT_CC4,ENABLE);

                /* TIM8 Main Output Enable */
    TIM_CtrlPWMOutputs(TIM8, ENABLE);  
        TIM8->CNT = 0;
        /* TIM8 enable counter */
          TIM_Cmd(TIM8, ENABLE);
#endif        /* TIM8_EN */

最佳答案

查看完整内容[请看2#楼]

参考下我们的PWM例程。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-6-15 15:52:10 | 显示全部楼层
参考下我们的PWM例程。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

18

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-11-12
在线时间
54 小时
 楼主| 发表于 2016-6-15 17:14:37 | 显示全部楼层
好像不是因为使用的是高级定时器,我改为通用定时器3时,也是同样的情况。  不管如何设置CCRx寄存器值,频率都是91.5HZ,只有改变计数频率时输出频率才改变。有没有朋友知道我程序哪里有问题啊?
回复

使用道具 举报

18

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-11-12
在线时间
54 小时
 楼主| 发表于 2016-6-16 08:40:52 | 显示全部楼层
正点原子 发表于 2016-6-15 20:27
参考下我们的PWM例程。

好的,谢谢了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 06:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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