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

【经验分享】STM32 中断相关函数和类型

[复制链接]
STMCU小助手 发布时间:2022-4-1 15:18
01. 概述
4 g2 Z& M7 H! J1 Y' M' |; s中断相关代码主要分布在固件库的 stm32f4xx_exti.h 和 stm32f4xx_exti.c 文件中。
( M/ J+ a5 {5 B2 T
2 B7 f# Z) t* @% H: t# J02. 相关类型. D$ b0 U9 ^- P$ T" m! M- f1 L# P1 l
EXTI模式枚举$ ~7 v# L  H  y4 p* }2 h3 N
/ ]( X' X3 b, f9 U0 @/ U9 D9 A
  1. <blockquote>/**
复制代码

1 H; u8 s, K" VEXTI触发枚举6 c3 I* q6 L1 o" B- Z

$ ]9 |: M  A0 k, ]: \; K# L
  1. /**
    1 ^8 T8 z" K% C. c6 m( ^
  2.   * @brief  EXTI Trigger enumeration  " A& _0 h8 C& n6 w" y: ]9 W
  3.   */
    ) Z' ]  Z: M+ G( c9 K& |

  4. 8 s9 H4 D  a% g6 \$ b2 w0 H: e/ i
  5. typedef enum- {! \( A, w: \7 D5 {* G& R) A3 H8 A
  6. {/ H& ^! C0 C7 s3 B
  7.   EXTI_Trigger_Rising = 0x08, //上升沿
    2 U1 c! u* _4 S( s+ J
  8.   EXTI_Trigger_Falling = 0x0C,  //下降沿
      F- C! P3 @7 M' R4 C
  9.   EXTI_Trigger_Rising_Falling = 0x10 //边沿触发
    ; E+ C8 V. z0 l2 \  F$ Y; ~
  10. }EXTITrigger_TypeDef;/ N0 P: i6 f' f3 M
  11. 1 h6 V( g) D$ \) @
  12. #define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \4 o- A+ t9 g. l9 |
  13.                                   ((TRIGGER) == EXTI_Trigger_Falling) || \8 m% \2 Y0 }, {
  14.                                   ((TRIGGER) == EXTI_Trigger_Rising_Falling))3 Y# K  a3 w$ P* R
复制代码
3 M' l4 h2 T3 Q# ?; T/ ]
EXTI初始化结构体9 l$ b$ K) J( Q7 e8 R: `( Q
' Y/ S( S2 {" O, d; D
  1. /** 8 u/ B- `1 ^0 @  G6 w6 A& j
  2.   * @brief  EXTI Init Structure definition  8 a4 R! x4 ~+ h2 \2 X
  3.   */
      x( j9 j4 q7 @

  4. - c: f$ O9 a" k% n; ~+ ~1 ~
  5. typedef struct: {7 X; b5 U6 T3 h# |- S# c
  6. {$ v* H* h( Y. x# z% _7 c% T' N
  7.   uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.5 o! X$ e+ j" B$ [- V) J
  8.                                          This parameter can be any combination value of @ref EXTI_Lines */) L) ?2 }: w. _
  9. & J. Q3 W( G! a. B5 B% _: y
  10.   EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.( v( p- \# c# v& D3 z
  11.                                          This parameter can be a value of @ref EXTIMode_TypeDef */
    + R; @+ H- Z. o
  12. $ }: j* M$ S5 e" X
  13.   EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
      W+ z/ N* V" v6 W* |, l  n  ^2 ]
  14.                                          This parameter can be a value of @ref EXTITrigger_TypeDef */5 @. Y. K% `2 U' n+ ^
  15. 8 g$ k6 J$ a2 k! \7 X
  16.   FunctionalState EXTI_LineCmd;     /*!< Specifies the new state of the selected EXTI lines.: m1 u6 g  z, p5 K4 u. |% b
  17.                                          This parameter can be set either to ENABLE or DISABLE */ 1 a& R: h- i1 ]$ X' ^6 s/ [
  18. }EXTI_InitTypeDef;) K) D% v+ V" ?: E% _
复制代码
( Z& D. ^% y0 O  j3 \/ U
外部中断线/ f5 a, L2 j4 s0 I: p
( j7 ~9 X* T6 Y) X- g7 j
  1. /** @defgroup EXTI_Lines
    ! k6 h0 d8 Y  J8 K9 z! f7 Y( b' k! J
  2.   * @{3 J$ n9 T! G8 @  N
  3.   */
    7 V7 F1 K# m; F' ]( M

  4. ' w% x% I" M* G- a( Z8 c
  5. #define EXTI_Line0       ((uint32_t)0x00001)     /*!< External interrupt line 0 */
    , `8 X, e+ S0 n! f
  6. #define EXTI_Line1       ((uint32_t)0x00002)     /*!< External interrupt line 1 */
    # a; B7 p6 B, ?3 P$ Y5 ]3 J; T( ]  W
  7. #define EXTI_Line2       ((uint32_t)0x00004)     /*!< External interrupt line 2 */% D2 _% g1 K! i* j
  8. #define EXTI_Line3       ((uint32_t)0x00008)     /*!< External interrupt line 3 */
    . K4 I1 g8 v( Z) [
  9. #define EXTI_Line4       ((uint32_t)0x00010)     /*!< External interrupt line 4 */4 f' c# d0 u5 w$ J& _2 S0 g' E2 s
  10. #define EXTI_Line5       ((uint32_t)0x00020)     /*!< External interrupt line 5 */0 L' f2 I1 {6 m/ [- m$ o- m  H
  11. #define EXTI_Line6       ((uint32_t)0x00040)     /*!< External interrupt line 6 */
    # T+ j* ?# o9 ?$ e5 c
  12. #define EXTI_Line7       ((uint32_t)0x00080)     /*!< External interrupt line 7 */
    * l; T$ F& e6 X9 e  m( ^$ [1 T
  13. #define EXTI_Line8       ((uint32_t)0x00100)     /*!< External interrupt line 8 */8 [0 J/ Q8 Y) Z: e! q# x+ O; q5 N
  14. #define EXTI_Line9       ((uint32_t)0x00200)     /*!< External interrupt line 9 */# L( A* K& c, r+ C# W- ~8 z, w
  15. #define EXTI_Line10      ((uint32_t)0x00400)     /*!< External interrupt line 10 */
    9 `) M/ W, e% g1 a* e1 g4 M+ r
  16. #define EXTI_Line11      ((uint32_t)0x00800)     /*!< External interrupt line 11 */
    4 u& _! ?$ ?) }  N$ @6 f" T) n& I
  17. #define EXTI_Line12      ((uint32_t)0x01000)     /*!< External interrupt line 12 */* b# q5 Z0 W6 d& I, ?% y
  18. #define EXTI_Line13      ((uint32_t)0x02000)     /*!< External interrupt line 13 */
    ) u7 O0 s5 @# y# P% d/ p* j/ i7 l
  19. #define EXTI_Line14      ((uint32_t)0x04000)     /*!< External interrupt line 14 */, L. [; i+ S: ^' B2 y/ M
  20. #define EXTI_Line15      ((uint32_t)0x08000)     /*!< External interrupt line 15 */
    ' `5 m( J4 I* h9 D: e9 [8 v6 Q, V
  21. #define EXTI_Line16      ((uint32_t)0x10000)     /*!< External interrupt line 16 Connected to the9 W3 z+ n% G) ^5 O
  22. PVD Output */
    8 H1 z4 J' H7 i3 V/ _
  23. #define EXTI_Line17      ((uint32_t)0x20000)     /*!< External interrupt line 17 Connected to the
    2 r' ]# A4 o, _" z" B* E- y) Q3 z, [" M
  24. RTC Alarm event */
    + k0 r3 l7 L6 Y- c  }
  25. #define EXTI_Line18      ((uint32_t)0x40000)     /*!< External interrupt line 18 Connected to the
    8 X) C5 ]* b2 u
  26. USB OTG FS Wakeup from suspend event */                                    / z- V' a$ r8 [' A' \( q* q7 L
  27. #define EXTI_Line19      ((uint32_t)0x80000)     /*!< External interrupt line 19 Connected to the
    / [# G- [9 r) C& c
  28. Ethernet Wakeup event */- @1 N/ G6 {# e, }% ]9 y- t
  29. #define EXTI_Line20      ((uint32_t)0x00100000)  /*!< External interrupt line 20 Connected to the. ?. B) S- h9 q
  30. USB OTG HS (configured in FS) Wakeup event  */- l- c! [) h8 K$ F6 Q3 ~3 K
  31. #define EXTI_Line21      ((uint32_t)0x00200000)  /*!< External interrupt line 21 Connected to the * M* q2 O4 Z+ \1 n  h
  32. RTC Tamper and Time Stamp events */                                               7 o% y0 u1 }: I$ Y# x; ^0 q  Z- Y
  33. #define EXTI_Line22      ((uint32_t)0x00400000)  /*!< External interrupt line 22 Connected to the
    * p; `+ c, n6 ?9 T% q
  34. RTC Wakeup event */
    0 j6 y7 r" V0 u. O
  35. #define EXTI_Line23      ((uint32_t)0x00800000)  /*!< External interrupt line 23 Connected to the
    ' F2 e. }  \4 r' l- G) ~9 t' T
  36. LPTIM Wakeup event */
    # S+ _; c6 Y. n# Y% h7 \! B
  37. , `0 x9 \6 f' S, `  j2 G# y) p
  38.   V* t1 w6 G. _- H
  39. #define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFF800000) == 0x00) && ((LINE) != (uint16_t)0x00))( B3 N! s) H# y: ?; m& Y/ R
  40. 8 E/ T" t6 b: s* [; o! [  I: d
  41. #define IS_GET_EXTI_LINE(LINE) (((LINE) == EXTI_Line0) || ((LINE) == EXTI_Line1) || \- I+ \' M2 o4 U4 S4 `8 m1 u0 A# h. H/ T
  42.                                 ((LINE) == EXTI_Line2) || ((LINE) == EXTI_Line3) || \
    ) V$ r; `+ C4 A. h: d
  43.                                 ((LINE) == EXTI_Line4) || ((LINE) == EXTI_Line5) || \3 J8 m3 [- A% W+ [
  44.                                 ((LINE) == EXTI_Line6) || ((LINE) == EXTI_Line7) || \3 ]! y1 Y3 x! t5 l; T, W5 G
  45.                                 ((LINE) == EXTI_Line8) || ((LINE) == EXTI_Line9) || \  K9 h: n! _6 R* K
  46.                                 ((LINE) == EXTI_Line10) || ((LINE) == EXTI_Line11) || \
    9 Q& J( a% B6 v
  47.                                 ((LINE) == EXTI_Line12) || ((LINE) == EXTI_Line13) || \2 G+ ~% b3 Y; Q% y" z3 d
  48.                                 ((LINE) == EXTI_Line14) || ((LINE) == EXTI_Line15) || \
    : h$ ?  v' e) p4 ^' R
  49.                                 ((LINE) == EXTI_Line16) || ((LINE) == EXTI_Line17) || \1 X; w5 Z6 y. l3 Z
  50.                                 ((LINE) == EXTI_Line18) || ((LINE) == EXTI_Line19) || \
    3 c1 S4 g' x- o- c3 r: |( ]$ L. A' z3 S
  51.                                 ((LINE) == EXTI_Line20) || ((LINE) == EXTI_Line21) ||\
    8 t- \+ b, C* m
  52.                                 ((LINE) == EXTI_Line22) || ((LINE) == EXTI_Line23))
复制代码
. [, _) ?- z! i6 }
03. 相关函数
4 N7 ]) v& I5 s: g7 `' z: p
  b" ]+ R  u5 h: k2 c6 J+ [" a
  1. /* Exported macro ------------------------------------------------------------*/
    % D& D- j7 G" o8 e) o
  2. /* Exported functions --------------------------------------------------------*/+ V- Z8 e1 w1 n# G2 N

  3. / t' ?: X0 h. L6 s% a
  4. /*  Function used to set the EXTI configuration to the default reset state *****/  H6 C6 D, G$ \( h# U2 j
  5. void EXTI_DeInit(void);1 D; p2 N7 t* @) b: ]/ l

  6. 7 k4 @. `1 S: Z) G5 |1 ]
  7. /* Initialization and Configuration functions *********************************/
    & ^! r% t( f; y& C2 c0 `: `
  8. void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    6 }5 A# R4 M( o" T5 n  ~6 C
  9. void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
    ' t7 H5 y7 D3 H( n  Y- \# O
  10. void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
    & N1 f/ Z) G" R. y' j% P# r1 M
  11. 2 }- M; H; {) V' A
  12. /* Interrupts and flags management functions **********************************/
    + i: s+ e+ j% x2 q/ G5 H/ r
  13. FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
    6 |2 k9 X" g* ]+ G
  14. void EXTI_ClearFlag(uint32_t EXTI_Line);- n7 ~+ N5 o2 y: ~6 B/ ?9 F0 f4 a
  15. ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);' J/ c9 W8 p+ t
  16. void EXTI_ClearITPendingBit(uint32_t EXTI_Line);" M1 X8 {5 ?* ?1 ], I
复制代码

/ h+ f+ P& j" j! |  ]
/ y. w+ P" J3 U5 a! x( Q" m, T6 Z) w8 [8 n9 X: d$ O6 D0 O
收藏 评论0 发布时间:2022-4-1 15:18

举报

0个回答

所属标签

相似分享

官网相关资源

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