打印
[STM32F1]

STM32 定时器输入捕获速度快,还是通过外部中断设置定时器

[复制链接]
11392|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位,
   如题所示,我用STM32检测A引脚的高电平脉冲宽度。使用输入捕获,或者使用外部中断设置定时器方式貌似都可以。(输入脉冲比较短,因此有些在意响应时间。)
   问题:STM32的外部中断响应时间好像是固定的12周期,但不知道输入捕获响应时间怎么样?哪个更快呢?
   多谢啊!
沙发
magic_yuan|  楼主 | 2014-3-25 20:38 | 只看该作者
刚查了下,貌似所有中断响应的延时都为12周期,不管是外部中断还是内部的定时器中断。。。。。
那这样的话,速度应该差不多。

使用特权

评论回复
板凳
huzi2099| | 2014-3-25 21:15 | 只看该作者
问题不在哪个快,捕获到信号后的动作是由硬件完成的所以更准确.
而中断方式依靠软件用可能被其他中断干扰,另外中断后如何获取时间点也是问题,如果用定时器这个定时也必须高优先级.

使用特权

评论回复
地板
grant_jx| | 2014-3-25 21:27 | 只看该作者
输入捕获更快,都是硬件的,曾用它来做HDLC解码

使用特权

评论回复
5
airwill| | 2014-3-25 22:41 | 只看该作者
外部中断响应时间好像是固定的12周期,这是中断进入需要的时间, 不算后面的处理呢.
而捕获由硬件控制, 并不受中断响应的延迟. 所以推荐采用捕获.

使用特权

评论回复
评论
magic_yuan 2014-3-26 11:35 回复TA
刚又查了下,好像是所有中断响应的延时理想状况都是12周期,不单单是外部中断。即从检测到中断doa开始执行中断程序的时间。 
magic_yuan 2014-3-26 11:32 回复TA
多谢大侠,回了如下的帖子,有时间还请指点! 
6
magic_yuan|  楼主 | 2014-3-26 11:32 | 只看该作者
huzi2099 发表于 2014-3-25 21:15
问题不在哪个快,捕获到信号后的动作是由硬件完成的所以更准确.
而中断方式依靠软件用可能被其他中断干扰,另 ...

多谢大侠,
  刚在网上看了些资料。
  捕获动作由硬件完成的意思是----当输入引脚上升沿或者下降沿触发捕获时,内部对应定时器记录此时的值。这个直接由硬件完成,而不通过STM32的内部处理核心?所以比较快,或者说延时固定。
  如果由外部中断完成。则外部中断需要相应STM32内部处理核心,通过内部处理器软件来实验一些动作,比如定时器值的计算,且由于内部处理器的处理延时,定时器的值可能继续跳动而变得不准确?
  

使用特权

评论回复
7
magic_yuan|  楼主 | 2014-3-28 16:35 | 只看该作者
huzi2099 发表于 2014-3-25 21:15
问题不在哪个快,捕获到信号后的动作是由硬件完成的所以更准确.
而中断方式依靠软件用可能被其他中断干扰,另 ...

今天看了下捕获输入的程序。
STM32捕获到信号后自动记录寄存器的值,这个是硬件完成的。但如果进入响应的捕获中断,还是要消耗时间的,也是有STM32的核心处理器完成的吧。---个人看法,请指教。

使用特权

评论回复
8
huzi2099| | 2014-3-28 17:34 | 只看该作者
magic_yuan 发表于 2014-3-28 16:35
今天看了下捕获输入的程序。
STM32捕获到信号后自动记录寄存器的值,这个是硬件完成的。但如果进入响应 ...

已经存好了,直到下次捕获到信号前取走就行了

使用特权

评论回复
评论
magic_yuan 2014-3-28 20:09 回复TA
明白,感谢啊! 
9
magic_yuan|  楼主 | 2014-3-29 10:46 | 只看该作者
huzi2099 发表于 2014-3-28 17:34
已经存好了,直到下次捕获到信号前取走就行了

再想了一下。
   一次捕获STM32自动记录寄存器的值,但如果要测量时间差,那后一次捕获记录的值降刷新前一次的值。即如果要测量时间差,还是要在第一次捕获时进入中断,这样还是要消耗延时。。。。

使用特权

评论回复
10
huzi2099| | 2014-3-29 11:03 | 只看该作者
magic_yuan 发表于 2014-3-29 10:46
再想了一下。
   一次捕获STM32自动记录寄存器的值,但如果要测量时间差,那后一次捕获记录的值降刷新前 ...

不需要延时,用一个全局量存储上次的值,新捕获到的时间点减去上次值就是时间差了,要注意的是数据有溢出的情况处理时如果减出来的是负数再取一次反+1.

使用特权

评论回复
11
huzi2099| | 2014-3-29 11:04 | 只看该作者
magic_yuan 发表于 2014-3-29 10:46
再想了一下。
   一次捕获STM32自动记录寄存器的值,但如果要测量时间差,那后一次捕获记录的值降刷新前 ...

俩次测量最大时间间隔不能大于计数周期.

使用特权

