OpenEdv-开源电子网

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

关于定时器主从模式

[复制链接]

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
发表于 2014-3-11 09:00:15 | 显示全部楼层 |阅读模式

我把定时器1设置为PWM模式,定时器2设置为输出比较模式。然后想把定时器2设置成从模式的门控模式。是不是只要再设置定时器2 的相关位就行了,还是要设置TIM1和TIM2 SMCR 的MSM位。 
    TIM2->CCMR1|=3<<12;  
  TIM2->CCER|=1<<4;
  TIM2->CCER|=1<<5;
  TIM2->CCER|=1<<8;
                      
  TIM2->CCMR1|=2<<8;

  TIM2->SMCR|=5<<0;
  TIM2->SMCR|=5<<4;
  TIM2->CR1|=0x01;

上面是我按照中文手册配置的,但没有结果。连原来的输出比较波形都没有了。
求大神指导指导。

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

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
 楼主| 发表于 2014-3-11 09:14:14 | 显示全部楼层
TIM2->CCMR1|=3<<12;
  TIM2->CCMR2|=3<<4;
  TIM2->CCER|=1<<4;
  TIM2->CCER|=1<<5;
  TIM2->CCER|=1<<8;
                       
  TIM2->CR1=0x0080; 
  TIM2->CR1|=0x01;
  这个是没改之前的,输出比较模式
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
 楼主| 发表于 2014-3-11 09:15:52 | 显示全部楼层
我觉得问题是TIM2并没有把TIM1当做输入源去检测,但是我不知道怎样去设置。中文手册上也没有说清楚啊
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-11 10:13:39 | 显示全部楼层
回复【3楼】luckywwq:
---------------------------------
我搞不懂你这配置的是定时器外部触发同步还是定时器之间的同步。你想要完成什么功能。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
 楼主| 发表于 2014-3-11 10:39:10 | 显示全部楼层
回复【4楼】xiaoyan:
---------------------------------
我想完成的是TIM1输出低电平的时候TIM2正常输出,TIM1输出高电平的时候TIM2输出低电平。其中TIM1是PWM模式
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
 楼主| 发表于 2014-3-11 10:48:46 | 显示全部楼层
http://www.openedv.com/posts/list/6524.htm

这个好像可以啊
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-11 12:40:43 | 显示全部楼层
回复【6楼】luckywwq:
---------------------------------
我知道你的意思了,呵呵。我知道怎么弄了。稍后我上传我的源码。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-11 14:54:42 | 显示全部楼层

PA8-----------------TIM1_CH1 
PA0--------------TIM2_CH1 
上面的是PA8输出,下面的是PA0输出。
完成的功能:PA8和PA0分别输出PWM波,单PA8为低电平的时候PA0才输出PWM波
否则不输出,这个时候PA0可能输出高,也可能输出低,这个暂时不知道怎么解决。。

稍微解释一下代码:
1.TIM1设置为主模式,把PWM的参考电平OC1REF作为TRGO触发输出。
  TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable);
  TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_OC1Ref);
2
.将TIM2设置为从模式的门控模式,将TIM1的TRG0作为触发输入,控制定时器的开启和关闭。(PS:门控模式:当触发输入(TRGI)为高时,计数器的时钟开启。一旦触发输入变为低,则计数器停止(但不复位)。计数器的启动和停止都是受控的。)
  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Gated);
  TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0);

参考代码如下:


//定时器主从模式初始化
void TIM_MasterSlaveModeInit(void){

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
//打开时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置TIM1定时器周期
  TIM_TimeBaseStructure.TIM_Period = 100;
  TIM_TimeBaseStructure.TIM_Prescaler = 719;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  //主模式  TIM1_CH1 PWM配置
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 50;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

  TIM_OC1Init(TIM1, &TIM_OCInitStructure);

//选择主从模式
  TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable);

  //主定时器触发输出配置
  TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_OC1Ref); //选择PWM 参考电压OC1REF为触发输出


