OpenEdv-开源电子网

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

我想用STM32F103ZET6的TIM3输出4路PWM波,但现在只有1路有效,有人能帮我看看是哪里出问题了么?

[复制链接]

10

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2015-1-27
在线时间
4 小时
发表于 2015-1-27 19:23:25 | 显示全部楼层 |阅读模式
5金钱
void TIM3_PWM_Init(u16 arr,u16 psc)
{  
GPIO_InitTypeDef GPIO_InitStructure;//定义一个结构体变量,内含三个成员
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

//------需要修改TIMx
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟

//------需要修改GPIOx
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIO外设时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//使能AFIO复用功能模块时钟,不能去掉本条语句

//------根据需要选择是否映射------需要修改TIMx
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIMx, ENABLE); //Timerx部分重映射
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //Timerx完全重映射
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, DISABLE); //Timer3部分重映射禁止
//GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, DISABLE); //Timer3完全重映射禁止
//GPIO_FullRemap_TIMx时表示完全映射 
  
   //设置该引脚为复用输出功能,输出TIM3 CH1、CH2、CH3、CH4的PWM脉冲波形
    //------需要修改GPIO_Pin_x
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;  //作为PWM输出时GPIO口必须使用复用推挽输出
//GPIO_Mode_Out_OD 开漏输出 
//GPIO_Mode_Out_PP 通用推挽输出
//GPIO_Mode_AF_OD  复用开漏输出
//GPIO_Mode_AF_PP  复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//------需要修改GPIOx
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
 
    //初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
//------需要修改TIMx
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//初始化TIM3 Channel2 PWM模式
//------根据需要选择模式1或者模式2,确定TIM_OCMode_PWMx  
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式设置
//参数TIM_OCMode设置模式是PWM还是输出比较
//TIM_OCMode_Timing
                        //TIM_OCMode_Active
                        //TIM_OCMode_Inactive
                        //TIM_OCMode_Toggle
                        //TIM_OCMode_PWM1
                        //TIM_OCMode_PWM2
//模式1为先高后低,模式2为先低后高
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  //参数TM_OutputState用来设置比较输出使能,也就是使能PWM输出到端口
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
//参数TM_OCPolarity用来设置极性是高还是低
//------需要修改TIMx,设定通道
TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //TIM3通道设定
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR1上的预装载寄存器
TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //TIM3通道设定
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //TIM3通道设定
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR3上的预装载寄存器
TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //TIM3通道设定
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR4上的预装载寄存器
TIM_Cmd(TIM3, ENABLE);  //使能TIM3
}

STM32_PWM.rar

2.48 MB, 下载次数: 2028

最佳答案

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

最简单的方法  试试
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2015-1-27 19:23:26 | 显示全部楼层
回复

使用道具 举报

10

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2015-1-27
在线时间
4 小时
 楼主| 发表于 2015-1-27 21:57:25 | 显示全部楼层
回复【2楼】login_FAE:
---------------------------------
可以给改过的附件给我看一下么?改了的地方麻烦注释一下,谢谢!!!
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2015-1-27 22:31:56 | 显示全部楼层
回复【3楼】Zong_Yang:
---------------------------------
就这里改了(红色框框里面)
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 09:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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