OpenEdv-开源电子网

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

STM32 TIM1 123通道不能输出PWM,4通道可以,是怎么回事?

[复制链接]

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2014-6-17 16:04:25 | 显示全部楼层 |阅读模式
5金钱
void TIM1_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
TIM_OCInitTypeDef   TIM_OCInitStructure;

TIM_DeInit(TIM1);//初始化TIM1寄存器
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 
  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8  | GPIO_Pin_9
| GPIO_Pin_10 | GPIO_Pin_11 ; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIO
 
    //初始化TIM1
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向上计数模式
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//初始化TIM1 Channel1 PWM模式  
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 
// TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; /*有一个"N"*///使能互补输出状态
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
// TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;     /*有一个"N"*///互补输出极性高
TIM_OCInitStructure.TIM_Pulse = arr/2;

TIM_OC1Init(TIM1, &TIM_OCInitStructure);   //根据T指定的参数初始化外设TIM1 OC1
TIM_OC2Init(TIM1, &TIM_OCInitStructure); 
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OC4Init(TIM1, &TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);   //使能TIM1在CCR1上的预装载寄存器
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); 

  TIM_ARRPreloadConfig(TIM1, ENABLE);                 //使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM1, ENABLE);   //使能TIM1
TIM_CtrlPWMOutputs(TIM1, ENABLE); //设置PMW主输出
}

最佳答案

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

像这些基础外设配置,如果哪里有问题,直接仿真查看对应寄存器的配置,哪里有问题就改哪里。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2014-6-17 16:04:26 | 显示全部楼层
像这些基础外设配置,如果哪里有问题,直接仿真查看对应寄存器的配置,哪里有问题就改哪里。
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2014-6-17 16:07:11 | 显示全部楼层



请问下,是不是control=》MMS"COMPARE 4"这里的问题,
麻烦大神看看。
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2014-6-17 16:09:49 | 显示全部楼层
本来是可以输出pwm的,但是,我加了一个串口4之后,就这TIM1_CH1/CH2/CH3,不能输出,其他的21个pwm输出都没有问题的,正常,
大神帮忙看看,谢谢
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2014-6-17 17:05:31 | 显示全部楼层


这个是没有加入串口的TIM1寄存器配置,TIM1_CH1/CH2/CH3/CH4都可以输出PWM ,
就是不能找出问题,
麻烦大神看看
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2014-6-17 17:08:09 | 显示全部楼层
我用的是串口4
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2014-6-17 19:00:05 | 显示全部楼层
搞定了,
TIM8->CR2&=0X0000;就加这一句就好了。
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2014-6-17 19:03:34 | 显示全部楼层


这些寄存器和库函数的关系感觉很乱,是不是我自己的思路不够清晰的,
要用库函数来控制寄存器 大神们是怎么对应的,小弟在这谢过
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-17 22:45:15 | 显示全部楼层
回复【7楼】wyudcl:
---------------------------------
你得进入库函数的代码里面,看他到底操作哪个寄存器,就不会觉得乱了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2014-6-18 16:27:15 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
谢谢原子,去试一试
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-11-29
在线时间
3 小时
发表于 2014-7-31 11:30:32 | 显示全部楼层
回复【6楼】wyudcl:
---------------------------------
为什么要加这一句,我直接用的库函数,只写了TIM1输出PWM,但只有CH4可以输出,加了TIM1->CR2&=0X0000;就行,怎么回事
回复

使用道具 举报

53

主题

175

帖子

1

精华

高级会员

Rank: 4

积分
516
金钱
516
注册时间
2014-5-16
在线时间
7 小时
发表于 2014-11-19 14:29:14 | 显示全部楼层
LZ能不能将24路PWM产生的例程分享一下呢?摸索了好久,TIM8都搞不定
本人新人,各位多包涵!
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-14
在线时间
5 小时
发表于 2017-3-16 19:41:41 | 显示全部楼层
19504643 发表于 2014-7-31 11:30
回复【6楼】wyudcl:
---------------------------------
为什么要加这一句,我直接用的库函数,只写了TIM1 ...

这一句加在哪里啊
回复

使用道具 举报

5

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2017-12-23
在线时间
36 小时
发表于 2018-1-26 10:29:00 | 显示全部楼层
我也遇到同样的问题,应该怎么解决啊?
回复

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2017-9-22
在线时间
14 小时
发表于 2018-2-1 09:56:54 | 显示全部楼层
,占楼,以后来看
回复

使用道具 举报

6

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2017-12-12
在线时间
47 小时
发表于 2018-2-1 10:42:59 | 显示全部楼层
同问,,,,,,,,,,
回复

使用道具 举报

7

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2016-1-23
在线时间
129 小时
发表于 2018-2-1 20:20:40 | 显示全部楼层
我也遇到了同样的情况,加上SD卡后 TIM1的PWM就不能输出,加上TIM1->CR2&=0x0000就好了,这是为什么呢?
回复

使用道具 举报

3

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
金钱
306
注册时间
2018-1-10
在线时间
48 小时
发表于 2018-2-9 15:58:42 | 显示全部楼层
楼主你的问题咋解决的,我也遇到了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2018-8-22
在线时间
2 小时
发表于 2018-8-22 18:53:08 | 显示全部楼层
楼主这个表格是在哪打开的
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
 楼主| 发表于 2018-9-7 10:37:36 | 显示全部楼层
27149 发表于 2018-8-22 18:53
楼主这个表格是在哪打开的

在硬件仿真时打的,
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-6-8
在线时间
1 小时
发表于 2020-11-7 23:56:08 | 显示全部楼层
魂萦xy 发表于 2018-2-1 20:20
我也遇到了同样的情况,加上SD卡后 TIM1的PWM就不能输出,加上TIM1->CR2&=0x0000就好了,这是为什么呢?

把定时器1的输出比较配置函数的所有参数都照着手册配一遍,相信你就知道为什么了友情提示CR2的0位寄存器
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 16:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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