//配置TIM2定时器周期
  TIM_TimeBaseStructure.TIM_Period = 10;
  TIM_TimeBaseStructure.TIM_Prescaler = 719;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
//从定时器TIM2 PWM输出配置
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 5;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OC1Init(TIM2, &TIM_OCInitStructure);
//从模式选择
  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Gated); //门控模式
  TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0); //定时器1 的Trigger 0做为触发输入
//使能定时器
  TIM_Cmd(TIM2, ENABLE);


  TIM_Cmd(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM1, ENABLE);

}





站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
 楼主| 发表于 2014-3-11 15:04:55 | 显示全部楼层
回复【8楼】xiaoyan:
---------------------------------
膜拜中……太感谢了!
回复 支持 反对

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
发表于 2014-11-18 16:54:22 | 显示全部楼层
我怎么把从定时器TIM2和TIM1互换就不行了呢?


TIM1的PA8口没输出。奇怪……>
回复 支持 反对

使用道具 举报

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2013-10-22
在线时间
15 小时
发表于 2014-12-28 22:25:06 | 显示全部楼层
回复【10楼】laoguren1122:
---------------------------------
是的,我试了,也没有输出 ,,,,,,,不知能不能把这个文件发给我看看,,,,,,
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
 楼主| 发表于 2014-12-29 14:41:27 | 显示全部楼层
回复【11楼】qm3234:
---------------------------------
配置的时候是选的TIM2做的触发输入吗
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
 楼主| 发表于 2014-12-29 14:44:00 | 显示全部楼层

  如图
回复 支持 反对

使用道具 举报

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2013-10-22
在线时间
15 小时
发表于 2015-1-1 19:17:24 | 显示全部楼层
那就是TIM1只能做从定时器,TIM2做主定时器了,,
回复 支持 反对

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
发表于 2015-1-11 16:19:08 | 显示全部楼层
换成T1还需要配置其他寄存器,我发现只要用到T1和T8与其他定时器配置都会有点区别,不能直接换
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2011-4-22
在线时间
9 小时
发表于 2015-3-5 21:44:43 | 显示全部楼层

12楼

请问这表从哪时来的?

回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
 楼主| 发表于 2015-3-6 08:28:13 | 显示全部楼层
回复【16楼】bsz:
---------------------------------
STM32中文参考手册
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2011-4-22
在线时间
9 小时
发表于 2015-3-6 10:47:30 | 显示全部楼层
回复【17楼】luckywwq:
---------------------------------
谢谢 luckywwq 回复,我在《STM32_RM_CH_1.PDF》怎么也找不到?
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2011-4-22
在线时间
9 小时
发表于 2015-3-6 11:04:37 | 显示全部楼层
回复【17楼】luckywwq:
---------------------------------
谢谢!找到了,看书不认真。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-4-12
在线时间
0 小时
发表于 2015-4-15 15:54:54 | 显示全部楼层
回复【8楼】xiaoyan:
---------------------------------
 门控模式:当触发输入(TRGI)为高时,计数器的时钟开启。 为啥在波形图上,出发输入为低时计数时钟开启呢    
新手求解。。。
回复 支持 反对

使用道具 举报

8

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2012-7-20
在线时间
9 小时
发表于 2015-4-16 06:30:57 | 显示全部楼层
回复【13楼】luckywwq:
---------------------------------
TIM1能不能作为从定时器,而TIM2作为主定时器?
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2015-2-26
在线时间
26 小时
发表于 2015-8-30 16:19:20 | 显示全部楼层
回复【8楼】xiaoyan:
---------------------------------
就是不知道有什么用
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
47
金钱
47
注册时间
2013-12-2
在线时间
19 小时
发表于 2015-12-5 11:20:50 | 显示全部楼层
T回复【10楼】laoguren1122:
---------------------------------
TIM1要输出,必须开启 Bit 15 MOE: Main output enable(TIMx_BDTR)
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 01:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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