01. GPIO固件库概述
, I; ?1 i+ d. n" p$ A( J; i w) o) h5 C' vstm32f4xx_gpio.h GPIO相关函数和类型的声明
9 _. p7 ?7 W" _. I
* j5 T3 H, y2 D- Q) N5 ^2 Mstm32f4xx_gpio.c GPIO相关函数具体实现。
/ k6 u) [ H3 g4 G1 z9 s+ q/ z8 ~1 s5 F* u
02. GPIO相关类型% [; T9 |& }9 x* J% H0 h) ^9 n1 f7 W" \
GPIO相关的类型几乎都在stm32f4xx_gpio.h文件中。
" f2 b+ P a9 H% z) q j8 v8 d$ l4 j2 B
GPIO的模式# l) l- `7 V+ ^9 r2 D' |; Y
+ t, U7 Q: B/ ]9 j: V5 D- /** % P+ h9 |) I/ ^* v( r: t2 u
- * @brief GPIO Configuration Mode enumeration 7 n; \" d4 l# X3 M- K
- */
! Q( K9 r! {9 i+ @7 |$ Q) J' m# Z - typedef enum
4 A5 y3 m+ l4 V, { [ - { ) z+ g0 H3 D) i- Q9 |4 @' f
- GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */5 ]1 g) Q: U, [6 T8 b/ X
- GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */
$ W0 C: r( s0 c$ U - GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */. F) M1 c s4 x p: L# e/ A
- GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */
5 {! u8 M+ F0 Z- K5 d. j - }GPIOMode_TypeDef;
- r4 H+ X) x" q& ? - #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN) || ((MODE) == GPIO_Mode_OUT) || \! K% n+ s9 I- \5 I" o
- ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))
复制代码 5 q% u/ B" c, a2 _' N- e$ C
GPIO输出类型 m+ _- s" N$ }" w: Z6 K* T
; ?; c0 a2 B7 m5 e. w- n% o- /**
X" L5 i( Y: b4 Z2 H8 d- S - * @brief GPIO Output type enumeration 5 P: z, l+ e6 X6 j2 u2 z
- */ ! m, g" n2 v1 ~+ }! E, G9 ~
- typedef enum1 E& [: Y( m5 D1 R) S
- {
: \3 o) o5 b& c" C7 h' a0 C - GPIO_OType_PP = 0x00,
7 Q; `9 A1 X' p. h$ h2 Z/ i! a - GPIO_OType_OD = 0x01! K- z3 A: e e S" K% Q; O, ?
- }GPIOOType_TypeDef;
! G& e, |' z- {$ m - #define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD))
( C+ Q# Z: r! s' |6 t: P7 n
复制代码
2 o9 d1 L( h; [/ ?7 LGPIO输出速度
1 {$ [( O3 [! ~3 W5 |+ D
- w- r' r$ r8 ]- f9 \9 A& i- /** / E/ b c- w |: g* q; @
- * @brief GPIO Output Maximum frequency enumeration $ ~7 i* s" Y& g( d7 o# i
- */
N" a: D# M5 C2 l' r$ ] - typedef enum* R- I8 G8 m, I7 z' e) Z5 L2 w
- { + w' p% w( D! ]! o$ G2 u2 z/ P
- GPIO_Low_Speed = 0x00, /*!< Low speed */
7 a2 C( p5 @( D& ^1 B* V$ I$ r9 w - GPIO_Medium_Speed = 0x01, /*!< Medium speed */
! _* n/ V$ ?0 X, w% Q - GPIO_Fast_Speed = 0x02, /*!< Fast speed */0 N; i" f8 v' ~% w, W0 n
- GPIO_High_Speed = 0x03 /*!< High speed */
5 `4 n/ m; z- Y' {4 e+ e - }GPIOSpeed_TypeDef;
/ |" S0 F) K& p+ X$ _3 _ - 0 u' x7 b7 U& {( K# M: x5 B1 A
- /* Add legacy definition */
- j3 `, J* O3 N - #define GPIO_Speed_2MHz GPIO_Low_Speed
! r' }. r; \" ^4 P6 e. u - #define GPIO_Speed_25MHz GPIO_Medium_Speed ( `/ j) E& S% R) ]) U. S
- #define GPIO_Speed_50MHz GPIO_Fast_Speed
4 e6 p0 W& x% s' O& F2 e - #define GPIO_Speed_100MHz GPIO_High_Speed
- V a2 Q& d$ L
/ l }1 y( M& t7 J) |- s; v7 |- #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Low_Speed) || ((SPEED) == GPIO_Medium_Speed) || \1 r" M2 ?3 B& I' k# H" B; `9 k. {/ \
- ((SPEED) == GPIO_Fast_Speed)|| ((SPEED) == GPIO_High_Speed))
复制代码
3 A) `4 e4 U/ q) L6 ]4 |GPIO上下拉2 v& V N9 B, J7 e( D
- b" r4 K4 J) D" L/ z6 G1 l& I- /** 0 R+ r+ Y3 S* F
- * @brief GPIO Configuration PullUp PullDown enumeration $ p# a4 N2 G9 Y8 Y% v
- */
A+ r5 z! z7 s P - typedef enum
& U2 X3 ?# c0 c' ^, t - { - ]( o# B$ `. g1 |4 c+ g, s
- GPIO_PuPd_NOPULL = 0x00, O, f' R- z( D1 h
- GPIO_PuPd_UP = 0x01,! t/ X& a% J; i! j( E% @4 ^
- GPIO_PuPd_DOWN = 0x023 M+ J' B9 J* T. F1 E2 p
- }GPIOPuPd_TypeDef;
$ u* T o5 n2 O! } - #define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) || \
8 n2 j# @. w: C - ((PUPD) == GPIO_PuPd_DOWN))
复制代码 7 U$ o7 I0 d# l5 H+ A( W
GPIO置位和复位
' Q# O: b9 k" k% L! X: o& S1 s" W' ~( ?; ]
- /** 2 [) o' \9 x5 e5 q& q
- * @brief GPIO Bit SET and Bit RESET enumeration ' @' Q- @* p: o1 Y! _
- */
8 z, q6 N* P. s) E: T - typedef enum5 N" c! J8 H7 R$ U8 i6 w6 R8 ?' v
- { * L# I) D% j d2 I$ q$ ?8 M
- Bit_RESET = 0,
" F! Z8 k7 \9 X T" S# B - Bit_SET
5 J4 T5 |+ ?/ w' R& n - }BitAction;+ Z+ i& B+ R0 I" n' J. @
- #define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET))
复制代码
3 p+ ~# w. v: p* v8 h8 s( hGPIO初始化结构体类型声明2 Z% N r/ A5 W3 E
- F( b; ?. t# P* _' p2 s9 i
- /** 5 i# ~' K0 J; {/ O( d4 C4 F2 y3 D
- * @brief GPIO Init structure definition 6 |4 u# _. \* X- h
- */
- T' d$ B4 T4 z1 o0 u - typedef struct2 O% \9 c q! M8 a7 V3 N
- {
! u* M* |% [4 S2 c2 ?8 a - uint32_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
_6 O, b5 G, E5 e& o3 H' Y+ Y - This parameter can be any value of @ref GPIO_pins_define */ V+ G9 f2 C) a! ?. t
- " z. m, f! { Y1 _+ |1 g+ R4 g
- GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.' T/ h- T4 k3 t6 w, v2 G$ T. X
- This parameter can be a value of @ref GPIOMode_TypeDef */
2 Y) X9 ^& k* x; p- O3 \ - 2 R8 u3 o' `0 x4 r1 ]6 c
- GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.7 B, X2 i. E7 O% X6 a# \
- This parameter can be a value of @ref GPIOSpeed_TypeDef */% j* t2 Y3 Z) s; S3 G4 X0 |: o x
- 5 K, r8 _3 ]7 z, ^: N
- GPIOOType_TypeDef GPIO_OType; /*!< Specifies the operating output type for the selected pins.5 W* k/ g/ Q8 L2 Y; c
- This parameter can be a value of @ref GPIOOType_TypeDef */
( T+ [) k1 f1 G7 E/ A" X0 w9 J- q
) s5 O3 h R$ _/ n, v7 N0 E- GPIOPuPd_TypeDef GPIO_PuPd; /*!< Specifies the operating Pull-up/Pull down for the selected pins.& z7 ?7 l$ |- E/ f
- This parameter can be a value of @ref GPIOPuPd_TypeDef */
z, E/ k5 R/ m, q r& _ - }GPIO_InitTypeDef;
2 _( Z2 T; S; O# G1 G
复制代码 ) }9 W/ O7 b% M* w7 w) A1 f
03. GPIO相关宏; P7 x; m( p- q! f
判断是否为合法的GPIO外设) w/ K, I/ ]4 ~0 D7 B# Z
. h' n! N4 Y& a J- q5 i
- #define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \& V3 A h$ ~* @1 Z1 j! ?& v: x! @( m) l
- ((PERIPH) == GPIOB) || \5 v5 C( G [" ?' E
- ((PERIPH) == GPIOC) || \4 ~) j8 D9 W( `: Z; J4 u6 B
- ((PERIPH) == GPIOD) || \
6 S# E/ o% u" ]6 ]% W, c; v - ((PERIPH) == GPIOE) || \# h* h- J3 T7 f8 ]. J9 o- ^
- ((PERIPH) == GPIOF) || \0 v" H1 Q) j) g1 N+ Q4 V
- ((PERIPH) == GPIOG) || \4 J* q. ^ K! _& t+ a# R
- ((PERIPH) == GPIOH) || \/ q" v+ p2 c6 ~1 G
- ((PERIPH) == GPIOI) || \$ a+ e. P2 Q, l9 D w$ I' C8 o/ [7 ]
- ((PERIPH) == GPIOJ) || \! U& _7 H/ h2 i L( D* G
- ((PERIPH) == GPIOK))
复制代码
+ [- P, s+ ]4 h( L* qGPIO合法的引脚
; r7 F9 X, q8 ^* F: x
9 Y" a. i8 l& t B- /** @defgroup GPIO_pins_define
* B3 Y4 `! U5 r9 S! a6 ]$ ]' p+ F - * @{
4 Z9 @& Q. Y6 }( l$ y - */ / k& j* G9 u, i4 e7 [
- #define GPIO_Pin_0 ((uint16_t)0x0001) /* Pin 0 selected */
; T! P# u- ^% |! q - #define GPIO_Pin_1 ((uint16_t)0x0002) /* Pin 1 selected */9 D2 N- D5 g. p$ h6 \9 N
- #define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */) q9 g$ S; L4 o+ P* P
- #define GPIO_Pin_3 ((uint16_t)0x0008) /* Pin 3 selected */3 O8 B9 l8 `8 B" v9 V% N! q
- #define GPIO_Pin_4 ((uint16_t)0x0010) /* Pin 4 selected */
& |/ F4 O. P& Y/ B - #define GPIO_Pin_5 ((uint16_t)0x0020) /* Pin 5 selected */
" l/ a. O. `+ d! q3 \ - #define GPIO_Pin_6 ((uint16_t)0x0040) /* Pin 6 selected *// H/ Q6 s) Q! y8 j
- #define GPIO_Pin_7 ((uint16_t)0x0080) /* Pin 7 selected */
2 L7 O5 v0 x- i - #define GPIO_Pin_8 ((uint16_t)0x0100) /* Pin 8 selected */
: @$ T2 M k% y# W' T - #define GPIO_Pin_9 ((uint16_t)0x0200) /* Pin 9 selected */
3 [& Q8 b: p) g- }/ S2 N& c - #define GPIO_Pin_10 ((uint16_t)0x0400) /* Pin 10 selected */+ W2 S0 m) _6 Q/ I& S
- #define GPIO_Pin_11 ((uint16_t)0x0800) /* Pin 11 selected */
8 y( h3 v6 T% ] R - #define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */
3 y+ O! ~9 d' T - #define GPIO_Pin_13 ((uint16_t)0x2000) /* Pin 13 selected */
5 ]7 e- }% I# K0 |8 F X - #define GPIO_Pin_14 ((uint16_t)0x4000) /* Pin 14 selected */
# `& j4 w. w* N, B5 w - #define GPIO_Pin_15 ((uint16_t)0x8000) /* Pin 15 selected */1 a1 K/ W3 ^; } E
- #define GPIO_Pin_All ((uint16_t)0xFFFF) /* All pins selected */2 u' y% ]$ l. n/ d* x9 `
- " @8 P; V# z! w% l+ P$ a2 N& l
- #define GPIO_PIN_MASK ((uint32_t)0x0000FFFF) /* PIN mask for assert test */" p4 d- ?6 Y# O& t- u/ d: @
- #define IS_GPIO_PIN(PIN) (((PIN) & GPIO_PIN_MASK ) != (uint32_t)0x00)+ H" Z) l S1 g; m- ^
- #define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \, q; R" d: S/ ~5 V2 b
- ((PIN) == GPIO_Pin_1) || \, H4 q: s! ?# Y% }0 A" d
- ((PIN) == GPIO_Pin_2) || \
/ A, E. O. L: s: ]' ~* E( Q; V0 w+ x - ((PIN) == GPIO_Pin_3) || \$ V+ j2 t/ ?0 j" t" c, s
- ((PIN) == GPIO_Pin_4) || \
" a3 e# p! K7 w; v O - ((PIN) == GPIO_Pin_5) || \$ v1 Y$ e n% b# k
- ((PIN) == GPIO_Pin_6) || \: l( t) v# I7 I$ O3 P. t3 L) T
- ((PIN) == GPIO_Pin_7) || \: U4 K$ f2 S& u, y f, T* q5 ~, F3 h
- ((PIN) == GPIO_Pin_8) || \
; w( W7 q* J9 B, x- D5 D1 o - ((PIN) == GPIO_Pin_9) || \9 Q; u* m, Q( S, H& n6 Q: [
- ((PIN) == GPIO_Pin_10) || \
: l/ h) d' ^% s3 W - ((PIN) == GPIO_Pin_11) || \$ N' Q% q; {9 O* J4 A
- ((PIN) == GPIO_Pin_12) || \* h& X* w/ h- F! F! D8 e
- ((PIN) == GPIO_Pin_13) || \! D# ?1 ~+ s A' Y! }/ U
- ((PIN) == GPIO_Pin_14) || \
& z' U0 \2 C0 u& N8 L: D - ((PIN) == GPIO_Pin_15))
复制代码 " n& Y% a$ A- @
GPIO合法的引脚源. l$ X+ u/ \; G9 m, [
) ]& i/ f! A! J. }$ }# d" `! f( d
- $ p2 b0 ?( T, ]8 g l, G
- /** @defgroup GPIO_Pin_sources
1 ^/ w6 J+ E6 `1 B" F! g - * @{) Z H; l. {) ^6 W" P! c, N* r% ~" J
- */
4 l) h' {/ [* h; b0 ^: w - #define GPIO_PinSource0 ((uint8_t)0x00)
, D, D- q% k; I3 d3 D. l& e6 z - #define GPIO_PinSource1 ((uint8_t)0x01)
# f* X |, @+ N+ P% Y% l8 E% O - #define GPIO_PinSource2 ((uint8_t)0x02)
! B! I9 C' f" N2 p - #define GPIO_PinSource3 ((uint8_t)0x03)8 O( m8 G1 W2 l% ~8 r3 P
- #define GPIO_PinSource4 ((uint8_t)0x04)
+ V% ~; U2 c N, [% S3 e& F - #define GPIO_PinSource5 ((uint8_t)0x05)
) y0 M+ h6 u6 l) A d' ~- v* v - #define GPIO_PinSource6 ((uint8_t)0x06)
# s9 }. B3 f& T/ L) I( s - #define GPIO_PinSource7 ((uint8_t)0x07)! P; E$ y3 S- ^7 S0 o. _
- #define GPIO_PinSource8 ((uint8_t)0x08)
. K5 z) C* D1 s9 v" a5 d - #define GPIO_PinSource9 ((uint8_t)0x09)4 T- y [# ?; z( C; X, z. N1 I
- #define GPIO_PinSource10 ((uint8_t)0x0A)
# n: \/ V/ P5 b$ s& ? - #define GPIO_PinSource11 ((uint8_t)0x0B)
3 z ]. Z, k G% l" d7 S - #define GPIO_PinSource12 ((uint8_t)0x0C)
5 r* ~: T+ K6 E7 @! \ - #define GPIO_PinSource13 ((uint8_t)0x0D)
- e! d- l7 \$ \: R - #define GPIO_PinSource14 ((uint8_t)0x0E)
2 T1 M7 H3 W9 d+ q; ^% `- o) ~ - #define GPIO_PinSource15 ((uint8_t)0x0F)
6 J" n' I, y1 x
1 C4 J/ p6 ~4 c/ q; R# A- #define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \$ ~8 G: I8 q! d6 N0 B+ q* |
- ((PINSOURCE) == GPIO_PinSource1) || \: m' |3 Y$ y" l6 S7 e% p/ l
- ((PINSOURCE) == GPIO_PinSource2) || \5 p5 Y- f3 u& j. V, M
- ((PINSOURCE) == GPIO_PinSource3) || \. Y! k& ?1 F5 f" K8 |2 e
- ((PINSOURCE) == GPIO_PinSource4) || \
8 s' n9 a4 ^2 `" r2 V - ((PINSOURCE) == GPIO_PinSource5) || \; u. ^3 F( b4 ^( }& M
- ((PINSOURCE) == GPIO_PinSource6) || \( E' N* q w$ h: V0 k4 s
- ((PINSOURCE) == GPIO_PinSource7) || \8 Q9 O3 e7 v: A" m% j8 y
- ((PINSOURCE) == GPIO_PinSource8) || \
% X' V+ Z0 V, C. t+ K$ u - ((PINSOURCE) == GPIO_PinSource9) || \
0 y1 H, f# ]- k; B9 o8 }/ \ - ((PINSOURCE) == GPIO_PinSource10) || \ w, T1 L0 x* @
- ((PINSOURCE) == GPIO_PinSource11) || \
, O$ }) s; d7 u+ a5 h* ~ w - ((PINSOURCE) == GPIO_PinSource12) || \& R1 t% Y5 D& ?" n8 [
- ((PINSOURCE) == GPIO_PinSource13) || \
' L8 V$ B, e( M4 H% m/ P - ((PINSOURCE) == GPIO_PinSource14) || \4 j7 t; g5 g- |! ?' W" n
- ((PINSOURCE) == GPIO_PinSource15))
复制代码
( L/ o; ^, Q9 ~! J04. GPIO相关函数
3 e9 L/ j% s# t2 c" U- /* Function used to set the GPIO configuration to the default reset state ****/) M$ @. I2 O. `" B; P$ L. D+ U A
- //配置GPIO为默认状态
' _$ Y) `0 I# n) o: r - void GPIO_DeInit(GPIO_TypeDef* GPIOx);
) h1 Z* V! [- B$ k/ D
; ~* v7 y: k5 h- /* Initialization and Configuration functions *********************************/
; q4 M5 X* S1 q1 k4 v7 }( A K - //GPIO初始化
6 {# Y) c' G7 k$ d6 _ - void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
$ o5 i' y A% v* O' d: m, [ B- W( \ - //GPIO结构体初始化& r! z& b2 B, i( {: S2 g+ O
- void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
3 }& K+ V! Y6 g3 n& ~6 v4 w - //GPIO锁配置
) O" H1 F" X. O8 {' g/ ] - void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);9 p/ {" R8 t# s2 @2 v+ s
7 r1 x1 ], H2 l% q- /* GPIO Read and Write functions **********************************************/
" ?' z8 Y' V5 k7 f4 d2 X - //GPIO读写函数
# W4 u$ p1 W9 H) H - uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
. l7 X4 [* ?# u3 b* k5 K - uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
2 u' o8 k# P/ d0 p0 E4 C - uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
1 U2 ^3 t6 p9 C& f/ V. m1 V - uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
; l9 i3 u: ?0 z4 X - void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);8 X0 i- t: u* o8 w: [7 B
- void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
; f2 V1 E7 @7 \ - void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
3 B0 ~) q1 S+ M* K - void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);2 x& E M) Y$ E7 i9 X# W1 X6 T0 S
- void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);$ I8 j2 B, N; d
- ) s! k% R. }1 a7 n1 x. h/ {; {
- /* GPIO Alternate functions configuration function ****************************/
8 U+ X* ]# _. e( X- ?6 T$ z - void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
复制代码
) E& w" a. I* K$ E; m05. GPIO其它相关
0 O) K! y4 d& X: kstm32f4xx.h文件中
8 `, D% S+ G: A
0 K/ U$ t9 |3 ^通用GPIO结构体封装
1 U) b# c4 V; V; {8 X. `% v
+ _0 |+ S; ?; Z* N" H- typedef struct
7 x' N0 B7 _ c; c- F8 Y - {
2 X2 G; Z8 S7 w3 `2 t" c - __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */! p/ k5 x- f8 T/ X" t
- __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */4 y4 ]* ?6 [- p' ?' k
- __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */2 o7 J4 v+ q6 X& p( ?+ \
- __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */9 i" ~$ D6 C6 B
- __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */
+ d, G& _( C. N4 v9 I% ~ - __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */
( |. C$ w7 f- {2 |" V0 l - __IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */ M/ r# R" p5 F; n
- __IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */6 y7 D1 |( C: O1 I4 n* M- [5 [2 ~
- __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */% R: o2 f& o N" r, a; b
- __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */" v: x$ H% l8 R2 H: L
- } GPIO_TypeDef;
复制代码 ) _" E1 x$ h7 R. o' D$ u4 L5 R: O
GPIO基地址
/ `- k7 X0 J9 ]5 C) o0 n- f6 P& ?3 O( F
- /*!< AHB1 peripherals */% v9 ? d; }/ m" c" s
- #define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000)
$ N! k6 u' i5 E6 J3 _1 } - #define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400)9 y9 a) n- N# f% Y$ ^
- #define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800)! a' x' h: U. ]! Q8 t( I
- #define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00)
7 D: B$ a0 |1 o - #define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000)2 C' `9 c( `5 D9 R3 m% ~
- #define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400)
( a" U1 v2 |( h; j - #define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800)( G+ [+ @$ w' r$ x1 R9 D
- #define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00)
( F- k N. o. Y" R" c( ]% Y6 V+ V* `5 R - #define GPIOI_BASE (AHB1PERIPH_BASE + 0x2000)
5 v& y- n' p! P* p$ u5 U. n - #define GPIOJ_BASE (AHB1PERIPH_BASE + 0x2400)$ w' G# [' I0 W* C) Z9 F
- #define GPIOK_BASE (AHB1PERIPH_BASE + 0x2800)0 \; T% s1 `" [+ L5 q, b
复制代码 : g1 `5 c+ U' r# Z: w) P+ _
GPIO起始地址: B1 d. B. D2 \( e( ~% {
( X. }* G8 R7 t+ \6 ?# i" c- #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
! {# b# E$ N% H! c z0 f - #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)6 l4 p8 K8 g; j z/ t* Y5 Y" O/ C
- #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
$ `% g6 a, S; j( E - #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)" ^) m0 Z4 H9 w
- #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
7 c! y$ {$ h' S) H7 |9 S3 ? - #define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)
- W: m' b+ x2 e1 T - #define GPIOG ((GPIO_TypeDef *) GPIOG_BASE)
8 O9 H; H) T( O. e3 c$ ~ - #define GPIOH ((GPIO_TypeDef *) GPIOH_BASE)
* C4 V, h9 T. ]: _ - #define GPIOI ((GPIO_TypeDef *) GPIOI_BASE)
! j" E0 O" E. v$ T& M+ s3 C5 ?7 I - #define GPIOJ ((GPIO_TypeDef *) GPIOJ_BASE)
$ v* k- G S8 F. p - #define GPIOK ((GPIO_TypeDef *) GPIOK_BASE)
复制代码 5 D3 k7 P. M% R* z; J' ~7 D7 Z9 N0 Q
GPIO寄存器相关位
0 g# P0 d3 e! `# W" Q r
) Z6 Y U: [6 @- d5 D* t- /******************************************************************************/$ H8 z% g* ^. X6 W; I" a, k6 k
- /* */, _8 t: b0 q* K* h" K5 V
- /* General Purpose I/O */4 S3 d+ u, p/ {8 Z3 `* b2 `# z+ Q
- /* */9 y' Q7 }8 d9 ^/ B# K' G% A2 l9 b" Y4 L
- /******************************************************************************/
7 ?. E% ^4 J5 X! Z/ | - /****************** Bits definition for GPIO_MODER register *****************/
& Z! i$ m& ]& b @/ d5 V) R - #define GPIO_MODER_MODER0 ((uint32_t)0x00000003)% ~ Y/ i# K+ H/ ^9 Y+ p5 `: A
- #define GPIO_MODER_MODER0_0 ((uint32_t)0x00000001)0 j$ f! }1 e# R! ]8 e/ w4 @
- #define GPIO_MODER_MODER0_1 ((uint32_t)0x00000002)
. @8 D5 y8 v% d1 w& ^
# A% I% z( l) \. T/ l* M7 U3 h0 v3 e- #define GPIO_MODER_MODER1 ((uint32_t)0x0000000C)7 O5 r9 W T$ k' O3 R2 I
- #define GPIO_MODER_MODER1_0 ((uint32_t)0x00000004)' h* ?7 r% t M0 b
- #define GPIO_MODER_MODER1_1 ((uint32_t)0x00000008)
1 f1 l4 K/ G7 R" u2 \( D+ _
% O& E! y2 h) S9 T' \' M( e- #define GPIO_MODER_MODER2 ((uint32_t)0x00000030)
7 R1 ~3 P/ ?4 D& E [0 L% B - #define GPIO_MODER_MODER2_0 ((uint32_t)0x00000010)
, Y! F0 L7 O* Q- t) ] - #define GPIO_MODER_MODER2_1 ((uint32_t)0x00000020)0 `3 O: j j3 G! E# [
- ! J, c- ]3 Q# a1 O
- #define GPIO_MODER_MODER3 ((uint32_t)0x000000C0)6 ~5 f K* ^7 Q7 v+ ?5 o% T, E8 Z# y
- #define GPIO_MODER_MODER3_0 ((uint32_t)0x00000040)
$ }) i0 O% a- |. @5 ? - #define GPIO_MODER_MODER3_1 ((uint32_t)0x00000080)
: k& G0 V" }" ~ - " U% ]7 Q/ v$ [# h1 J' h9 |% c0 g# z `
- #define GPIO_MODER_MODER4 ((uint32_t)0x00000300)
0 n# e8 z& A: ^! e) R2 b9 |! s+ X - #define GPIO_MODER_MODER4_0 ((uint32_t)0x00000100)5 ~" I5 I& {8 l" \9 c5 z
- #define GPIO_MODER_MODER4_1 ((uint32_t)0x00000200)0 s# g$ q) G8 F
- 2 b( J0 q. F/ ?0 \5 {$ I: c
- #define GPIO_MODER_MODER5 ((uint32_t)0x00000C00)) Y+ Q/ i/ W# U* m0 ~3 J. ^
- #define GPIO_MODER_MODER5_0 ((uint32_t)0x00000400), R$ D" B; S( ^$ M
- #define GPIO_MODER_MODER5_1 ((uint32_t)0x00000800)* `8 h& f3 b1 ~. r- w
% R% ?# v3 |; S+ A* d* v6 D% @- #define GPIO_MODER_MODER6 ((uint32_t)0x00003000)
7 Q5 j `& J' d: w" T - #define GPIO_MODER_MODER6_0 ((uint32_t)0x00001000)0 h1 @% z% r1 j3 ]0 z' D% h8 r/ x
- #define GPIO_MODER_MODER6_1 ((uint32_t)0x00002000)
" Q9 R/ }4 D3 _/ x( t - " I9 a. }+ T% Y0 x7 j
- #define GPIO_MODER_MODER7 ((uint32_t)0x0000C000)
% v; @6 Z ^# U' k9 C6 O - #define GPIO_MODER_MODER7_0 ((uint32_t)0x00004000)
. Y6 A. X$ P+ v2 o. T3 k - #define GPIO_MODER_MODER7_1 ((uint32_t)0x00008000)$ q3 P6 W# q2 B# W1 Q; W
6 B; t1 [, H, c5 s8 {( i- #define GPIO_MODER_MODER8 ((uint32_t)0x00030000) K ~5 {) e+ ?- ^
- #define GPIO_MODER_MODER8_0 ((uint32_t)0x00010000)
- @& `1 ?' y* I/ C0 r - #define GPIO_MODER_MODER8_1 ((uint32_t)0x00020000)
, ~- D+ w1 S0 B. M% }+ E3 q( K# i - 2 ~( Q$ S$ o9 y8 d; N* X# a
- #define GPIO_MODER_MODER9 ((uint32_t)0x000C0000)
: ?0 U" ?$ e3 f" ^' S - #define GPIO_MODER_MODER9_0 ((uint32_t)0x00040000)
! `. a) y8 G$ j* t# r5 @, { - #define GPIO_MODER_MODER9_1 ((uint32_t)0x00080000)! y C0 h* h4 n! C- \
/ i4 W" z) [& r6 A- #define GPIO_MODER_MODER10 ((uint32_t)0x00300000)/ B7 O# G% Y7 E5 Z; C1 V& ]
- #define GPIO_MODER_MODER10_0 ((uint32_t)0x00100000)
, x! x/ N( }, D: v1 `9 v! @! X# \ - #define GPIO_MODER_MODER10_1 ((uint32_t)0x00200000), ?( i+ {; F& S7 J0 N# V
- 4 l2 y4 z7 Z4 b( d6 o5 C/ Z# B( G! R
- #define GPIO_MODER_MODER11 ((uint32_t)0x00C00000)
5 L) t+ O. a8 t/ g' o$ Z - #define GPIO_MODER_MODER11_0 ((uint32_t)0x00400000)
# p7 D, W! I; b( r: Q& V - #define GPIO_MODER_MODER11_1 ((uint32_t)0x00800000)9 M+ i- [9 g" [4 A
- ' T- N$ A) b1 b' T$ S- X% X4 P
- #define GPIO_MODER_MODER12 ((uint32_t)0x03000000)
5 |5 u$ I% E" d9 ~# H% J w- V - #define GPIO_MODER_MODER12_0 ((uint32_t)0x01000000). e3 E+ q: F+ w$ P
- #define GPIO_MODER_MODER12_1 ((uint32_t)0x02000000): _: d* H* i" b0 D- B
* O; y; S+ o( Z9 D- z$ U- #define GPIO_MODER_MODER13 ((uint32_t)0x0C000000)
. e! t0 w, q, m - #define GPIO_MODER_MODER13_0 ((uint32_t)0x04000000)
j# r- H5 L" w6 @ - #define GPIO_MODER_MODER13_1 ((uint32_t)0x08000000)
$ f: M( r" L2 p, O# ^, R4 h! N) j - : T% n0 p# f9 W0 O" a' y& `. t
- #define GPIO_MODER_MODER14 ((uint32_t)0x30000000)8 q: c( n/ O# F! z7 c
- #define GPIO_MODER_MODER14_0 ((uint32_t)0x10000000)
8 V A. f% a) l! o8 x9 L8 [ - #define GPIO_MODER_MODER14_1 ((uint32_t)0x20000000)9 A# h' y3 D& g9 z" [$ q" N% {
) C8 ?4 G5 o' E- #define GPIO_MODER_MODER15 ((uint32_t)0xC0000000)4 i( Y8 x/ P. ], r4 H1 M- N
- #define GPIO_MODER_MODER15_0 ((uint32_t)0x40000000)9 q9 Y* |0 i( R# b
- #define GPIO_MODER_MODER15_1 ((uint32_t)0x80000000) R& A( I4 P O$ G' r; @1 j
- - F1 f- D5 o" m' \0 C& G
- /****************** Bits definition for GPIO_OTYPER register ****************/
9 F1 s7 T) k( A* V6 l - #define GPIO_OTYPER_OT_0 ((uint32_t)0x00000001)
/ j% g; |2 [( }9 _. }, [3 n% y2 W - #define GPIO_OTYPER_OT_1 ((uint32_t)0x00000002)/ I8 e( B# v s) F) U7 w
- #define GPIO_OTYPER_OT_2 ((uint32_t)0x00000004)9 |: u1 d6 K5 u3 A$ C9 z7 W! s9 Y9 Y
- #define GPIO_OTYPER_OT_3 ((uint32_t)0x00000008)5 {8 h/ P8 c! S5 U
- #define GPIO_OTYPER_OT_4 ((uint32_t)0x00000010)$ B4 Y/ }: O% r# N! q1 f% L) C& {
- #define GPIO_OTYPER_OT_5 ((uint32_t)0x00000020)7 z. [+ i. s1 H6 {: ?! n0 Z5 }
- #define GPIO_OTYPER_OT_6 ((uint32_t)0x00000040)
' y5 G* Z$ v4 a1 v - #define GPIO_OTYPER_OT_7 ((uint32_t)0x00000080)8 v( X, y! w U0 H8 h' u. p3 r3 o
- #define GPIO_OTYPER_OT_8 ((uint32_t)0x00000100)
. A( A% D7 I$ t8 P8 D& w - #define GPIO_OTYPER_OT_9 ((uint32_t)0x00000200)" W6 g" r6 i; i& [% ]! |
- #define GPIO_OTYPER_OT_10 ((uint32_t)0x00000400)8 K" h+ z+ ^1 c1 K! }: o
- #define GPIO_OTYPER_OT_11 ((uint32_t)0x00000800)) z9 S0 @8 s7 _# \) o \3 t
- #define GPIO_OTYPER_OT_12 ((uint32_t)0x00001000)1 _2 n- [: E) I- k
- #define GPIO_OTYPER_OT_13 ((uint32_t)0x00002000)
' q2 Y D2 D: B4 E% R - #define GPIO_OTYPER_OT_14 ((uint32_t)0x00004000)% F( t u! J* [6 `
- #define GPIO_OTYPER_OT_15 ((uint32_t)0x00008000) U2 `4 @5 I! D: a
( T# b8 I7 X8 G( B- /****************** Bits definition for GPIO_OSPEEDR register ***************/
" j& r4 O9 V* C - #define GPIO_OSPEEDER_OSPEEDR0 ((uint32_t)0x00000003)
f+ ~9 [1 Q' \$ j" R8 D - #define GPIO_OSPEEDER_OSPEEDR0_0 ((uint32_t)0x00000001)
5 r6 t/ R/ ^& q O8 M% D& { - #define GPIO_OSPEEDER_OSPEEDR0_1 ((uint32_t)0x00000002)
4 G- c3 \" b$ m: F% p5 T
$ @) u5 O% H4 I" n N- #define GPIO_OSPEEDER_OSPEEDR1 ((uint32_t)0x0000000C)3 ?6 x; m. \1 z- e y
- #define GPIO_OSPEEDER_OSPEEDR1_0 ((uint32_t)0x00000004)9 _ q( f6 V' m6 U/ ^# p
- #define GPIO_OSPEEDER_OSPEEDR1_1 ((uint32_t)0x00000008)
& D* U T9 Q* [6 h7 f - + J+ F- A8 ]# r2 B; |
- #define GPIO_OSPEEDER_OSPEEDR2 ((uint32_t)0x00000030)8 k6 S: ?; Q4 T/ I- k8 ?- S
- #define GPIO_OSPEEDER_OSPEEDR2_0 ((uint32_t)0x00000010)9 p1 d! l6 {, | A
- #define GPIO_OSPEEDER_OSPEEDR2_1 ((uint32_t)0x00000020)
0 u; I/ A. R! _1 M - # [! n+ M; |9 B& z
- #define GPIO_OSPEEDER_OSPEEDR3 ((uint32_t)0x000000C0)
7 c8 {8 Y) X$ R) t - #define GPIO_OSPEEDER_OSPEEDR3_0 ((uint32_t)0x00000040) z( |1 G z' ~( p; k# Y
- #define GPIO_OSPEEDER_OSPEEDR3_1 ((uint32_t)0x00000080)
2 \: ?5 X* x, S
& J3 _8 S' ^7 l$ b t- #define GPIO_OSPEEDER_OSPEEDR4 ((uint32_t)0x00000300)% ]; S' j2 y1 w( ]! E/ C
- #define GPIO_OSPEEDER_OSPEEDR4_0 ((uint32_t)0x00000100)' ]5 f: E. P- Y- P$ [
- #define GPIO_OSPEEDER_OSPEEDR4_1 ((uint32_t)0x00000200)8 p' F& c( _: r7 m8 S8 Y
: a6 ]+ r$ ^) g- P- #define GPIO_OSPEEDER_OSPEEDR5 ((uint32_t)0x00000C00)
: V$ u5 y( r; D# r+ L; m9 w7 p/ t1 s - #define GPIO_OSPEEDER_OSPEEDR5_0 ((uint32_t)0x00000400)
0 E/ q, f4 ~2 J) y9 ?5 l. ] - #define GPIO_OSPEEDER_OSPEEDR5_1 ((uint32_t)0x00000800)
* a v& C5 ^+ i! z - T9 p1 u# I+ Q v3 f/ O- d, j
- #define GPIO_OSPEEDER_OSPEEDR6 ((uint32_t)0x00003000)
s# N$ Z! ^5 S# p, P! e, H - #define GPIO_OSPEEDER_OSPEEDR6_0 ((uint32_t)0x00001000)
" n6 C. Z. U$ d# O" \+ `8 x* T - #define GPIO_OSPEEDER_OSPEEDR6_1 ((uint32_t)0x00002000)
4 ~# M0 x% ~; O, { - ' j2 z( F: n7 _7 d2 w
- #define GPIO_OSPEEDER_OSPEEDR7 ((uint32_t)0x0000C000)/ Q5 m* ? r9 z) \9 Q! R, }+ z4 D
- #define GPIO_OSPEEDER_OSPEEDR7_0 ((uint32_t)0x00004000)
/ z5 ~) G% H- W1 e7 I - #define GPIO_OSPEEDER_OSPEEDR7_1 ((uint32_t)0x00008000)
! u: J4 b6 a- m( U$ ` - 1 }' q" A N s! [8 \; }
- #define GPIO_OSPEEDER_OSPEEDR8 ((uint32_t)0x00030000)# t" Y* x* n5 L4 _8 P
- #define GPIO_OSPEEDER_OSPEEDR8_0 ((uint32_t)0x00010000)/ J0 j% [7 U6 }: b1 T L, W
- #define GPIO_OSPEEDER_OSPEEDR8_1 ((uint32_t)0x00020000)
6 c1 Y, l' p% i$ L+ H# s8 \ - - u% m2 \$ Y0 Z6 Q' E) F
- #define GPIO_OSPEEDER_OSPEEDR9 ((uint32_t)0x000C0000): H) Q$ A& Q1 \: y q1 L. G2 \
- #define GPIO_OSPEEDER_OSPEEDR9_0 ((uint32_t)0x00040000)
4 ~& L: v1 e% T6 Q( Q% Z - #define GPIO_OSPEEDER_OSPEEDR9_1 ((uint32_t)0x00080000)
; U$ D; m* U$ S* Y1 g - ! V0 Z5 s/ c3 i% |
- #define GPIO_OSPEEDER_OSPEEDR10 ((uint32_t)0x00300000)8 C5 J6 E* f1 A
- #define GPIO_OSPEEDER_OSPEEDR10_0 ((uint32_t)0x00100000)
" Q$ ]8 S" U# V# v. A7 T - #define GPIO_OSPEEDER_OSPEEDR10_1 ((uint32_t)0x00200000)1 M7 `* a, O/ r, V' U+ j4 a* N
- $ i+ c1 r8 L) E0 r7 \
- #define GPIO_OSPEEDER_OSPEEDR11 ((uint32_t)0x00C00000)
; g2 f1 z5 L% V# L0 i; G8 E% A - #define GPIO_OSPEEDER_OSPEEDR11_0 ((uint32_t)0x00400000)
' {6 y/ O+ |% Y: ^* o - #define GPIO_OSPEEDER_OSPEEDR11_1 ((uint32_t)0x00800000)
5 a* k2 s; k9 P- o
' H) F* w4 X$ c8 E& w- \) z- #define GPIO_OSPEEDER_OSPEEDR12 ((uint32_t)0x03000000)
, B9 N, B8 W T# \# A' E - #define GPIO_OSPEEDER_OSPEEDR12_0 ((uint32_t)0x01000000)2 }+ `3 }* B5 K( ?. c5 O( `
- #define GPIO_OSPEEDER_OSPEEDR12_1 ((uint32_t)0x02000000)3 m3 l; `, w0 B8 S- \3 `+ \
- 3 J( z; n6 D, T4 j. g9 w' j
- #define GPIO_OSPEEDER_OSPEEDR13 ((uint32_t)0x0C000000)
- M7 V% m4 i% e1 [ - #define GPIO_OSPEEDER_OSPEEDR13_0 ((uint32_t)0x04000000)
$ y5 w. B5 A2 [; t& L1 D& e* Z - #define GPIO_OSPEEDER_OSPEEDR13_1 ((uint32_t)0x08000000)
, B. i2 s" p& z B2 r8 c( l' N
3 O! B0 x( Z# [( d" |- #define GPIO_OSPEEDER_OSPEEDR14 ((uint32_t)0x30000000)
( ?& L+ f0 S3 X3 q. G5 E - #define GPIO_OSPEEDER_OSPEEDR14_0 ((uint32_t)0x10000000)
% C: E% D# F6 Y7 o& X - #define GPIO_OSPEEDER_OSPEEDR14_1 ((uint32_t)0x20000000)/ h! {& Z# J% m- C; J+ S. W' \
- 6 |! b- ~; c% C- k p. J
- #define GPIO_OSPEEDER_OSPEEDR15 ((uint32_t)0xC0000000)
8 h' v T' b( q. a - #define GPIO_OSPEEDER_OSPEEDR15_0 ((uint32_t)0x40000000)5 m. b! R: L. O2 l7 k2 ]& u
- #define GPIO_OSPEEDER_OSPEEDR15_1 ((uint32_t)0x80000000) R. z& l5 Q9 X4 \1 c, M8 o
- 3 h o" C+ ?7 e. R3 e
- /****************** Bits definition for GPIO_PUPDR register *****************/2 u8 h) l. ?0 |. ^
- #define GPIO_PUPDR_PUPDR0 ((uint32_t)0x00000003)5 `9 q$ u" I0 f. `+ ]; k0 P
- #define GPIO_PUPDR_PUPDR0_0 ((uint32_t)0x00000001)4 @( V: F7 K; C5 g
- #define GPIO_PUPDR_PUPDR0_1 ((uint32_t)0x00000002), n! a# Y! y+ ?- p( M
7 W2 i# E8 Z: j5 E, w0 J- #define GPIO_PUPDR_PUPDR1 ((uint32_t)0x0000000C)0 h2 {9 \. z! L/ Y2 S
- #define GPIO_PUPDR_PUPDR1_0 ((uint32_t)0x00000004)
) }* U8 G( O/ I5 `* p0 ~ - #define GPIO_PUPDR_PUPDR1_1 ((uint32_t)0x00000008)
7 _1 N3 f; l2 f7 ?/ A. M( b1 @4 R - ( O% f/ Z: o: {0 L
- #define GPIO_PUPDR_PUPDR2 ((uint32_t)0x00000030)
! h- r- W/ f$ V7 y8 O% _/ c$ k - #define GPIO_PUPDR_PUPDR2_0 ((uint32_t)0x00000010)* I7 r& j; [0 h, E9 a
- #define GPIO_PUPDR_PUPDR2_1 ((uint32_t)0x00000020)7 N, U. ~' ~2 T2 Q7 P
- * f1 _$ [1 W- {8 ]% j! C# o) G2 ]6 r
- #define GPIO_PUPDR_PUPDR3 ((uint32_t)0x000000C0)
! s7 V2 E, I, t' J" y; u - #define GPIO_PUPDR_PUPDR3_0 ((uint32_t)0x00000040)0 A3 E/ C! ?- p" K/ q& G8 r
- #define GPIO_PUPDR_PUPDR3_1 ((uint32_t)0x00000080)
v; t( V, F7 t* p/ R$ M8 @ - " [) G; e4 f. I; l! T5 c) O
- #define GPIO_PUPDR_PUPDR4 ((uint32_t)0x00000300)0 N# i( B) ]2 W, s& w! n0 S# V
- #define GPIO_PUPDR_PUPDR4_0 ((uint32_t)0x00000100)$ l" E# [5 u" n! m
- #define GPIO_PUPDR_PUPDR4_1 ((uint32_t)0x00000200)
}$ E# E2 u+ y7 c7 x1 @) ?
+ X& K( q; z& }: s4 K- #define GPIO_PUPDR_PUPDR5 ((uint32_t)0x00000C00)- w0 b+ ^' k& Q# b: V
- #define GPIO_PUPDR_PUPDR5_0 ((uint32_t)0x00000400)
/ Q' t+ W( {" c7 X4 l/ a - #define GPIO_PUPDR_PUPDR5_1 ((uint32_t)0x00000800)
# I( ` I: Z% W# `! z# R' ^ - 7 ~; z5 D$ R$ m1 B$ C) ] k
- #define GPIO_PUPDR_PUPDR6 ((uint32_t)0x00003000)( o! n- G; T: \
- #define GPIO_PUPDR_PUPDR6_0 ((uint32_t)0x00001000)
- w/ e9 v3 R3 z! y - #define GPIO_PUPDR_PUPDR6_1 ((uint32_t)0x00002000)
* F, y0 I: }. J) u3 u+ h8 l+ W( a
1 n, r" X% f! J2 I7 K$ \- #define GPIO_PUPDR_PUPDR7 ((uint32_t)0x0000C000)" K! X8 Y$ i! j. A8 I3 O
- #define GPIO_PUPDR_PUPDR7_0 ((uint32_t)0x00004000)
! \$ v' t. q2 x* I+ r& M$ T5 ~* C - #define GPIO_PUPDR_PUPDR7_1 ((uint32_t)0x00008000) q/ V& m" @2 `8 \+ J; u
- * @! s+ Q) X" h$ d# B) t% ?# Z2 Z# K
- #define GPIO_PUPDR_PUPDR8 ((uint32_t)0x00030000)2 b, R' X7 y. N' l" n
- #define GPIO_PUPDR_PUPDR8_0 ((uint32_t)0x00010000)
, e! K4 B- q2 V0 g - #define GPIO_PUPDR_PUPDR8_1 ((uint32_t)0x00020000)
; o* L) R* q0 R1 F2 ?8 c' a" f - 4 C' P9 b+ i6 P2 U$ P+ Y
- #define GPIO_PUPDR_PUPDR9 ((uint32_t)0x000C0000)
0 Y2 _; i8 l5 Y: M; y8 h - #define GPIO_PUPDR_PUPDR9_0 ((uint32_t)0x00040000)
' y# V0 i+ I7 C6 P1 j N - #define GPIO_PUPDR_PUPDR9_1 ((uint32_t)0x00080000)
' s% ]6 _( h @: l& G2 v6 F
) i" [' [/ c6 V3 l/ e5 x+ p- #define GPIO_PUPDR_PUPDR10 ((uint32_t)0x00300000)
9 t: G6 X. F2 P( W* P& c1 } - #define GPIO_PUPDR_PUPDR10_0 ((uint32_t)0x00100000)
/ [6 }8 q& L% C) L; A0 H - #define GPIO_PUPDR_PUPDR10_1 ((uint32_t)0x00200000)! i( N4 v0 B* C- W! \/ {( ~
- 9 O5 H9 J( X6 p
- #define GPIO_PUPDR_PUPDR11 ((uint32_t)0x00C00000)+ G# Y4 V& g1 P9 B/ T* E' @
- #define GPIO_PUPDR_PUPDR11_0 ((uint32_t)0x00400000)
& E; z5 e! J$ t - #define GPIO_PUPDR_PUPDR11_1 ((uint32_t)0x00800000) g3 m& G2 }- j7 }% a) T
- + h/ f: W8 F$ k# d/ f
- #define GPIO_PUPDR_PUPDR12 ((uint32_t)0x03000000)
* e. P' n3 k+ C5 i$ \7 j - #define GPIO_PUPDR_PUPDR12_0 ((uint32_t)0x01000000)
6 y1 n; L- O* p+ C7 H, g) P - #define GPIO_PUPDR_PUPDR12_1 ((uint32_t)0x02000000)$ Q1 l3 Y- c& f2 i+ l/ ^
& G/ z9 V' z t p8 u, r4 z6 O- #define GPIO_PUPDR_PUPDR13 ((uint32_t)0x0C000000)
% U/ Y( V( |! o, k J( d - #define GPIO_PUPDR_PUPDR13_0 ((uint32_t)0x04000000)
* b5 w* N9 n. S7 z# R - #define GPIO_PUPDR_PUPDR13_1 ((uint32_t)0x08000000)6 M$ } ^; e# _% g P$ j! g2 G; `6 v
3 w* N- m5 K5 x' @- #define GPIO_PUPDR_PUPDR14 ((uint32_t)0x30000000)
8 t$ z5 c* ~9 w& s4 h4 u7 \ - #define GPIO_PUPDR_PUPDR14_0 ((uint32_t)0x10000000)
4 q$ ]! @$ p% A0 v - #define GPIO_PUPDR_PUPDR14_1 ((uint32_t)0x20000000)) e+ x& _- i g9 [+ F4 j
# u: A- o1 X" z* R+ Y# [ `" I) c- #define GPIO_PUPDR_PUPDR15 ((uint32_t)0xC0000000)! f0 y% n) Z0 t1 `3 r( a6 }3 Q
- #define GPIO_PUPDR_PUPDR15_0 ((uint32_t)0x40000000)
4 r% W0 U6 B8 f' }+ W3 G6 d& H - #define GPIO_PUPDR_PUPDR15_1 ((uint32_t)0x80000000)8 S" B* I' j# v J L: n+ Q
* l w8 s( D) r/ l- /****************** Bits definition for GPIO_IDR register *******************/+ }0 e: }; H. q
- #define GPIO_IDR_IDR_0 ((uint32_t)0x00000001)* C9 H3 ^/ Q1 G: ^( l/ J
- #define GPIO_IDR_IDR_1 ((uint32_t)0x00000002)
* S$ C! @: h$ ~& v9 i' q - #define GPIO_IDR_IDR_2 ((uint32_t)0x00000004), `' V9 Q& F" y
- #define GPIO_IDR_IDR_3 ((uint32_t)0x00000008)
4 V& r1 X, F# S& w - #define GPIO_IDR_IDR_4 ((uint32_t)0x00000010)
# z! T- ]- V, C3 Q - #define GPIO_IDR_IDR_5 ((uint32_t)0x00000020)* z) ?! V" a1 K+ e# m G
- #define GPIO_IDR_IDR_6 ((uint32_t)0x00000040) s. H# h5 u" w3 D6 J
- #define GPIO_IDR_IDR_7 ((uint32_t)0x00000080)
- s5 n8 L/ O0 e( f+ ^1 W! ^ - #define GPIO_IDR_IDR_8 ((uint32_t)0x00000100)
& [$ e) @& X. _, U e. N) ~ - #define GPIO_IDR_IDR_9 ((uint32_t)0x00000200)
" D/ @8 {, l) j - #define GPIO_IDR_IDR_10 ((uint32_t)0x00000400) u6 w6 Y' t k. p0 Y+ v. @) y( E
- #define GPIO_IDR_IDR_11 ((uint32_t)0x00000800)
2 `, e5 Y( Y$ G% f) |$ F9 P" R - #define GPIO_IDR_IDR_12 ((uint32_t)0x00001000)
8 ^% n! C3 v% b* _ - #define GPIO_IDR_IDR_13 ((uint32_t)0x00002000)
. M( k9 n w9 J: Y6 d: Q - #define GPIO_IDR_IDR_14 ((uint32_t)0x00004000)2 |% a& p) ~0 y; B) H% j0 T
- #define GPIO_IDR_IDR_15 ((uint32_t)0x00008000)2 w) M( y/ V X0 S" Z2 ?7 K) M
- /* Old GPIO_IDR register bits definition, maintained for legacy purpose */
4 m; c0 n/ o) {8 Q% @ - #define GPIO_OTYPER_IDR_0 GPIO_IDR_IDR_0
* S4 c# j5 w! t - #define GPIO_OTYPER_IDR_1 GPIO_IDR_IDR_1
p( k# S1 U: v& q/ @* ? - #define GPIO_OTYPER_IDR_2 GPIO_IDR_IDR_2
9 d% r0 D' L, }/ C& f1 m - #define GPIO_OTYPER_IDR_3 GPIO_IDR_IDR_3+ A: M- A( `# v8 _ Q, r A+ n
- #define GPIO_OTYPER_IDR_4 GPIO_IDR_IDR_4
5 N$ [& {. Q: R - #define GPIO_OTYPER_IDR_5 GPIO_IDR_IDR_55 W5 B; ~1 S9 ]) o$ B5 Z
- #define GPIO_OTYPER_IDR_6 GPIO_IDR_IDR_65 Y* _$ x) ?3 s: C/ q/ ~+ h$ ?8 e
- #define GPIO_OTYPER_IDR_7 GPIO_IDR_IDR_7
$ L/ p( [& P8 ?0 J, u! d7 a - #define GPIO_OTYPER_IDR_8 GPIO_IDR_IDR_81 w# z; y+ W3 h7 @$ s) _
- #define GPIO_OTYPER_IDR_9 GPIO_IDR_IDR_94 q' Q% Y2 B" f; m9 \# `; t
- #define GPIO_OTYPER_IDR_10 GPIO_IDR_IDR_10
' P3 F. S! R. c V4 h& B) _ - #define GPIO_OTYPER_IDR_11 GPIO_IDR_IDR_11
1 ~5 P8 J5 h* _. M4 y - #define GPIO_OTYPER_IDR_12 GPIO_IDR_IDR_12
# j; {/ S/ d3 ^& c- m6 _# C! [& r - #define GPIO_OTYPER_IDR_13 GPIO_IDR_IDR_13
: F0 D1 \; ], x - #define GPIO_OTYPER_IDR_14 GPIO_IDR_IDR_14
9 ~2 e9 y, B. ^1 E7 C- p - #define GPIO_OTYPER_IDR_15 GPIO_IDR_IDR_15( K- ]6 ^- ?) l9 I# K
- / y4 M3 B; h7 m/ L# T+ e
- /****************** Bits definition for GPIO_ODR register *******************/' @+ u. w* Q( T( m$ N+ `
- #define GPIO_ODR_ODR_0 ((uint32_t)0x00000001)- W0 o5 X* u$ J. r$ }
- #define GPIO_ODR_ODR_1 ((uint32_t)0x00000002)2 r0 i9 H. W! F! V
- #define GPIO_ODR_ODR_2 ((uint32_t)0x00000004)/ p! c" b" R8 k( u, v: u; H
- #define GPIO_ODR_ODR_3 ((uint32_t)0x00000008)
. P5 O5 G% A( G - #define GPIO_ODR_ODR_4 ((uint32_t)0x00000010)! ]& O9 S: T' N6 a8 N8 G3 _
- #define GPIO_ODR_ODR_5 ((uint32_t)0x00000020). @6 x; T& q' e8 _
- #define GPIO_ODR_ODR_6 ((uint32_t)0x00000040)
. h3 W: r% I2 m/ \ - #define GPIO_ODR_ODR_7 ((uint32_t)0x00000080)
# \1 ?& Z; M" E% |) }% m4 [! ]# Q/ T - #define GPIO_ODR_ODR_8 ((uint32_t)0x00000100)
2 f3 i5 E" J' Q - #define GPIO_ODR_ODR_9 ((uint32_t)0x00000200)4 E; o0 O! J+ H! }2 B# G
- #define GPIO_ODR_ODR_10 ((uint32_t)0x00000400)
) c2 W. m% c& n6 C( r - #define GPIO_ODR_ODR_11 ((uint32_t)0x00000800)
1 U5 l9 w7 ~2 \) E% T! {4 w - #define GPIO_ODR_ODR_12 ((uint32_t)0x00001000)1 T4 Q! O; w* m6 L
- #define GPIO_ODR_ODR_13 ((uint32_t)0x00002000)- l6 o6 C' m5 @% S8 w. d5 a7 ?
- #define GPIO_ODR_ODR_14 ((uint32_t)0x00004000)
* Z& o$ C+ V2 v - #define GPIO_ODR_ODR_15 ((uint32_t)0x00008000): f4 g3 e- y7 ?: N, E! n
- /* Old GPIO_ODR register bits definition, maintained for legacy purpose */9 p8 E; |2 K5 }8 E2 e' e" j3 o
- #define GPIO_OTYPER_ODR_0 GPIO_ODR_ODR_0
p! V# z: g) u+ t0 a7 x; T - #define GPIO_OTYPER_ODR_1 GPIO_ODR_ODR_1
9 `& a( m4 g) Y- g - #define GPIO_OTYPER_ODR_2 GPIO_ODR_ODR_2. S _% y& ^2 w- u9 ^! E- @9 j. k8 k+ n
- #define GPIO_OTYPER_ODR_3 GPIO_ODR_ODR_3
+ F; y0 F/ C$ W9 M z - #define GPIO_OTYPER_ODR_4 GPIO_ODR_ODR_4% v7 p C# {# E0 O' `! v; }
- #define GPIO_OTYPER_ODR_5 GPIO_ODR_ODR_5$ U" o' v( s4 f" Y
- #define GPIO_OTYPER_ODR_6 GPIO_ODR_ODR_6
2 Q- [& f8 T& C. C, Z: J- }; G - #define GPIO_OTYPER_ODR_7 GPIO_ODR_ODR_70 D) r7 X) @* p5 z$ W" R
- #define GPIO_OTYPER_ODR_8 GPIO_ODR_ODR_8
1 d7 |) b( C* }- e! l9 i - #define GPIO_OTYPER_ODR_9 GPIO_ODR_ODR_9
& i7 n& g- r+ N- \1 D( _) ` - #define GPIO_OTYPER_ODR_10 GPIO_ODR_ODR_10
( l( S. O: w+ J - #define GPIO_OTYPER_ODR_11 GPIO_ODR_ODR_11
8 i. K" o9 y# ]: Y$ O - #define GPIO_OTYPER_ODR_12 GPIO_ODR_ODR_12+ b% ~1 h' P. B% q& t2 T+ X
- #define GPIO_OTYPER_ODR_13 GPIO_ODR_ODR_13* }. T& |: Z7 \( S& \
- #define GPIO_OTYPER_ODR_14 GPIO_ODR_ODR_149 Q" y9 I {, Z2 d
- #define GPIO_OTYPER_ODR_15 GPIO_ODR_ODR_15$ O% c# j0 [) U
8 V; B8 L3 n m9 q- /****************** Bits definition for GPIO_BSRR register ******************/
$ c- A( e& w$ h1 L% [& u - #define GPIO_BSRR_BS_0 ((uint32_t)0x00000001)
) D) B- s1 ^* [/ u! D3 ~: A2 o, J: b - #define GPIO_BSRR_BS_1 ((uint32_t)0x00000002)
) R% X8 E! P# m' J' Q( \, @ - #define GPIO_BSRR_BS_2 ((uint32_t)0x00000004)
1 \0 Z7 Z& q2 c8 h! \8 ^ - #define GPIO_BSRR_BS_3 ((uint32_t)0x00000008), n. ^0 d, e% O4 x+ @( E
- #define GPIO_BSRR_BS_4 ((uint32_t)0x00000010)% B( o3 P* U; k
- #define GPIO_BSRR_BS_5 ((uint32_t)0x00000020)
) k3 v( [* `- n; p. l0 w: E - #define GPIO_BSRR_BS_6 ((uint32_t)0x00000040)
* [1 v2 ^$ N; N8 m. U - #define GPIO_BSRR_BS_7 ((uint32_t)0x00000080)
|* ~5 O0 Y% \4 K% x - #define GPIO_BSRR_BS_8 ((uint32_t)0x00000100)
0 P& U5 ]/ H( q; Y7 d* c: @) ^ - #define GPIO_BSRR_BS_9 ((uint32_t)0x00000200)
% V' {3 F! r3 T6 U; W - #define GPIO_BSRR_BS_10 ((uint32_t)0x00000400)' B/ [ s! \9 o" ~8 k4 a
- #define GPIO_BSRR_BS_11 ((uint32_t)0x00000800)0 }( `" g8 P+ @
- #define GPIO_BSRR_BS_12 ((uint32_t)0x00001000)
$ Z* p+ e/ F# U4 l9 d7 \3 a - #define GPIO_BSRR_BS_13 ((uint32_t)0x00002000)2 y4 X- |0 k1 F
- #define GPIO_BSRR_BS_14 ((uint32_t)0x00004000)3 F! E3 ]' B% X
- #define GPIO_BSRR_BS_15 ((uint32_t)0x00008000)# x3 u# u9 j' X7 F; l: i+ }0 _
- #define GPIO_BSRR_BR_0 ((uint32_t)0x00010000)
( Y& S: b: y; P$ P' m! ~ - #define GPIO_BSRR_BR_1 ((uint32_t)0x00020000), y. [# Y6 E4 V" B$ _7 ^7 U9 @; {
- #define GPIO_BSRR_BR_2 ((uint32_t)0x00040000)/ D& Y& n. R" Q& b
- #define GPIO_BSRR_BR_3 ((uint32_t)0x00080000)
/ U; z" h; ^9 Y0 D - #define GPIO_BSRR_BR_4 ((uint32_t)0x00100000)& t0 J1 U" l" w+ U& F
- #define GPIO_BSRR_BR_5 ((uint32_t)0x00200000)
9 X( u# y$ I- g7 l/ l O$ S - #define GPIO_BSRR_BR_6 ((uint32_t)0x00400000)( p8 t" M. @$ N8 B! a; R# U% a
- #define GPIO_BSRR_BR_7 ((uint32_t)0x00800000)$ g+ ~+ @0 p8 V
- #define GPIO_BSRR_BR_8 ((uint32_t)0x01000000)) }: B5 X2 K! V9 I% q: Z9 Z: U
- #define GPIO_BSRR_BR_9 ((uint32_t)0x02000000)
F2 `( H5 j$ I% k, H% A3 O - #define GPIO_BSRR_BR_10 ((uint32_t)0x04000000)- X! R1 z2 o: P/ z; X# Q
- #define GPIO_BSRR_BR_11 ((uint32_t)0x08000000)- F( F, j [$ n
- #define GPIO_BSRR_BR_12 ((uint32_t)0x10000000)! m+ i& ~8 U/ P
- #define GPIO_BSRR_BR_13 ((uint32_t)0x20000000)
4 P6 ~# G4 j8 c7 Z* b% s - #define GPIO_BSRR_BR_14 ((uint32_t)0x40000000)4 |# e3 R1 v% E3 X5 x6 r+ o
- #define GPIO_BSRR_BR_15 ((uint32_t)0x80000000)
复制代码 9 U0 Q( f# I C! x
GPIO全部挂载AHB1总线上) Q! Z$ ?4 I ?$ g$ O2 K" S. X
- P5 |1 K" f8 d! U$ Y
- 5 }) L; U2 a: T
- /******************** Bit definition for RCC_AHB1ENR register ***************/' z; |4 H5 k' |+ Y+ c: b& F; ^
- #define RCC_AHB1ENR_GPIOAEN ((uint32_t)0x00000001)7 s) u2 ~/ \6 L' C
- #define RCC_AHB1ENR_GPIOBEN ((uint32_t)0x00000002)
, h8 @+ C* F: e; K2 S - #define RCC_AHB1ENR_GPIOCEN ((uint32_t)0x00000004)" M* |2 ~- U. W! e+ B
- #define RCC_AHB1ENR_GPIODEN ((uint32_t)0x00000008)# X' O+ p* j, m% M
- #define RCC_AHB1ENR_GPIOEEN ((uint32_t)0x00000010)
3 e$ O* u- Z; o - #define RCC_AHB1ENR_GPIOFEN ((uint32_t)0x00000020)1 J+ U4 J9 h/ b
- #define RCC_AHB1ENR_GPIOGEN ((uint32_t)0x00000040)
9 W3 J4 o2 p2 e1 [ - #define RCC_AHB1ENR_GPIOHEN ((uint32_t)0x00000080)
: p- n# g8 v; C4 S) M$ i6 h. o5 r - #define RCC_AHB1ENR_GPIOIEN ((uint32_t)0x00000100)
3 g7 e/ t, ~" ? ~0 }& d: K - #define RCC_AHB1ENR_GPIOJEN ((uint32_t)0x00000200)
4 L% |' K4 G+ P - #define RCC_AHB1ENR_GPIOKEN ((uint32_t)0x00000400)
复制代码
" [( S/ I! A4 P' e3 J* ^, N% q/ G |