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