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