OpenEdv-开源电子网

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

新人再次求助:使用定时器主从门控模式精确控制脉冲个数的问题

[复制链接]

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-3
在线时间
0 小时
发表于 2014-3-11 15:20:19 | 显示全部楼层 |阅读模式
程序如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //开启时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  //初始化PA7
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;  //初始化PA1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = arr;  //TIM3初始化
        TIM_TimeBaseStructure.TIM_Prescaler = psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM3, & TIM_TimeBaseStructure);
TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE );

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //TIM3输出PWM
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse = arr;
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_SetCompare2(TIM3, arr/2);

TIM_TimeBaseStructure.TIM_Period = 10*arr;  //TIM2初始化
        TIM_TimeBaseStructure.TIM_Prescaler = psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //TIM2输出PWM并设置单脉冲模式
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_SetCompare2(TIM2, arr); 
        TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Single);
                             //设置占空比      

TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_OC2Ref);         //TIM2选择通道2作为输出触发
TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1); //TIM3选择TIM2作为输入触发
TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Gated); //TIM3从模式输入触发高电平有效

TIM_Cmd(TIM2,ENABLE);
TIM_Cmd(TIM3,ENABLE);
原本希望通过控制TIM2CH2的高电平时间来控制TIM3输出9个脉冲,可是实际由于TIM3无法立即响应高电平触发导致输出波形不符,不知哪位大神有办法解决这个问题,指点小弟一二。
波形图如下:

无标题.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
发表于 2014-3-11 16:09:55 | 显示全部楼层
图中正好是9个脉冲,有什么不对吗?
实际输出的是多少个?
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-3
在线时间
0 小时
 楼主| 发表于 2014-3-11 16:25:09 | 显示全部楼层
回复【2楼】420304805:
---------------------------------
但是最后一个脉冲只有一半,最后保持在高电平,我希望的是完整的9个脉冲,最后保持在低电平。
回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
发表于 2014-3-11 16:53:56 | 显示全部楼层
在外部加与门!
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-11 17:35:17 | 显示全部楼层
回复【楼主位】animal:
---------------------------------
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);加上这句
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-10-31
在线时间
3 小时
发表于 2015-3-3 16:28:56 | 显示全部楼层
这个问题你解决了吗?亲,我也遇到了,怎么弄的
回复 支持 反对

使用道具 举报

82

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2015-10-16
在线时间
72 小时
发表于 2016-5-15 17:26:04 | 显示全部楼层
哥们,请教下,这里为什么是1TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);        为什么不可以是0,2,3?
回复 支持 反对

使用道具 举报

5

主题

121

帖子

0

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2016-1-26
在线时间
150 小时
发表于 2016-5-15 22:14:56 | 显示全部楼层
PWM波设置匹配值后输出低电平啊
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-4-27
在线时间
10 小时
发表于 2016-7-15 18:15:25 | 显示全部楼层
楼主,发一份程序,929222083@qq.com
回复 支持 反对

使用道具 举报

0

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2015-10-15
在线时间
39 小时
发表于 2016-12-7 03:24:09 | 显示全部楼层
主从门控模式是不是就是主从模式啊
回复 支持 反对

使用道具 举报

8

主题

32

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-12-29
在线时间
19 小时
发表于 2017-3-28 01:29:00 | 显示全部楼层
楼主我想请问个问题,为什么这样设置定时器后它不会自动重载然后循环输出九个脉冲呢
回复 支持 反对

使用道具 举报

8

主题

32

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-12-29
在线时间
19 小时
发表于 2017-3-28 01:29:52 | 显示全部楼层
素月墨羽 发表于 2017-3-28 01:29
楼主我想请问个问题,为什么这样设置定时器后它不会自动重载然后循环输出九个脉冲呢

还是清除中断标志位后继续输出呢
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2017-8-3
在线时间
0 小时
发表于 2017-8-3 11:17:43 | 显示全部楼层
楼主你好,请问你可以发一份这个的完整工程给我吗?我在学这个。万分感激。1424589066@qq.com
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2018-9-8
在线时间
13 小时
发表于 2019-2-26 15:26:11 | 显示全部楼层
有人知道咋整的吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 20:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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