你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

刷新认知 STM32F103外部中断相应时间

[复制链接]
power568 发布时间:2019-9-12 11:21
        最近STM32F103的外部中断触发采集一组方波信号数据,但是发现数据总是不正确,怀疑是中断延迟即处理时间偏长导致的,所以测试了一下STM32F103的外部中断相应时间(中断触发信号有效到中断服务程序I/O输出之间的时间),测试信息如下:
0 J) U9 C7 b# N9 J( }/ t& x! P          1.   测试环境——STM32F103 @72MHz, 只配置几个输出端口和2个外部中断(端口速度配置位50MHz),但是只有一个有外部触发信号,中断服务程序直接输出测试端口状态,格式如下:
7 H, v6 L3 K5 }2 i3 E3 y3 W
  1. void EXTI3_IRQHandler(void)! w' l' Y8 d. n8 N8 L
  2. {* N: A  l! c" G3 K0 p( I
  3.         {
    1 e$ w3 C9 A) y, q4 J
  4.     TEST_RESET_PIN();
    ; p  T" b9 A) ^6 t8 ^3 p1 M/ \
  5.     TEST_SET_PIN();
    1 t$ L+ _4 h5 y% l; Y$ |' R, j
  6.         }, k+ `( \; V9 D7 }# d% F8 {, w
  7.         & E0 q) c- S' ~( s! `7 f
  8.         EXTI_ClearITPendingBit(EXTI_Line3);6 j, D  }# i+ k7 w" B7 m
  9. }
复制代码
( Q1 ]' ]' e' X" F
          2. 测试设备:Tektronix TBS1102 @ 100MHz-1GS/s 1 u0 @0 A6 [4 \# v6 t
          3. 测试结果:中断响应时间约410 ns,波形如下:9 f9 S/ X" g! q% g* U4 n1 I( F; _8 m
410.jpg : ~7 L# ]3 R; k, g, z2 w2 d+ n% _

9 ?; @3 s( A5 _: n2 V        如果中断服务中有参数定义,则时间也会怎加,我在中断里定义了两个8 位的变量,时间会增加到500ns。: ^* E$ T3 z2 F7 }; U4 C8 N
        如果在增加中断服务中边沿判断功能:2 D5 G+ o& i) u
1 _) i6 H8 Q1 L4 p1 V+ s
  1. void EXTI3_IRQHandler(void)
    7 A5 i* l0 M% x+ ^  t
  2. {* q8 Z7 V: {/ T; W8 u$ X8 T" I
  3.         ' v- O9 Q( O- C4 y0 ]0 V5 o6 O. @
  4.         if ( EXTI_GetITStatus(EXTI_Line3) )' S6 \0 N) c. n0 w) X
  5.         {5 ?5 u1 m0 L. ~- J
  6.     TEST_RESET_PIN();
    4 ^6 ]# ]) t/ b, i% W* Q
  7.     TEST_SET_PIN();
    ) N  o! y# q/ t8 A- g
  8.         }
    ' B. t( F# p! D  z' W
  9.         2 @# F3 x! H6 \+ G3 O
  10.         EXTI_ClearITPendingBit(EXTI_Line3);( I: C7 t$ [& g9 Z! @/ H& R
  11. }
复制代码

8 q( D2 z# p- N
        增时间增加到1000ns,波形如下:) l5 u* N. M9 a3 }! a  J
1000.jpg
7 s' b6 T+ x9 z( P7 z: G  T- {7 I7 _  q
        在测试之气前,我以为中断响应时间都是很小的如200 ns设置更小,今天实测之后才发现......3 s0 r7 I& q/ f4 n. g3 e: i

7 z  w- A  g  O7 W, z2 c  i2 f
9 o/ E" q" z3 N/ x5 I8 K% S; M
收藏 评论7 发布时间:2019-9-12 11:21

举报

7个回答
哀歌与世无争 回答时间:2019-9-12 16:29:12
可以试试不用库函数,直接读写寄存器应该会再快一些4 l, q# s9 y( |9 {+ V- N/ `
zhao.zhao 回答时间:2019-9-12 17:59:22
响应进入中断程序时,CPU执行了很多压栈的指令和跳转指令,所以反应有点慢。如果追求速度的话,可以试试直接寄存器操作,速度应该会快点
power568 回答时间:2019-10-10 14:57:00
zhao.zhao 发表于 2019-9-12 17:598 Y* ]  k) Q1 x
响应进入中断程序时,CPU执行了很多压栈的指令和跳转指令,所以反应有点慢。如果追求速度的话,可以试试直 ...

3 m5 @& O0 f4 U3 M& S确实是这样的,使用寄存器延迟会更小,在中断函数里定义局部变量也是要耗时间的。。。
mylovemcu 回答时间:2019-10-10 18:55:24
很正常啊  如果想要纳秒级延时精度  可以考虑FPGA  那响应速度杠杠的  贼给力
power568 回答时间:2019-10-16 15:24:53
mylovemcu 发表于 2019-10-10 18:55
* j2 b; _/ r- x0 r- O$ _很正常啊  如果想要纳秒级延时精度  可以考虑FPGA  那响应速度杠杠的  贼给力 ...

: {: Z9 _4 R$ P9 q暂时用不到,换个其他的方案试试。。。
huangyanga 回答时间:2019-10-17 11:28:53
顶楼主,这个问题我也是前两天才发现,和你的结论基本一致。在定时器中断里面翻转IO口,最高只能输出到500kHz的方波。因为中断响应的时间是几百纳秒级别的,波形上Mhz,很难。如果在中断里面增加一些变量判断,更慢。
power568 回答时间:2019-10-31 10:14:47
huangyanga 发表于 2019-10-17 11:28
  M+ Q) p/ Z6 O. l3 m2 Y顶楼主,这个问题我也是前两天才发现,和你的结论基本一致。在定时器中断里面翻转IO口,最高只能输出到500k ...

7 k$ l- K2 L: C. b6 C/ w1 m不用不知道,一用吓一跳吧
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版