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