OpenEdv-开源电子网

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

关于定时器1的捕获问题,希望大家帮忙。

[复制链接]

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-3-29 12:39:42 | 显示全部楼层 |阅读模式
10金钱
RT,最近有个项目需要用到捕获功能。有两个问题想咨询下大家,非常感谢。

首先是TIM1的CH1与CH1N捕获的问题,我们用的f103c8t6,CH1在PA8上,CH1N在PB13上,我做了个实验,配置好以后发现接到PA8是可以对脉冲进行捕获的,但是接到PB13上无法对脉冲进行捕获,我认为CH1N是没有捕获功能的,但是我们组长说CH1N是有这个功能的,现在我有些怀疑是自己配置寄存器错了,不知道大家知不知道CH1N是否有捕获功能。

之前在这个帖中略有涉及。http://www.openedv.com/thread-18913-1-1.html

11楼的仁兄说:“找到答案了,stm的资料上说捕获输入的话要选chx,没有提到chxn”但是我看了下参考手册,并没有相关的说法。如果可能的话希望大家能给我个截图。

还有就是捕获脉冲宽度的问题。

看了原子哥的代码,但是我们组长要求我们用CCR1和CCR2两个寄存器来求脉宽,就是相减,这能实现么?意思是上升沿打开通道1,下降沿打开通道2?然后相减?

还有,我一直认为捕获就是外部中断加定时器,这样理解是否正确?

暂时几个问题,希望大家不吝解答,感谢!

最佳答案

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

根据此图,我的理解,TIMx_CHxN只是针对输出的
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5788
金钱
5788
注册时间
2013-11-22
在线时间
1213 小时
发表于 2016-3-29 12:39:43 | 显示全部楼层
根据此图,我的理解,TIMx_CHxN只是针对输出的

QQ截图20160329154038.png
回复

使用道具 举报

12

主题

336

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1576
金钱
1576
注册时间
2015-8-9
在线时间
625 小时
发表于 2016-3-29 14:08:54 | 显示全部楼层
1、以前设置捕获功能的时候都是用chx来配置的,chxn还真没试过。
2、使用两个通道来捕获同一个信号,会不会太浪费了?理论是可以实现,具体情况还得根据实际来处理。。
3、输入捕获模式可以用来测量脉冲宽度,从某一个角度来说是可以理解成外部中断加定时器
以上是个人见解
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
 楼主| 发表于 2016-3-29 19:26:05 | 显示全部楼层
lycreturn 发表于 2016-3-29 15:46
根据此图,我的理解,TIMx_CHxN只是针对输出的

恩,谢谢了,之前没有特别注意看过此图,经您一提醒,感觉确实如此。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
 楼主| 发表于 2016-3-29 20:16:20 | 显示全部楼层
遇到了新的问题,比较紧急,也希望大家能指教一下。

我想使用TIM1的捕获功能,需要用到更新中断和捕获中断。

但是发现TIM1并不是像其他的通用定时器一样,抛去TIM1是挂载到APB2上这一点不谈,区别主要体现在两方面,暂时使用库函数编写,寄存器还没有尝试。

首先是配置NVIC中断分组时,通用定时器直接NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;就可以配置全部的定时器中断,然后在下面的中断服务函数void TIM2_IRQHandler(void);中处理就可以了。

但是TIM1中断是分开的,分为四种,TIM1_BRK_IRQn,TIM1_UP_IRQn ,TIM1_TRG_COM_IRQn,TIM1_CC_IRQn,比如我现在要使用TIM1_UP_IRQn 和TIM1_CC_IRQn,那么我是否需要分别给他们配置一个抢占优先级和响应优先级,还是我可以这样:
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn | TIM1_UP_IRQn;
然后给他们配置一个相同的抢占优先级和响应优先级?

接下来是中断服务函数,对应上面,TIM1的中断服务函数也是四种,TIM1_BRK_IRQHandler,TIM1_UP_IRQHandler,TIM1_TRG_COM_IRQHandler,TIM1_CC_IRQHandler(这个可以在启动文件中找到),那么还是上面的例子,如果我使用更新中断和捕获中断是否要调用两个中断服务函数,我现在的状况就是能进入捕获中断,无法进入更新中断。

半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
 楼主| 发表于 2016-3-29 21:52:13 | 显示全部楼层
问题已经自己解决了,但是现在还是想听听大家的意见。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2017-8-2
在线时间
24 小时
发表于 2018-1-28 16:58:27 | 显示全部楼层
东北小辉辉 发表于 2016-3-29 21:52
问题已经自己解决了,但是现在还是想听听大家的意见。

想问一下您的问题是不是
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn | TIM1_UP_IRQn;
中两个中断要分别配置,不能用“|”来进行?
我的问题是我分别配置后不能进入捕获中断,能进入更新中断,我觉得是捕获中断没有正确配置好,想问问您是如何配置TIM1_CH1的捕获中断,联系方式QQ:1249803611,谢谢。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 15:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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