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