今天仔细研究了GPIO HAL模块,看看他的定义是什么意思,发出来给大家看一看,希望对大家有一定的帮助。
3 L; n/ j9 r* V G- " J/ m# z" u+ e, k/ p& ~1 c
- /*GPIO初始化结构定义*// k" l! a9 R( v" v2 R; {
- typedef struct7 ^( D/ `/ i4 l5 |) q
- {
# k" Z% F3 w% D - uint32_t Pin;/*指定要配置的GPIO引脚。此参数可以是GPIO_pins的任何值*/, S0 v' ?7 B5 O( D# }6 }2 J$ u* o
+ N {! m: k1 Q: K3 E v) ?- uint32_t Mode;/*指定所选引脚的操作模式。此参数可以是GPIO_mode的值*/) w# \ } ~1 |; h# h& `+ o! p
( w. O4 U/ A5 p- uint32_t Pull;/*指定所选引脚的上拉或下拉激活。此参数可以是GPIO_pull的值*/! l- b8 m" o6 ]1 @, N: L
6 I4 v/ h0 L5 `, g! z- uint32_t Speed;/*指定选定引脚的速度。此参数可以是GPIO_speed的值*/
0 G# p8 q6 c4 k8 G$ U
. M, {2 ^; \! ~- uint32_t Alternate;/*要连接到选定引脚的外围设备此参数可以是GPIOEx_Alternate_function_selection的值*/
5 r% q0 `* B: T8 `5 |2 T3 e - }GPIO_InitTypeDef;
( f; R; C7 h2 A8 B7 c
( c, q; P2 N/ V5 o2 v- /*GPIO位设置和位RESET枚举*/+ T4 x. _- ]( V" Y9 R/ |# D. N
- typedef enum
, ~4 n$ p( @6 E - {
, X( i; K. }& t1 B# }4 x - GPIO_PIN_RESET = 0U,
7 a4 [9 \1 O4 W5 v; T - GPIO_PIN_SET0 V+ A8 e$ u. U& e
- } GPIO_PinState;
. @" g/ I1 D. _, V! j) @ - % N3 z6 {; h1 ^* l# p
- /*GPIO引脚*/- o& q2 I3 E5 E6 n4 Z
- #define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */4 q+ }0 ^; T4 t) u: r! @: a- I
- #define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */0 n! ^3 n+ d* K- o& I1 J
- #define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */
) y! I2 p$ u! _4 w5 r - #define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */
) f+ W4 p) U# ? - #define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */
( v7 v# q% m; e: k" S$ A - #define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */
1 g2 X: H8 c- Z6 ~$ { - #define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */, d, L0 v- W1 X7 ~% }8 h) ^+ f
- #define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */
: h# e/ S/ B, U" H0 l, J/ G/ V - #define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */9 u+ c0 b& M4 O+ o$ n, a
- #define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */
% V/ L8 k, z. t0 q - #define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */' B8 u( Y$ U% [$ K' G5 B& f
- #define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */3 j) u+ n: [) \# l! V
- #define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */8 J2 J9 V" B. d2 D# s
- #define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */
/ G0 i4 j1 l9 O9 Y" a1 h8 a - #define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */0 V# c# x2 E# |1 K5 t' Z1 E
- #define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */
8 B6 R) _: P$ h# O, l5 i$ C: Z - #define GPIO_PIN_All ((uint16_t)0xFFFF) /* 选择所有引脚 *// e' O( g7 K: l; r' D
- ' f# s- e$ [/ \4 s. [0 D! T* c- t) F
- #define GPIO_PIN_MASK (0x0000FFFFU)/*用于断言测试的PIN掩码*/
3 a/ q* j8 f0 R - 3 s0 M+ }$ ~. n0 P z6 W4 _
- /*+ k, f4 G3 d9 l) [" K
- *GPIO配置模式' B+ n" \: I+ {8 V! \% ?2 s
- * 元素值约定:0xX0yz00YZ' A- v: u; l/ V/ s6 K
- * -X:GPIO模式或EXTI模式' @5 n2 U% X8 T# f5 I4 {
- * -y:外部IT或事件触发检测
- I, l) K1 Q- Q/ B( d7 I - * -z:外部IT或事件上的IO配置
& C5 N/ a9 j) F4 ?2 T - * -Y:输出类型(推挽或漏极开路)" o9 W; p, f2 W9 K! J* }
- * -Z:IO方向模式(输入,输出,备用或模拟)' a* ^* |- H9 b+ U0 \) ?* @
- */
& G0 T, N$ r( S" \% @- l/ R - #define GPIO_MODE_INPUT (0x00000000U) /*输入浮动模式*/
9 H* C- u8 |* `# Y - #define GPIO_MODE_OUTPUT_PP (0x00000001U) /*输出推挽模式*/, E, l& J' ]$ Y/ ~ [6 [3 v
- #define GPIO_MODE_OUTPUT_OD (0x00000011U) /*输出漏极开路模式*/( M& o' R5 X+ R1 w
- #define GPIO_MODE_AF_PP (0x00000002U) /*备用功能推拉模式*/
9 t& N7 i; c# ?8 b3 S - #define GPIO_MODE_AF_OD (0x00000012U) /*替代功能开漏模式*/$ H$ d$ ^ ?, S/ }
- #define GPIO_MODE_ANALOG (0x00000003U) /*模拟模式*/
1 U! \4 W5 q* i4 L% c# ]& K - #define GPIO_MODE_IT_RISING (0x10110000U) /*具有上升沿触发检测的外部中断模式*/; J. v2 c- h) b! n' M
- #define GPIO_MODE_IT_FALLING (0x10210000U) /*具有下降沿触发检测的外部中断模式*/
6 k. [4 ~# M/ t6 R: m$ E4 T: P - #define GPIO_MODE_IT_RISING_FALLING (0x10310000U) /*具有上升沿/下降沿触发检测的外部中断模式*/
0 g3 V( w$ i2 x% B D' h - #define GPIO_MODE_EVT_RISING (0x10120000U) /*具有上升沿触发检测的外部事件模式*/& i( o0 \4 x- M2 r4 L ~, i& r' i
- #define GPIO_MODE_EVT_FALLING (0x10220000U) /*具有下降沿触发检测的外部事件模式*/
7 Q; T7 S, Z2 U+ m5 G8 J - #define GPIO_MODE_EVT_RISING_FALLING (0x10320000U) /*具有上升沿/下降沿触发检测的外部事件模式*/
3 {. y$ f$ }9 A4 d
: S( u5 _# w* T+ ^ ]. \+ a( [
2 z- S' y; h2 i" A- /*3 U: ?4 e/ E3 I4 s: m
- *GPIO输出最大频率3 f! g8 T! \: o
- */
+ f) ~% t0 _2 t - #define GPIO_SPEED_FREQ_LOW (0x00000000U) /*范围最高5MHz*/5 e5 S7 L; P# v+ C& c
- #define GPIO_SPEED_FREQ_MEDIUM (0x00000001U) /*范围5MHz至25MHz*/* U( c8 h X/ Y& P9 t
- #define GPIO_SPEED_FREQ_HIGH (0x00000002U) /*范围25MHz至50MHz*// s- v6 [* y- n$ \+ h4 E
- #define GPIO_SPEED_FREQ_VERY_HIGH (0x00000003U) /*范围50MHz至80MHz*/
4 @+ D/ |- {$ x/ u& G0 t
* l7 S6 c6 d4 S5 n; o! R1 ^- /*3 _4 Z1 s& x: m( O2 z* T
- *GPIO上拉或下拉激活
, F$ D) W8 F) G% M% @4 p - */7 T9 ^! G( [& Y9 |- q; o) d
- #define GPIO_NOPULL (0x00000000U) /*无上拉或下拉激活*/
2 h) @ ~( l4 {9 ]& m2 q - #define GPIO_PULLUP (0x00000001U) /*上拉激活*/
`7 C# w2 e' |( t+ R% S! A - #define GPIO_PULLDOWN (0x00000002U) /*下拉激活*/
, P; o/ {2 R' S5 G( @
]& R; M& H- @" c; G- [! j+ H- 0 U K/ G% y6 L2 G+ `3 t
- /*
& \* O0 k1 h3 b8 }, u& t* z, f0 V& G - GPIO引脚安全或非安全属性
9 ?. b. Z; B9 v - */
/ a/ v: W! l; J0 c E4 p - #define GPIO_PIN_SEC (0x00000001U) /*安全引脚属性*/; P! r1 p5 ^/ ^5 e7 T
- #define GPIO_PIN_NSEC (0x00000000U) /*非安全引脚属性*/. b1 ~! E* b% F7 w2 L& U
% c" V; f7 Q: y2 ?6 r) [# E- : G' @: ~6 K1 F1 u) U& J
- 6 g8 y9 Z1 I7 q9 D3 r! `! u
- /**
9 q& p/ z' o2 w! } - *检查指定的EXTI行是否声明了上升沿。
) f8 b8 H( s: S1 g+ D0 Y - */+ s. [) k/ @6 V' ~1 l# \
- #define __HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 & (__EXTI_LINE__))
; _4 k1 s9 A( y - ; U7 u- n! q" B+ X& o }. {; M4 Q' z( ?/ ]
- /**
9 Y* Q" q2 I& a$ H: e - *清除EXTI行上升的挂起位。
/ [5 {- x! g6 A2 P+ d* Y - */
; T3 q0 f, |' q, b( b - #define __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 = (__EXTI_LINE__))
6 \( ?+ F! H* @; H
+ h7 x4 j0 L+ J' p$ @! r$ ^- /**
( ?2 `. r/ o$ A1 P - *检查指定的EXTI行是否已声明下降沿。 \, e V, W6 p+ q0 v0 ^
- */
4 a7 d, {# B! V2 H- E - #define __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 & (__EXTI_LINE__))
* U9 M, n9 R9 J
^, e9 X( ~8 f- /**
% y6 e1 `7 o% r7 P3 c2 P9 m& L - *清除EXTI行下降的挂起位。9 M0 l+ B' Q& }1 X" n
- */
3 e4 N/ L2 r/ w - #define __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 = (__EXTI_LINE__))) z" @- ?3 Z; }/ W# ? c
- p) C" x) V0 y* H! i$ L! ?
- /** O. L* w/ P! j! J! ~: v
- *检查指定的EXTI行是否有效。4 X" y, y5 \: e8 p3 @- e6 R
- */4 u% u g7 U7 e' p) l0 k0 ?
- #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (__HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) || \
4 S3 F2 {& B; J7 `; D8 G - __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__)): O1 _5 o9 t( X* I
. ~0 {. X# u- `+ ?8 L0 V- T- v& u( H- /**
" ?4 Q- i9 e: b b; M! \ - *清除EXTI行暂挂位。
6 [3 I5 d. |' | L9 C. l- F3 f' j - */" n. ^8 j1 [: {& v7 w. `# Q
- #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) \, M; i5 ^3 J! c
- do { \' u7 k$ P! r$ a# [
- __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__); \
5 |- j/ ^' s" ~" I, v3 a - __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__); \
d9 s8 \/ ^0 z9 h - } while(0)' l8 F3 Q0 S' a
~% f) C6 Z1 N) I3 k7 G1 [
$ [- n: y. D, K$ z, D% r- }4 N- }- /**
# s' ?2 l* _$ E& N; c7 H - *在选定的EXTI行上生成软件中断。
/ ^2 l9 o& k! \* ~6 e, V6 ]$ I0 \ - */
1 _0 c, ]8 j$ [1 g& S# _ - #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER1 = (__EXTI_LINE__))2 @) h. ]9 r- h, d
- & H3 ~$ k# w3 F! P0 V
- /**
- E. \/ A9 Y- @+ \) v; p - *检查是否设置了指定的EXTI行标志。+ |, J- _9 J% R+ P8 @, }. q! h' F
- *// M2 U5 T4 w6 i" h M2 `4 T
- #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__)
3 v7 `8 r& q& V' z3 } - % }$ j8 x) `: [( i; e7 _
- /**- {+ S% ?8 H6 Y: [7 s' k }
- *清除EXTI行挂起标志。
5 _9 H7 p) X& w$ }! o% i" O - */
R0 c5 P, k' g3 o) o% S - #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)
2 a9 Z' v- k# T& s1 | - + ]# l. q) Q4 b0 |$ q
! g( x% o/ \: V- /*私有宏------------------------------------------------------------*/
7 C D# L/ d) X - $ I; j% B" m% Z+ h% k6 f
- #define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
) b' W- Q4 Z$ r3 H. i; B3 g - ' Z$ m. i4 K i( x
- #define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\" K5 N: z+ a( w% p
- (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U))& Q# a o) Y* r2 N
/ q" w0 c/ g0 T' ]. E- #define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_MODE_INPUT) ||\
0 V4 [, U8 ]4 O8 c Z. u( ?9 |% _, f - ((__MODE__) == GPIO_MODE_OUTPUT_PP) ||\
3 J" g) ^0 E9 | - ((__MODE__) == GPIO_MODE_OUTPUT_OD) ||\
5 s0 M# Z2 X4 I/ g; R& l4 }6 J - ((__MODE__) == GPIO_MODE_AF_PP) ||\, w: h8 e6 d5 P( i
- ((__MODE__) == GPIO_MODE_AF_OD) ||\7 e+ @" d" k- P
- ((__MODE__) == GPIO_MODE_IT_RISING) ||\1 v: `, z7 _4 U' O; ]! s i. @
- ((__MODE__) == GPIO_MODE_IT_FALLING) ||\
2 y; |/ A3 n3 B2 S! ? - ((__MODE__) == GPIO_MODE_IT_RISING_FALLING) ||\6 U' V. R/ ]) o0 l7 @8 E# p" N% E* e
- ((__MODE__) == GPIO_MODE_EVT_RISING) ||\# Q3 q- J! [4 h
- ((__MODE__) == GPIO_MODE_EVT_FALLING) ||\7 m* l% K/ }! m
- ((__MODE__) == GPIO_MODE_EVT_RISING_FALLING) ||\
1 ^. g' w: T2 i: ~2 O0 Y2 x" B! V - ((__MODE__) == GPIO_MODE_ANALOG))2 @9 S$ O+ i! S) A* _
' i9 G6 V5 c( y2 q- #define IS_GPIO_SPEED(__SPEED__) (((__SPEED__) == GPIO_SPEED_FREQ_LOW) ||\
& L) R, E2 s3 I1 o" B$ W: @- F - ((__SPEED__) == GPIO_SPEED_FREQ_MEDIUM) ||\& N) F- c+ \1 J3 B/ q) X
- ((__SPEED__) == GPIO_SPEED_FREQ_HIGH) ||\
' T! i4 `5 c0 i, T - ((__SPEED__) == GPIO_SPEED_FREQ_VERY_HIGH))1 @7 o2 O* e$ w- ~+ r6 ?
2 i( D6 y% G3 S" E: e- #define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_NOPULL) ||\
$ ?5 S! C: {3 C; Q - ((__PULL__) == GPIO_PULLUP) || \
6 M$ p4 d3 U& S# X* L* O6 n" [ - ((__PULL__) == GPIO_PULLDOWN))
' |$ D3 G+ b- r' h, s - \! R- I* _2 R! f$ |! M
- #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)! J, W% Z8 r, w: }7 \
- 5 ~ E" ?0 ?8 m) O/ r
- #define IS_GPIO_PIN_ATTRIBUTES(__ATTRIBUTES__) (((__ATTRIBUTES__) == GPIO_PIN_SEC) ||\: k, N0 s% v7 H7 H8 s5 j" Q( G
- ((__ATTRIBUTES__) == GPIO_PIN_NSEC))5 p9 D% e5 I2 e
- : _$ R% A4 A' i( k! L
- #endif /* __ARM_FEATURE_CMSE */
~% z' j' Q: F - 5 m+ [" c" R4 c9 V1 w4 w
2 z2 u& q. J; f+ @7 k1 A- ' {- }/ {0 X# F
- + O9 C7 w5 n" M. r; |; o+ d
- /*初始化和取消初始化功能*****************************/
4 R y5 \6 _! @2 O# v - void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
4 I) R1 v4 z6 S8 H+ o - void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);: L/ z" y& g, ?! B' i6 C3 i2 ^
! K7 l! i" [$ @
; V: j+ z# d3 V. E B0 R! J- /*IO操作功能*****************************************************/8 k8 u2 L/ s, n: M
- GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
$ u7 t+ x: @# B0 t# |" z% p# }5 T* { - void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
O0 m, {) b9 E3 l* r8 D; L - void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);" H$ Q) _1 f) T2 _3 f' \% r! B
- HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
9 h" V. I- h+ c- j C - void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);/ k0 _/ j0 L7 c& T: v
- void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin);! Y: u, w, E* q/ q r
- void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin);
c+ E* v' Y( f2 ~ g - . _- h, T" m( |. c) c B: G
- & |) l+ `5 H: A y8 v* N. ^: {/ A6 X. V
- , L% `4 j- L4 k6 B, u' a
- /*IO属性管理功能*********************************************/
! m1 ^1 a3 t5 t; n" r& q - void HAL_GPIO_ConfigPinAttributes(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint32_t PinAttributes);: ~$ \3 X s- j6 x1 p' m2 i5 D
- HAL_StatusTypeDef HAL_GPIO_GetConfigPinAttributes(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint32_t *pPinAttributes);! W, b& B& y; r8 J; ~# M, E
- 3 R+ N% E4 E; A% t- Q+ ~& p
复制代码
, g+ L5 i6 q: H) L! B" g; _0 Q
! V, x* T& d6 F8 `; V! L( h9 {- b! W% u+ e) F, P
4 \, H- L* ]1 |' u
0 ^1 ]* _: b5 I" } |