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

STM32外部中断/事件控制器 (EXTI)

[复制链接]
STMCU小助手 发布时间:2022-12-29 17:00
外部中断/事件控制器包含多达 23 个用于产生事件/中断请求的边沿检测器。每根输入线都可 单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发)。每根输入线还可单独屏蔽。挂起寄存器用于保持中断请求的状态线。. _8 V7 R! k  x3 I
. g6 ?7 V  h- N7 I2 f
功能说明
2 q1 R. X3 o/ e& ]* V4 o( @5 \
要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置 2 个触发寄存器,同时在 中断屏蔽寄存器的相应位写“1”使能中断请求。当外部中断线上出现选定信号沿时,便会产生中断请求,对应的挂起位也会置 1。在挂起寄存器的对应位写“1”,将清除该中断请求。要产生事件,必须先配置好并使能事件线。' B; A% E' i  {7 O( s4 k; B4 X! |
根据需要的边沿检测设置 2 个触发寄存器,同时 在事件屏蔽寄存器的相应位写“1”允许事件请求。当事件线上出现选定信号沿时,便会产生事件脉冲,对应的挂起位不会置 1。通过在软件中对软件中断/事件寄存器写“1”,也可以产生中断/事件请求。6 W7 L& K; j! }- i/ b, E
( S* Y3 u3 X' W* f/ Y" ?
硬件中断选择* P" ^9 \9 C' E2 p5 b
要配置 23 根线作为中断源,请执行以下步骤:
% V/ o( d% d/ g! A- f: p● 配置 23 根中断线的屏蔽位 (EXTI_IMR)1 p: L4 ]& X) t% ~4 k
● 配置中断线的触发选择位(EXTI_RTSR 和 EXTI_FTSR)% ?2 \2 c( ?5 g( u' i* ?
● 配置对应到外部中断控制器 (EXTI) 的 NVIC中断通道的使能和屏蔽位,使得 23 个中断线中的请求可以被正确地响应。
: ~6 x4 d: k" n, u1 }

3 J# {* X4 H' s. U硬件事件选择
8 I2 g, \. H$ @1 T; q9 C7 v/ j+ N要配置 23 根线作为事件源,请执行以下步骤:
' D1 }' f$ }! ?9 K1 Y, q● 配置 23 根事件线的屏蔽位 (EXTI_EMR)
* m) P9 ?$ ?* U3 V3 s& |6 G● 配置事件线的触发选择位(EXTI_RTSR 和 EXTI_FTSR)3 X1 {( U3 ~# b3 {4 j# O

$ \+ k8 D- R3 V8 J- z3 U软件中断/事件选择
+ E, f0 P# A2 q9 C5 s2 ~
可将这 23 根线配置为软件中断/事件线。以下为产生软件中断的步骤。: |; R$ s! p4 f8 }  y# F
● 配置 23 根中断/事件线的屏蔽位(EXTI_IMR、EXTI_EMR)) G4 L( A4 [/ ~% }
● 在软件中断寄存器设置相应的请求位 (EXTI_SWIER)2 T2 n9 Y4 e) ~* w1 @, T
* B. V  I7 T4 X( L6 C4 A
GPIO中断线3 q5 \# o' q5 _6 Z- W* }+ {
GPIOX0都是共用一根总线的。7 B/ Q4 K$ v4 a/ Z. I5 i( J. Y/ A

0 |! a+ s; y4 a- h+ r5 W9 Q
99f2a7ad1c0e494f9d88ec56d4fd2741.png $ `8 s- e, U1 N5 ], K% T" ?- c+ `

, D' O4 S2 x5 E* }2 s
e89ef567c1ae4f3a9fb6d70b3bad5e70.png * f" f+ d. E, P! Z+ H" C3 }
" a1 X, U, ?1 w6 {% `! ^
4d071c63922d45569b15723a0412c26c.png 3 @3 d# M+ O& S& @2 T! x
73168f46e3eb40bdaf46d82abc34d597.png $ Z. Q2 r6 C5 `* D) [1 R6 G

- j# [" E* t! C2 q7 A. E" ^7 k, [8 u 500603cae6fd4bda80060652846d5d9c.png
+ z9 Q1 Z, D: i- e, b
' A! K3 S( ?# e5 g; A9 q, s/ d2 U
: _# {- o: ?' y) S* I 8a35546087624596bfcd898631f2c33e.png 5 Y2 K% V9 v0 ]6 c3 `2 D% Y
; e. K5 F. \! B) J
156fe5ffadcf47319b6b2006a3a5944d.png 0 w/ |6 U4 d5 Y4 ]2 N
# b1 y+ C: ^( E, h
配置步骤:
/ ?3 B! {! e+ ?/ u$ ~* ?拿硬件中断来说:
' j" t% j! @: D$ v% G6 D● 配置 23 根中断线的屏蔽位 (EXTI_IMR)
8 t; A- `' r4 Z) @* k4 S● 配置中断线的触发选择位(EXTI_RTSR 和 EXTI_FTSR)
- `5 r6 d: x  b7 s+ p. s4 z● 配置对应到外部中断控制器 (EXTI) 的 NVIC中断通道的使能和屏蔽位,使得 23 个中断线中的请求可以被正确地响应。) {1 K% g1 r/ ^4 k# \

# u9 L! t8 ]" R( x, u0 D比如我要开GPIO_A0的外部中断,按照上述步骤:  a* b: [/ d+ f9 z9 s  B
1.配置中断屏蔽位:PA0是挂在EXTI0线上,所以EXTI_IMR bit0 = 1* o$ [2 a: m* ?  [4 M7 t2 u1 o; p
2.配置触发选择位:也是EXTI_RTSR 和 EXTI_FTSR 的bit0 = 1
* z: _6 S* i9 J9 O3.调用NVIC控制寄存器开启EXTI0的中断
0 }) Q' K1 f: b0 V+ ]: Y2 z+ u* d7 a3 O  @- W
这里只是讲到了使用中断线,那么一根中断线上挂载了那么多GPIO的中断,我们怎么判断具体是哪个GPIO[0-15]发出的中断呢?
" U$ }; w/ \! n& |/ ]4 H5 l* s# \' ?这里就要提到SYSCFG外部中断配置寄存器了:3 J/ H* g, E. A. a

0 @& p) y2 D" P+ J5 I2 p
e775fc451dbe4734855c7019b64e70e8.png
  X, q- S9 A9 s) K3 x$ ?
