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

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

[复制链接]
STMCU小助手 发布时间:2022-4-1 15:18
01. 概述
" d9 c& F8 d' J( [7 f# ]$ G中断相关代码主要分布在固件库的 stm32f4xx_exti.h 和 stm32f4xx_exti.c 文件中。8 y' R* n5 a( S7 e7 o" @

4 }" T8 k+ A, ?$ Q) v02. 相关类型3 M& C( q4 D4 M9 w2 F
EXTI模式枚举
6 d4 l! S& G# F2 f! r2 c, y' i9 n
  1. <blockquote>/**
复制代码

( H: f& X% _4 a" H1 n( LEXTI触发枚举
" i) N0 ^2 j. Z8 X  V8 p( `$ N3 m) r6 }& ^5 X# q% Y' ~) i( z% b
  1. /**
    5 b# s6 J, A  c8 S6 u% D
  2.   * @brief  EXTI Trigger enumeration  
    & D* P8 S2 D% @0 D. R! \
  3.   */
    . j, {0 L* ~5 ]1 C" h  N$ A$ I% K
  4. , ~! c% q1 I- u5 i6 m  L; k
  5. typedef enum3 u7 y. ^# q% b9 F; e
  6. {
    # @( Y  D0 i! p3 N. O
  7.   EXTI_Trigger_Rising = 0x08, //上升沿
    5 I0 w; i+ o) I* `( J* K1 H
  8.   EXTI_Trigger_Falling = 0x0C,  //下降沿
    . e; @/ C. ?7 A! g
  9.   EXTI_Trigger_Rising_Falling = 0x10 //边沿触发
    5 L) g0 n  T8 T  L; g8 K
  10. }EXTITrigger_TypeDef;2 a# \0 N1 d% ^

  11. ! ~6 F& x$ g2 r
  12. #define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \+ z) s. l+ q8 M. C
  13.                                   ((TRIGGER) == EXTI_Trigger_Falling) || \
    & c" w* ~' t5 y1 z6 b
  14.                                   ((TRIGGER) == EXTI_Trigger_Rising_Falling))0 m1 }' S+ N) ?3 I. J4 ^
复制代码

1 ^8 J+ `* V: j# M0 D( B- S0 Y: kEXTI初始化结构体- g1 |. h5 B: s( I* a  j. O& G
/ k4 N2 j5 [6 e$ F2 q! d
  1. /**
    ' Q$ }3 T- V2 H- X
  2.   * @brief  EXTI Init Structure definition  1 ]3 }3 V8 I* g4 Z) Y
  3.   */
    7 `( k' N: X1 H& ]$ U

  4. ! A- n+ p7 q) b( J
  5. typedef struct
    ( ]  D% G0 b7 j0 d. N( d
  6. {
    ; E4 ~7 E1 X! z8 o
  7.   uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.
    # _$ R6 e" P7 C8 ~; `
  8.                                          This parameter can be any combination value of @ref EXTI_Lines */
    9 Z3 m9 q. J) b' m" R' Y

  9. + y3 n$ _5 n& S/ |6 a) r0 H
  10.   EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.
    " t: r7 Q. s- o  x  I8 M. r
  11.                                          This parameter can be a value of @ref EXTIMode_TypeDef */- p" D( I$ T  S. p: O2 E( x" f
  12. 5 W  G- z: E1 i: b; `* d
  13.   EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines., H# c9 X! Z2 J* z
  14.                                          This parameter can be a value of @ref EXTITrigger_TypeDef */
    0 G) X; I  b4 w" {# G0 k- P! n
  15. ; x/ r: N* N5 j* b3 `6 h5 Z
  16.   FunctionalState EXTI_LineCmd;     /*!< Specifies the new state of the selected EXTI lines.
    ; f( R: g" K$ B: t- @
  17.                                          This parameter can be set either to ENABLE or DISABLE */ # o9 S5 x4 }* b- A9 P* s  |$ O( {
  18. }EXTI_InitTypeDef;" E5 y) [" ~6 W8 A5 M& R
