OpenEdv-开源电子网

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

原子哥,我想把TIM2_CH3设置成PWM 输出,可是现在的代码是这样的,但是不能够输出,我想问一下是什么情况。

[复制链接]

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
发表于 2015-4-30 09:32:25 | 显示全部楼层 |阅读模式
5金钱
//??×?????????
void TIM2_PWM_Init(u16 arr , u16 psc )
{
GPIO_InitTypeDef GPIO_InitStructure ;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ;
TIM_OCInitTypeDef TIM_OCInitStructure ;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE );


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

GPIO_Init(GPIOA , &GPIO_InitStructure);

// ??????TIM2 ur
TIM_TimeBaseStructure.TIM_Period = arr ;
TIM_TimeBaseStructure.TIM_Prescaler = psc ;
TIM_TimeBaseStructure.TIM_ClockDivision = 0 ;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit (TIM2 , &TIM_TimeBaseStructure );

//??????TIM2 Channel2 PWM ????
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High ;
TIM_OC2Init(TIM2 , &TIM_OCInitStructure );

TIM_OC2PreloadConfig (TIM2 ,TIM_OCPreload_Enable );
TIM_Cmd (TIM2 , ENABLE );

}

最佳答案

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

TIM_OC2Init(TIM2 , &TIM_OCInitStructure ); TIM_OC2PreloadConfig (TIM2 ,TIM_OCPreload_Enable ); 改成 TIM_OC3Init(TIM2 , &TIM_OCInitStructure ); TIM_OC3PreloadConfig (TIM2 ,TIM_OCPreload_Enable ); 然后设置 TIM_SetCompare3(TIM2, pwm_value);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
发表于 2015-4-30 09:32:26 | 显示全部楼层
TIM_OC2Init(TIM2 , &TIM_OCInitStructure );

TIM_OC2PreloadConfig (TIM2 ,TIM_OCPreload_Enable );

改成

TIM_OC3Init(TIM2 , &TIM_OCInitStructure );

TIM_OC3PreloadConfig (TIM2 ,TIM_OCPreload_Enable );

然后设置
TIM_SetCompare3(TIM2, pwm_value);
回复

使用道具 举报

6

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-4-30
在线时间
1 小时
发表于 2015-4-30 09:54:36 | 显示全部楼层
沙发  跳变值没有设置
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-4-30 10:06:38 | 显示全部楼层
你没有设置PWM的值,TIM_SetCompare3(TIM2, pwm_value);
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-4-30 14:32:51 | 显示全部楼层
回复【2楼】杀手天使:
---------------------------------
谢谢指导。
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-4-30 14:34:15 | 显示全部楼层
回复【3楼】烟酒不沾:
---------------------------------
谢谢指导,我在main函数中添加的TIM_SetCompare3(TIM2, pwm_value);
我想问一下为什么添加TIM_SetCompare2(TIM2, pwm_value);不行呢?
谢谢指导,没想到论坛这么快给我答案
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-4-30 14:35:29 | 显示全部楼层
回复【4楼】wang12zhe:
---------------------------------
谢谢指导,我想问你一下,为什么是我的程序这样是不行的呢?TIM_OC2Init(TIM2 , &TIM_OCInitStructure ); 

TIM_OC2PreloadConfig (TIM2 ,TIM_OCPreload_Enable ); 
在按照你的指导下更改后是好用的了。谢谢啦
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-4-30 14:42:12 | 显示全部楼层
回复【7楼】水滴滴水:
---------------------------------

回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-4-30 14:43:07 | 显示全部楼层
回复【4楼】wang12zhe:
---------------------------------
Initializes the TIMx Channel3 according to the specified 
  *         parameters in the TIM_OCInitStruct. 
看到这句话我就明白了
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-4-30 14:55:20 | 显示全部楼层
回复【4楼】wang12zhe:
---------------------------------
是哪句话把TIM2_CH3和PA2对应起来的呀?
回复

使用道具 举报

7

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-9-12
在线时间
7 小时
 楼主| 发表于 2015-4-30 15:17:05 | 显示全部楼层
回复【10楼】水滴滴水:
---------------------------------
TIM_OC3Init(TIM2 , &TIM_OCInitStructure );

TIM_OC3PreloadConfig (TIM2 ,TIM_OCPreload_Enable );
Initializes the TIMx Channel3 according to the specified
  *         parameters in the TIM_OCInitStruct.
这句话的意思是将TIMxChannel3初始化,我现在使用的是PA2/ TIM2_CH3,故需要将TIM_OC3Init使能,如果想将PA3/TIM2_CH4使能的话,需要将 TIM_OC4Init(TIM2 , &TIM_OCInitStructure );

TIM_OC4PreloadConfig (TIM2 ,TIM_OCPreload_Enable );
TIM_Cmd (TIM2 , ENABLE ); 
使能才可以,可以看到官方库给的标准Initializes the TIMx Channel4 according to the specified
  *         parameters in the TIM_OCInitStruct..故使能它,并且在main函数中设置TIM_SetCompare4(TIM2, pwm_value);这句话的含义是
* @brief  Sets the TIMx Capture Compare4 Register value
  * @param  TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
  * @param  Compare4: specifies the Capture Compare4 register new value.
  * @retval None
理解为TIMx_CH4的比较值即可。
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
发表于 2015-4-30 16:02:09 | 显示全部楼层
回复【7楼】水滴滴水:
---------------------------------
TIM_OC2PreloadConfig (TIM2 ,TIM_OCPreload_Enable ); 的2指的是通道2   你用的是通道3  所以改成3 
其他通道 同理
回复

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-6-20
在线时间
9 小时
发表于 2017-11-20 20:08:16 | 显示全部楼层
请问你是用示波器观察的PA2的输出吗。
回复

使用道具 举报

7

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2017-9-8
在线时间
101 小时
发表于 2018-7-5 13:41:29 | 显示全部楼层
wang12zhe 发表于 2015-4-30 09:32
TIM_OC2Init(TIM2 , &TIM_OCInitStructure );

TIM_OC2PreloadConfig (TIM2&nbsp ...

谢谢~
回复

使用道具 举报

3

主题

72

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1305
金钱
1305
注册时间
2015-12-3
在线时间
160 小时
发表于 2019-5-8 15:25:57 | 显示全部楼层
看下                                      
。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 07:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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