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