OpenEdv-开源电子网

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

STM32 TIM3PWM没有输出

[复制链接]

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-9-15
在线时间
4 小时
发表于 2014-9-15 09:55:03 | 显示全部楼层 |阅读模式
5金钱
原子哥,我将MINI上的PWM输出源码想改成TIM3 CH3的输出,更改源码后,发现PB0没有信号出来,麻烦帮我看下。修改部分的源码如下:
void TIM1_PWM_Init(u16 arr,u16 psc)
{  
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);  //使能GPIO外设时钟使能
                                                                   

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM_CH1
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; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80K
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

 
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

//  TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //CH1预装载使能  

TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器

TIM_Cmd(TIM3, ENABLE);  //使能TIM1
 
   
}

最佳答案

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

回复【10楼】lshp709612: --------------------------------- TIM_SetCompare1(TIM3,led0pwmval); //TIM3替换的原来的TIM1   最后这里改成 TIM_SetCompare3(TIM3,led0pwmval);试试,应该可以了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-4-26
在线时间
0 小时
发表于 2014-9-15 09:55:04 | 显示全部楼层
回复【10楼】lshp709612:
---------------------------------
TIM_SetCompare1(TIM3,led0pwmval); //TIM3替换的原来的TIM1  

最后这里改成
TIM_SetCompare3(TIM3,led0pwmval);试试,应该可以了
不努力,就什么也得不到
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-9-15
在线时间
4 小时
 楼主| 发表于 2014-9-15 11:07:42 | 显示全部楼层
新手,在线等大神帮忙啊
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-9-15
在线时间
4 小时
 楼主| 发表于 2014-9-15 11:14:38 | 显示全部楼层
看了一部分帖子,把AFIO使能也加上去了,但是还是没有输出
回复

使用道具 举报

3

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-4-26
在线时间
0 小时
发表于 2014-9-15 11:38:09 | 显示全部楼层
AFIO不用加上去啊,你又没复用。
首先确定自己修改了哪些地方,然后再一步步复原回去,很快就能找到原因了
你程序这样看起来是没问题的,得检查其他地方了
不努力,就什么也得不到
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-9-15
在线时间
4 小时
 楼主| 发表于 2014-9-15 11:48:26 | 显示全部楼层
回复【4楼】fresh杰尼龟:
---------------------------------
谢谢指点,我再慢慢回原看看
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-9-15
在线时间
4 小时
 楼主| 发表于 2014-9-15 13:28:04 | 显示全部楼层
回复【4楼】fresh杰尼龟:
---------------------------------
自己改到PA8 也就是TIM1 CH1后程序正常,但是怎么改,我的TIM3 CH3都没输出。。改动的地方就有:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// RCC配置
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //CH1预装载使能  

TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器

TIM_Cmd(TIM3, ENABLE);  //使能TIM1


然后就是主函数里面的
TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz 
    while(1)
{
  delay_ms(10);  
if(dir)led0pwmval++;
else led0pwmval--;  
  if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;      
TIM_SetCompare1(TIM3,led0pwmval); //TIM3替换的原来的TIM1   
}
回复

使用道具 举报

29

主题

340

帖子

0

精华

高级会员

Rank: 4

积分
799
金钱
799
注册时间
2013-12-17
在线时间
100 小时
发表于 2014-9-15 13:36:52 | 显示全部楼层
回复【6楼】lshp709612:
---------------------------------
TIM1_PWM_Init(899,0);这对吗  不是TIM3_PWM_Init(899,0);吗
就算有一天梦想成真,而你做好准备了吗?
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-9-15
在线时间
4 小时
 楼主| 发表于 2014-9-15 13:40:34 | 显示全部楼层
回复【7楼】老虎的菜:
---------------------------------
TIM1_PWM_Init这个应该算子函数的名称吧。。我子函数写的是void TIM1_PWM_Init(u16 arr,u16 psc),但是子函数下面写的程序在1楼,都是TIM3 CH3的配置,应该不会影响它的功能吧?我把名称改过来试试吧。。
回复

使用道具 举报

29

主题

340

帖子

0

精华

高级会员

Rank: 4

积分
799
金钱
799
注册时间
2013-12-17
在线时间
100 小时
发表于 2014-9-15 13:46:12 | 显示全部楼层
还有 没输出是什么啊? 是灯不亮吗,用示波器看过了吗?
就算有一天梦想成真,而你做好准备了吗?
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-9-15
在线时间
4 小时
 楼主| 发表于 2014-9-15 13:53:11 | 显示全部楼层
回复【9楼】老虎的菜:
--------------------------------
用示波器看的,没有波形出来
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-9-15
在线时间
4 小时
 楼主| 发表于 2014-9-15 14:11:26 | 显示全部楼层
回复【11楼】fresh杰尼龟:
---------------------------------
果然是这样,谢谢了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-5 20:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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