2 r) I" r7 `) k9 V* a
设置下面的寄存器值就能把具体的gpio跟中断线连接起来。
7 p) z* D9 `; c  N代码实现:5 s4 z- C" g# X! `# i. A" e
  1. void KEY_IRQ_NVIC_init()8 v5 V# D$ Z2 y" r
  2. {3 n3 s2 j3 f! Y+ @. p6 ^' n
  3.     NVIC_InitTypeDef NVIC_InitStructure;7 A' Q& a- l* I8 _' T- i* s+ L* n
  4.         NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;+ i9 R5 ]  y/ e& x
  5.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0X01;* R$ x; g: ?7 S! T& h* u0 a
  6.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0X02;
    . w: |; P! J: _0 T  {* V7 l
  7.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;" N$ @2 {# N& y9 F! K) R
  8.         NVIC_Init(&NVIC_InitStructure);2 }- A5 g. C( D5 U  ~. U
  9. }
      ]' q" g+ P% _' j7 q

  10. 1 q7 l7 j# M3 ]! H8 u/ @  p. h6 Y! N
  11. void KEY_IRQ_init()
    / [$ o9 ~, y) l, _9 p( v7 x
  12. {3 P; I+ `5 i$ R
  13.     EXTI_InitTypeDef exit_def;" M# p% R' C* _; h7 b
  14.     EXTI_StructInit(&exit_def);( m6 K* l, @0 G1 g6 J3 H
  15. / j3 q5 a+ g, |
  16.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//ENABLE CLOCK
    3 J0 C% h, ]( I6 L
  17.     SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
    ' ~) |" H1 s" W1 B* m: A
  18. 8 C0 i( n# K) z3 _
  19.     exit_def.EXTI_Line = EXTI_Line0;
    * @4 i. S4 ?( I6 u
  20.     exit_def.EXTI_Mode = EXTI_Mode_Interrupt;% u  K) E, X& Q0 l5 f
  21.     exit_def.EXTI_Trigger = EXTI_Trigger_Falling;
    2 I- q5 ]: a( ?; V, Q% K4 }, ~- _
  22.     exit_def.EXTI_LineCmd = ENABLE;
    3 I( Y  m1 J/ g; Y1 y# F
  23.     EXTI_Init(&exit_def);
      i4 b8 t0 J: V! c/ ?( f
  24.     KEY_IRQ_NVIC_init();8 z. r6 l6 {  Q% k
  25. }% k* _- _$ J/ i; }! I

  26. " k9 Y- {+ D) ^. R. q
  27. void KEY_Init(){
    $ R8 S& r& o; H5 \( u2 e, x: L
  28.     GPIO_InitTypeDef GPIO_InitStructure;7 ^$ w. }0 V0 J* [2 d( n' I
  29.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    / z2 x, n4 n' Y9 y
  30.     GPIO_InitStructure.GPIO_Pin = KEY1_PIN;
    & h, |8 N! z$ U% w+ G
  31.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;. p: O4 A# y0 L
  32.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
      i1 Z) l0 O# g" e" M
  33.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;1 E; `5 U6 n0 a3 B4 p
  34.     GPIO_Init(GPIOA, &GPIO_InitStructure);6 o  c' p3 `4 ?4 H$ s
  35. 6 M1 ]+ j' l1 T
  36.     KEY_IRQ_init();# |: z; q0 C7 X' d& h
  37. }
    . H1 [( Y2 G: K' G

  38. 3 k6 Y+ v& E4 h9 K
  39. void EXTI0_IRQHandler()
    , ?( |# d4 S& P' H
  40. {/ l; W2 R: }# D' R( r8 x
  41.     //EXTI_ClearITPendingBit(EXTI_Line0); 跟EXTI_ClearFlag(EXTI_Line0);功能一样的,都是清理挂起寄存器。5 m; j% M' h( I  k* U
  42.     EXTI_ClearFlag(EXTI_Line0);
    " }# S9 q9 _; M. X
  43.     LED1_ON();! a$ ^+ M2 f# ]6 k
  44.     printf("you press key\n");
    5 t! I7 u/ J! O- h( N( [$ J
  45. }
      g0 N4 j7 u' o0 I6 A8 b
复制代码

8 v2 j1 h1 G: I' a5 }: b————————————————
3 U) r. P( c, O+ ?; k9 w, b版权声明:tony++2 B% d9 F+ b! e- }( N6 f& f+ u
1 W. @" m0 j6 C) H
+ {1 f% v$ U  R! p3 {
收藏 评论0 发布时间:2022-12-29 17:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版