OpenEdv-开源电子网

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

TIM2CH3 要输出pwm波应该怎么配置?

[复制链接]

20

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2020-6-21
在线时间
70 小时
发表于 2020-8-12 17:25:00 | 显示全部楼层 |阅读模式
1金钱
应该是我哪里配置出错了。
没了例程一下就不行了...
大佬帮我看一下配置哪里有问题,我用示波器看没有输出。
我连无刷电机调整占空比不能调速。


下面贴代码
  1. void TIM2_PWM_Init(u16 arr,u16 psc)
  2. {  
  3.         GPIO_InitTypeDef                                                 GPIO_InitStructure;
  4.         TIM_TimeBaseInitTypeDef                  TIM_TimeBaseStructure;
  5.         TIM_OCInitTypeDef                  TIM_OCInitStructure;

  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);         //使能定时器2时钟
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);           //使能GPIO外设时钟
  8.        

  9.         //引脚功能配置
  10.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //
  11.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;          //复用推挽输出!!
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  14.         //初始化TIM2
  15.         TIM_TimeBaseStructure.TIM_Period = 999;                     //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  16.         TIM_TimeBaseStructure.TIM_Prescaler =71;                   //设置用来作为TIMx时钟频率除数的预分频值
  17.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;                //设置时钟分割:TDTS = Tck_tim
  18.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
  19.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);             //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
  20.        
  21.         //初始化TIM2 Channel3、Channel4 PWM模式         
  22.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;           //选择定时器模式:TIM脉冲宽度调制模式2
  23.         TIM_OCInitStructure.TIM_Pulse = 500;
  24.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  25.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   //输出极性:TIM输出比较极性高
  26.         TIM_OC3Init(TIM2, &TIM_OCInitStructure);                    //根据T指定的参数初始化外设TIM2 OC3
  27. //        TIM_OC4Init(TIM2, &TIM_OCInitStructure);                    //根据T指定的参数初始化外设TIM2 OC4

  28.         TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR3上的预装载寄存器
  29. //        TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR4上的预装载寄存器

  30.         TIM_Cmd(TIM2, ENABLE);  //使能TIM2
  31. }
复制代码




  1. int main(void)
  2. {
  3.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
  4.         uart_init(9600);         //串口初始化为9600
  5.         TIM2_PWM_Init(899,0);
  6.         while(1)
  7.         {
  8.                
  9.         }
  10. //        System_Init();
  11. //        while(1)
  12. //        {
  13. //                if(USART_RX_STA&0x8000)
  14. //                {
  15. //                        __SwitchCompare();
  16. //                        USART_RX_STA=0;
  17. //                       
  18. //                }
  19. //        }         
  20. }

  21. void __SwitchCompare(void)
  22. {
  23.         switch(USART_RX_BUF[0])
  24.         {
  25.                 case 0x01 :TIM2->CCR3=0XFFFF; break;
  26.                 case 0x02 :TIM2->CCR3=0; break;
  27.                 default : break;
  28.         }
  29. }
复制代码



球球了,我就想单纯用TIM2的CH3通道输出一个PWM波。




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

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
发表于 2020-8-12 17:40:59 来自手机 | 显示全部楼层
http://www.openedv.com/forum.php?mod=viewthread&tid=315441&extra=page%3D1&mobile=2可以参考一下我这个帖子
回复

使用道具 举报

0

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2020-7-25
在线时间
114 小时
发表于 2020-8-12 18:11:38 | 显示全部楼层
需要打开AFIO复用功能的时钟,参考        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
回复

使用道具 举报

20

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2020-6-21
在线时间
70 小时
 楼主| 发表于 2020-8-13 09:59:35 | 显示全部楼层
熊伟焜 发表于 2020-8-12 18:11
需要打开AFIO复用功能的时钟,参考        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

不是复用的原因,复用的话TIM1CH3就不是PA2管脚了。

我今天问了同事,找到原因了。

因为,我之前用输入捕获的功能去抓无刷电机FG信号线的脉冲,那个脉冲方波我用万用表测试出来是2.5V,所以我没有分压直接连到PB0上去了。
后来同事和我说,不能这样子测的,用示波器去看结果发现是5V的。

估计芯片里面被我烧坏了。

这个程序我换了普中的板子去跑了一下,没有问题。

回想一想,当时抓脉冲的时候我用了三块板子...赶紧去看,发现三块板子都被烧坏了,损失惨重。
微信图片_20200813095848.jpg


回复

使用道具 举报

5

主题

152

帖子

0

精华

高级会员

Rank: 4

积分
777
金钱
777
注册时间
2016-7-15
在线时间
119 小时
发表于 2020-8-13 11:02:18 | 显示全部楼层
哈哈,公司损失惨重
好好学习,天天向上。
回复

使用道具 举报

5

主题

269

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1053
金钱
1053
注册时间
2020-5-11
在线时间
253 小时
发表于 2020-8-13 11:35:12 | 显示全部楼层
芯片烧了的话。风枪弄下来再吹上一片吧。板子真舍不得就这么报废
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 21:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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