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

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

[复制链接]
power568 发布时间:2019-9-12 11:21
        最近STM32F103的外部中断触发采集一组方波信号数据,但是发现数据总是不正确,怀疑是中断延迟即处理时间偏长导致的,所以测试了一下STM32F103的外部中断相应时间(中断触发信号有效到中断服务程序I/O输出之间的时间),测试信息如下:/ {0 H9 O1 V/ A' J- Q2 ^' S& Y# k
          1.   测试环境——STM32F103 @72MHz, 只配置几个输出端口和2个外部中断(端口速度配置位50MHz),但是只有一个有外部触发信号,中断服务程序直接输出测试端口状态,格式如下:! L& [* J% X, O0 Q
  1. void EXTI3_IRQHandler(void)  {* ~, E3 x1 H1 l$ \% X: x2 E
  2. {
    ' M( M; y. _, J2 {; A
  3.         {- n1 O- @! p) K  \) c" b! u; X7 p
  4.     TEST_RESET_PIN();
    7 k$ w2 S$ i1 m
  5.     TEST_SET_PIN();6 j; I, p# h& |" Q$ Q% M
  6.         }3 u: f& m1 B0 H2 q( q
  7.         
    4 H9 G* ~) A; @- e
  8.         EXTI_ClearITPendingBit(EXTI_Line3);
    $ s6 b4 X5 q  q
  9. }
复制代码
# S" V9 Q$ t0 O' E# K' r& v
          2. 测试设备:Tektronix TBS1102 @ 100MHz-1GS/s * [- B) B' @3 ?( k- z0 T
          3. 测试结果:中断响应时间约410 ns,波形如下:
0 f5 {3 C( y2 h; O' a* N 410.jpg
* l$ M- Y" M- s+ U9 L9 X9 [% }9 t; b0 T; f3 Z- f' d/ ~3 d
        如果中断服务中有参数定义,则时间也会怎加,我在中断里定义了两个8 位的变量,时间会增加到500ns。, V5 @) K1 u8 V. G  Z; C2 U8 o
        如果在增加中断服务中边沿判断功能:3 n: ^; l, I* m! y" X
" Z7 E4 V4 z' ]8 \
  1. void EXTI3_IRQHandler(void)
    * n, N, `" f1 s1 O6 m
  2. {
    5 P% }3 U) i' H/ r& p& B
  3.         
    7 t* m1 E# l$ B3 b: a* `: u8 r
  4.         if ( EXTI_GetITStatus(EXTI_Line3) )/ a- r% [8 Z  A( C: [9 Y
  5.         {% f; o9 }* q7 q7 W" q$ \9 X+ ]
  6.     TEST_RESET_PIN();
    6 l! E5 g8 X) I& d6 v2 Q
  7.     TEST_SET_PIN();
    2 R* B' k' e, I# `0 f- e1 C
  8.         }! F2 _. Z  f- R/ Q
  9.         7 ]8 \2 t+ ]0 S9 x
  10.         EXTI_ClearITPendingBit(EXTI_Line3);
    * z$ p' A# I% B- ~* I0 g( p) U5 E
  11. }
复制代码
' y) A7 O& E: R
        增时间增加到1000ns,波形如下:2 g# s4 E8 @; }0 K& P& r
1000.jpg : f; n- W7 c' m- `
5 Y6 T0 f) V: Y: a9 n
        在测试之气前,我以为中断响应时间都是很小的如200 ns设置更小,今天实测之后才发现......2 X4 r3 T/ M1 \$ C: }& O

! c4 o5 f$ q. ]" z" B% Z4 j% `3 Y4 Q, f
收藏 评论7 发布时间:2019-9-12 11:21

举报

7个回答
哀歌与世无争 回答时间:2019-9-12 16:29:12
可以试试不用库函数,直接读写寄存器应该会再快一些. q0 M7 k8 O, I( p
zhao.zhao 回答时间:2019-9-12 17:59:22
响应进入中断程序时,CPU执行了很多压栈的指令和跳转指令,所以反应有点慢。如果追求速度的话,可以试试直接寄存器操作,速度应该会快点
power568 回答时间:2019-10-10 14:57:00
zhao.zhao 发表于 2019-9-12 17:59
# E, K8 E) P: _) C8 ?+ `# t响应进入中断程序时,CPU执行了很多压栈的指令和跳转指令,所以反应有点慢。如果追求速度的话,可以试试直 ...
' a5 {: \3 p: w$ F9 z- C
确实是这样的,使用寄存器延迟会更小,在中断函数里定义局部变量也是要耗时间的。。。
mylovemcu 回答时间:2019-10-10 18:55:24
很正常啊  如果想要纳秒级延时精度  可以考虑FPGA  那响应速度杠杠的  贼给力
power568 回答时间:2019-10-16 15:24:53
mylovemcu 发表于 2019-10-10 18:551 p4 Q: q9 m& E  E+ s
很正常啊  如果想要纳秒级延时精度  可以考虑FPGA  那响应速度杠杠的  贼给力 ...

: {1 h& U8 q% a2 V$ \* T% s2 [暂时用不到,换个其他的方案试试。。。
huangyanga 回答时间:2019-10-17 11:28:53
顶楼主,这个问题我也是前两天才发现,和你的结论基本一致。在定时器中断里面翻转IO口,最高只能输出到500kHz的方波。因为中断响应的时间是几百纳秒级别的,波形上Mhz,很难。如果在中断里面增加一些变量判断,更慢。
power568 回答时间:2019-10-31 10:14:47
huangyanga 发表于 2019-10-17 11:28" v: u# m; t% z8 E% U0 \4 t
顶楼主,这个问题我也是前两天才发现,和你的结论基本一致。在定时器中断里面翻转IO口,最高只能输出到500k ...
1 W# z- F2 S$ r& Z) s2 _7 q
不用不知道,一用吓一跳吧
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版