OpenEdv-开源电子网

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

求助 关于战舰定时器4配置pwm的问题

[复制链接]

4

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-4-3
在线时间
18 小时
发表于 2019-12-11 17:00:12 | 显示全部楼层 |阅读模式
1金钱
  1. void TIM4_PWM_Init(u16 arr,u16 psc)
  2. {  
  3.         //**结构体声明**//
  4.         GPIO_InitTypeDef GPIO_InitStructure;            //声明GPIO
  5.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; //声明定时器
  6.         TIM_OCInitTypeDef  TIM_OCInitStructure;         //声明PWM通道
  7.        
  8.         //**时钟使能**//
  9.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);        //使能定时器TIM4时钟
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能PB端口时钟
  11.        
  12.         //****//
  13.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                                 //LED0-->PB.6 端口配置
  14.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出
  15.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  16.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.6
  17.         GPIO_SetBits(GPIOB,GPIO_Pin_6);
  18.         //****//
  19.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                                 //LED0-->PB.7 端口配置
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出
  21.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  22.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.7
  23.         GPIO_SetBits(GPIOB,GPIO_Pin_7);

  24.   //初始化TIM3
  25.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  26.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  27.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  28.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  29.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

  30.         //初始化TIM3 Channel1 PWM模式         
  31.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  32.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  33.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  34.         TIM_OC1Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC1
  35.        
  36.         //初始化TIM3 Channel2 PWM模式         
  37.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  38.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  39.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  40.         TIM_OC2Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2

  41.         TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH1预装载寄存器
  42.         TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH2预装载寄存器
  43.    
  44.         TIM_Cmd(TIM4, ENABLE);  //使能TIM3
  45.        
  46. }
复制代码
  1. int main(void)
  2. {               
  3.        
  4.         u8 keyval;
  5.         delay_init();                     //延时函数初始化          
  6.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  7.         LED_Init();                             //LED端口初始化
  8.         KEY_Init();                                        //初始化按键
  9. //        TIM1_PWM_Init(199,7199);//不分频。PWM频率===(7200*200)/72000000=0.02=20ms
  10.          TIM4_PWM_Init(199,7199);
  11.          
  12.            while(1)
  13.         {
  14.                  keyval=KEY_Scan(0);

  15.                 if(keyval==WKUP_PRES)
  16.                 {
  17.                         TIM_SetCompare1(TIM4,187);
  18.                 }
  19.                 else if(keyval==KEY0_PRES)
  20.                 {
  21.                         TIM_SetCompare1(TIM4,181);
  22.                 }
  23.                 else if(keyval==KEY1_PRES)
  24.                 {
  25.                         TIM_SetCompare2(TIM4,185);
  26.                 }
  27.                 else if(keyval==KEY2_PRES)
  28.                 {
  29.                         TIM_SetCompare2(TIM4,183);
  30.                 }
  31.         }         
  32. }
复制代码
我用示波器检测PWM波出来了 可是舵机只动一个 两个舵机都是正常的 电源直接采用直流电源供电也是

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

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-11 17:58:27 | 显示全部楼层
帮顶                                             
成功没有捷径
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3625
金钱
3625
注册时间
2019-8-14
在线时间
1054 小时
发表于 2019-12-11 18:13:32 | 显示全部楼层
用示波器看看两个IO输出的波形是否是一样的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 10:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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