复制代码
. R9 z. I" i" i- ]0 Y6 ]% o5 s
外部中断线: u+ `, k: Q, L# u1 `
+ x, i) f! P4 j) j. \4 }5 v
  1. /** @defgroup EXTI_Lines
    6 {: `8 E5 J, Z, L. p2 R- l; d
  2.   * @{
    + a6 g1 |& X$ `6 }1 d1 ]4 ?. t/ M, L
  3.   */1 J: r- M& t; v! }/ q3 Y9 m' M
  4. + l/ F9 m; i" I, S7 I" {
  5. #define EXTI_Line0       ((uint32_t)0x00001)     /*!< External interrupt line 0 */( Y; |1 G1 O) G
  6. #define EXTI_Line1       ((uint32_t)0x00002)     /*!< External interrupt line 1 */
    6 s/ |& g) b1 {( v% {$ E
  7. #define EXTI_Line2       ((uint32_t)0x00004)     /*!< External interrupt line 2 */
    + ?6 p' I4 Z. p- Y- {
  8. #define EXTI_Line3       ((uint32_t)0x00008)     /*!< External interrupt line 3 */* R( V+ V; H5 a! |0 ]0 ]7 _; n( S, F4 y
  9. #define EXTI_Line4       ((uint32_t)0x00010)     /*!< External interrupt line 4 */
    4 b7 M7 p- P5 K- [  B
  10. #define EXTI_Line5       ((uint32_t)0x00020)     /*!< External interrupt line 5 */  k$ U5 C0 b) H/ ]8 p
  11. #define EXTI_Line6       ((uint32_t)0x00040)     /*!< External interrupt line 6 */1 b( b7 g5 M/ ]. q; I0 t
  12. #define EXTI_Line7       ((uint32_t)0x00080)     /*!< External interrupt line 7 */- h, @& F% z3 }+ N( C0 l
  13. #define EXTI_Line8       ((uint32_t)0x00100)     /*!< External interrupt line 8 */) l* g* X  K, C# p, [  O- H; w8 X8 z
  14. #define EXTI_Line9       ((uint32_t)0x00200)     /*!< External interrupt line 9 */
    8 C2 F% N+ W: U  L$ c! `, q
  15. #define EXTI_Line10      ((uint32_t)0x00400)     /*!< External interrupt line 10 */$ ]0 N0 x5 ^. O
  16. #define EXTI_Line11      ((uint32_t)0x00800)     /*!< External interrupt line 11 */
    3 n7 m7 L+ l  m5 t7 y* W) k
  17. #define EXTI_Line12      ((uint32_t)0x01000)     /*!< External interrupt line 12 */% l, V; g2 v" l
  18. #define EXTI_Line13      ((uint32_t)0x02000)     /*!< External interrupt line 13 */
    & `1 h3 q8 f% r. m1 Y% B) z+ z, p
  19. #define EXTI_Line14      ((uint32_t)0x04000)     /*!< External interrupt line 14 */, ]0 e1 G% I5 k* @5 S9 }- V7 x
  20. #define EXTI_Line15      ((uint32_t)0x08000)     /*!< External interrupt line 15 */
    6 U( y  v; }  t& G! G2 s" w0 B
  21. #define EXTI_Line16      ((uint32_t)0x10000)     /*!< External interrupt line 16 Connected to the
    0 Z4 Z/ M0 x) O/ m/ Q  f
  22. PVD Output */
    / T+ t8 C4 `' k: F! q
  23. #define EXTI_Line17      ((uint32_t)0x20000)     /*!< External interrupt line 17 Connected to the
    # F1 y! w$ [6 |4 e4 X
  24. RTC Alarm event */
      i: _  Y1 h- e8 x" {0 P- ?& e% p
  25. #define EXTI_Line18      ((uint32_t)0x40000)     /*!< External interrupt line 18 Connected to the
    8 Z& ~  N: Q' v* D' K" c# S
  26. USB OTG FS Wakeup from suspend event */                                    
    " ^1 N! G) u7 _. i7 A6 v+ H
  27. #define EXTI_Line19      ((uint32_t)0x80000)     /*!< External interrupt line 19 Connected to the6 k* N! R1 U6 K0 U$ |  A' R
  28. Ethernet Wakeup event */: H" l0 f4 z5 I8 k, l
  29. #define EXTI_Line20      ((uint32_t)0x00100000)  /*!< External interrupt line 20 Connected to the+ `' ^+ w6 w- A  F2 j! l; k2 z
  30. USB OTG HS (configured in FS) Wakeup event  */
    8 }# V9 n( V! K9 E* w" E6 ]6 [" h
  31. #define EXTI_Line21      ((uint32_t)0x00200000)  /*!< External interrupt line 21 Connected to the 0 @1 J: i* r& w
  32. RTC Tamper and Time Stamp events */                                               , |* G% i+ _4 U+ I
  33. #define EXTI_Line22      ((uint32_t)0x00400000)  /*!< External interrupt line 22 Connected to the
    1 a0 v% i8 i7 U" F5 P! r, v
  34. RTC Wakeup event */
    " a6 l) Q. D7 l# @3 J" ]
  35. #define EXTI_Line23      ((uint32_t)0x00800000)  /*!< External interrupt line 23 Connected to the 6 W8 P6 l  a# P: F2 H( [+ U0 v5 ?
  36. LPTIM Wakeup event */
    3 h7 [; P1 [* u! J3 j$ i( F
  37. ' @2 R, W$ W. ~* ~+ B
  38. 6 O+ Q) p2 r/ B) N5 I! F6 \  v- G; ~. Q
  39. #define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFF800000) == 0x00) && ((LINE) != (uint16_t)0x00)). |% q# X- z0 }) R+ a

  40. 0 l/ {/ C5 U) C3 F  K" W
  41. #define IS_GET_EXTI_LINE(LINE) (((LINE) == EXTI_Line0) || ((LINE) == EXTI_Line1) || \
    ) w' }9 E3 F- ]3 \! c
  42.                                 ((LINE) == EXTI_Line2) || ((LINE) == EXTI_Line3) || \
    9 T) q6 Q4 q  A( N- P( N
  43.                                 ((LINE) == EXTI_Line4) || ((LINE) == EXTI_Line5) || \+ W) I# v  d8 c( A$ E' U" K0 M
  44.                                 ((LINE) == EXTI_Line6) || ((LINE) == EXTI_Line7) || \
      Y7 B1 q- Z: X) U& z! D8 f: _- c6 k
  45.                                 ((LINE) == EXTI_Line8) || ((LINE) == EXTI_Line9) || \
    4 h( ]6 j- E- q4 g$ d, D2 d
  46.                                 ((LINE) == EXTI_Line10) || ((LINE) == EXTI_Line11) || \+ R" s$ V- V$ S  P7 Y
  47.                                 ((LINE) == EXTI_Line12) || ((LINE) == EXTI_Line13) || \
    $ u' \* z& g2 x, b' s
  48.                                 ((LINE) == EXTI_Line14) || ((LINE) == EXTI_Line15) || \: V% `. c% a- Q# z+ H% o
  49.                                 ((LINE) == EXTI_Line16) || ((LINE) == EXTI_Line17) || \4 t2 L5 v2 }0 N
  50.                                 ((LINE) == EXTI_Line18) || ((LINE) == EXTI_Line19) || \1 ?) f4 {. n  h7 \
  51.                                 ((LINE) == EXTI_Line20) || ((LINE) == EXTI_Line21) ||\) Y. Z( ^5 U* l- f3 K
  52.                                 ((LINE) == EXTI_Line22) || ((LINE) == EXTI_Line23))
复制代码

9 G" R/ A: _7 B) D+ V03. 相关函数
# _2 @  p/ s% O, r; n( @6 V
$ R7 e& R' E% N/ ?! ?
  1. /* Exported macro ------------------------------------------------------------*/* \# w& ^" s' C2 U4 Z. ^. k) S
  2. /* Exported functions --------------------------------------------------------*/
    7 d, C4 J1 G0 f' ?" d4 F# ^1 \

  3. 6 ?0 ~( i% A; ]
  4. /*  Function used to set the EXTI configuration to the default reset state *****/
    " s8 T: \; U6 K9 B: @+ j% ]  M
  5. void EXTI_DeInit(void);, D. x3 ?/ y6 u/ C2 I( O" b* F$ w

  6. 8 p7 Y5 @! s2 P; N
  7. /* Initialization and Configuration functions *********************************/& C- E  J1 ^" O. _
  8. void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    ( y" j* m% Y7 |$ u
  9. void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
      z/ G/ y" @8 G6 ~3 |
  10. void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
    8 g6 X0 m  @' n
  11. - q$ `9 d! B9 j$ {4 {5 }! p
  12. /* Interrupts and flags management functions **********************************/# l& O, V! o0 j& M! Y8 x+ i8 g
  13. FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
    2 i/ |  X: D! k
  14. void EXTI_ClearFlag(uint32_t EXTI_Line);: u& V1 B$ Y; o. w- @* F: Q7 N
  15. ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);% ?4 N* j; V7 e( Q& Q
  16. void EXTI_ClearITPendingBit(uint32_t EXTI_Line);3 p$ E$ X  \" B- l* q( w
复制代码
& [3 A" r6 R; g# S" b8 W

" m: o% m* u+ J8 C2 _% u
) ?7 W; o, H+ _/ F, n+ q+ `
赞 收藏 评论0 发布时间:2022-4-1 15:18

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版