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