评论回复
评论
magic_yuan 2014-3-29 11:31 回复TA
如果对溢出次数计数,那么两次的最长时间间距可以做得很长。 
12
magic_yuan|  楼主 | 2014-3-29 11:30 | 只看该作者
huzi2099 发表于 2014-3-29 11:03
不需要延时,用一个全局量存储上次的值,新捕获到的时间点减去上次值就是时间差了,要注意的是数据有溢出的 ...

那用全局变量记录上次的值需要进入中断了,这时需要消耗延时。
也就是说捕获两次边沿跳变的最短时间间距就是首次捕获后进入中断处理的时间。从中断响应到进入中断大致消耗12周期,而进入中断程序需要处理一些东西,估计总计100周期可以搞定?以STM32F1  72MHZ的速率,则最短测试时间大约150NS的样子。
多谢大侠啊,请指教。

使用特权

评论回复
13
香水城| | 2014-3-29 12:14 | 只看该作者
magic_yuan 发表于 2014-3-29 11:30
那用全局变量记录上次的值需要进入中断了,这时需要消耗延时。
也就是说捕获两次边沿跳变的最短时间间距 ...

两次捕获可以不用中断处理啊,如果中断来不及响应,岂不是第二次捕获的值就覆盖第一次捕获的值了?使用DMA,内存中开一个数组,第一次捕获触发DMA,把硬件记录的值传到Array[1],第二次捕获又触发DAM,把硬件记录的值传到Array[2],不久不会覆盖了嘛。等你什么时候主程序有空了,再去处理Array[]的值就可以了。

使用特权

评论回复
14
magic_yuan|  楼主 | 2014-3-29 12:51 | 只看该作者
香水城 发表于 2014-3-29 12:14
两次捕获可以不用中断处理啊,如果中断来不及响应,岂不是第二次捕获的值就覆盖第一次捕获的值了?使用DM ...

多谢啊,
  DMA没用过。有个基本问题想请教下,后面我去认真看看DMA。
  1,捕获能触发DMA,那定时器溢出能不能触发DMA呢?如果这样就能比较准确无误差地记录较长的时间宽度了。
  2,我需要测量两个通道信号异步上升沿之间的时间宽度。
   看了下,应该是不能用同一个定时器的捕获通道。只能用两个不同的定时器。如果这两个定时器采用同样的时钟基准,分频系数都一样,同时开启这两个定时器(开启指令相邻)。
   使用DMA分别记录两通道的上升沿时刻,再相减,这样应该可行吧?
    如果直接采用72MHZ的基准,那么误差的范围不知道大致能控制在什么范围内?----目前希望尽量精准,以系统时钟周期为单位,即13.8纳秒。

使用特权

评论回复
15
huzi2099| | 2014-3-29 15:01 | 只看该作者
magic_yuan 发表于 2014-3-29 11:30
那用全局变量记录上次的值需要进入中断了,这时需要消耗延时。
也就是说捕获两次边沿跳变的最短时间间距 ...


NS级的测量不要想了,不可能的.io也不能允许这么高速度.
dma也不可能,瞬间内存就放不下了.

使用特权

评论回复
16
zf470| | 2014-3-29 15:49 | 只看该作者
dma很简单的实现,就像12个AD通道采样都是dma

使用特权

评论回复
17
香水城| | 2014-3-31 16:26 | 只看该作者
magic_yuan 发表于 2014-3-29 12:51
多谢啊,
  DMA没用过。有个基本问题想请教下,后面我去认真看看DMA。
  1,捕获能触发DMA,那定时器溢出 ...

第一个问题,看看定时器的参考手册就能得知:


第二个问题,当然是可以一个定时器的不同通道分别捕获两路外部信号。因为不同通道上共享的是同一个计数器(timer base),即使用同一块表。只是第一个通道触发后,硬件自动记下当前表的值;第二个通道触发后,硬件自动记下此时表的值。那么之差就是了。

使用特权

评论回复
18
dzlyxzy| | 2017-3-1 14:24 | 只看该作者
grant_jx 发表于 2014-3-25 21:27
输入捕获更快,都是硬件的,曾用它来做HDLC解码

老哥,我是新人,刚接触32。我想问一下,这个都是硬件的是什么意思呢?输入捕获功能也是在用定时器来计算时间差呀

使用特权

评论回复
19
grant_jx| | 2017-3-2 12:54 | 只看该作者
dzlyxzy 发表于 2017-3-1 14:24
老哥,我是新人,刚接触32。我想问一下,这个都是硬件的是什么意思呢?输入捕获功能也是在用定时器来计算 ...

你楼上不是都讲了。自己做个减法,其它工作不都是硬件来做

第二个问题,当然是可以一个定时器的不同通道分别捕获两路外部信号。因为不同通道上共享的是同一个计数器(timer base),即使用同一块表。只是第一个通道触发后,硬件自动记下当前表的值;第二个通道触发后,硬件自动记下此时表的值。那么之差就是了。

使用特权

评论回复
20
dzlyxzy| | 2017-3-13 21:59 | 只看该作者
grant_jx 发表于 2017-3-2 12:54
你楼上不是都讲了。自己做个减法,其它工作不都是硬件来做

第二个问题,当然是可以一个定时器的不同通道 ...

非常感谢,自己将信将疑的理解经过更懂得人肯定了心里更踏实了~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:发到3000帖时,生活大概完成了一种转折。

359

主题

2770

帖子

7

粉丝