OpenEdv-开源电子网

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

一个定时器多通道输入捕获问题

[复制链接]

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-9-11
在线时间
1 小时
发表于 2013-11-13 17:55:48 | 显示全部楼层 |阅读模式
打算尝试做一下一个定时器四通道输入捕获,在开启了定时器通道和配置了相应中断后,原来的单通道捕获也用不了了!

这是部分代码:

TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1|TIM_Channel_2|TIM_Channel_3|TIM_Channel_4; //定时器通道
TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);  //相应中断 

目前推测是因为不同的中断改乱了边沿触发的方式。各位有什么建议?
补充一下,这里我没有采用原子哥捕捉到上升沿后计数器置零的方法,而是用了俩个值记录时间,这样可以保证主时间线是正常按顺序计数的。


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

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2013-9-6
在线时间
0 小时
发表于 2013-12-6 16:22:55 | 显示全部楼层
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;配置通道1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;上升沿捕获
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;捕获中断
TIM_ICInitStructure.TIM_ICFilter = 0x0;不滤波
TIM_ICInit(TIM4, &TIM_ICInitStructure);将配置应用
以上每个通道都需要将整个配置再写一遍,使用与'|'是无效的。

四个通道成功捕获
回复 支持 2 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-11-13 20:30:34 | 显示全部楼层
回复【楼主位】flyingseed:
---------------------------------
仿真看看问题出在哪里吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-9-11
在线时间
1 小时
 楼主| 发表于 2013-11-13 21:03:37 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,我用双边沿触发的方式就可以避免边沿触发混乱问题,通过检查IO口的电平来判断哪个边沿的触发。但是程序跑起来会漏掉很多值,高频的数值根本检测不到。我的思路是否正确?中间需要注意什么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-11-13 21:09:25 | 显示全部楼层
你这样,如果多个通道同时触发,不一样不好处理哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-9-11
在线时间
1 小时
 楼主| 发表于 2013-11-13 21:18:42 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
如果多个通道同时触发,就用下面的语句加以判断
if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)
我有一点不明白,当这种情况出现的时候,通道是共享中断函数体吗?应该不是吧‘、、、、
我还有另种思路就是采用轮询,一个通道完事查询另一个通道,不知道这样可不可行,这个问题困扰一天了,
麻烦您了。
回复 支持 反对

使用道具 举报

5

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2012-8-31
在线时间
15 小时
发表于 2013-11-16 12:02:19 | 显示全部楼层
回复【楼主位】flyingseed:
---------------------------------
同问,楼主解决了吗
回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-3-25
在线时间
16 小时
发表于 2018-6-4 12:27:30 | 显示全部楼层
树球海 发表于 2013-12-6 16:22
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;配置通道1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ ...

你确定这样可以用同一个定时器的4路分别捕获吗??我记得原子哥说过IC1 IC2一组,IC3 IC4一组。。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2019-6-28
在线时间
25 小时
发表于 2020-4-2 20:31:22 | 显示全部楼层
树球海 发表于 2013-12-6 16:22
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;配置通道1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ ...

谢谢老哥
回复 支持 反对

使用道具 举报

2

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2020-9-25
在线时间
54 小时
发表于 2021-7-9 17:11:26 | 显示全部楼层
树球海 发表于 2013-12-6 16:22
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;配置通道1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ ...

分开重新配置也是不行的效果
人生中的贵人是不断努力的自己
回复 支持 反对

使用道具 举报

2

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2020-9-25
在线时间
54 小时
发表于 2021-7-9 17:13:30 | 显示全部楼层

请问,你分开配置之后成功了嘛?
人生中的贵人是不断努力的自己
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 18:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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