你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 GPIO功能复用

[复制链接]
STMCU小助手 发布时间:2022-4-2 22:00
01. GPIO复用概述4 |: e( ~3 K! C8 m8 h* M
STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 复用的。也就是说,一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。' y( @+ V  r: r6 B+ r
( h% }, V# e+ `  D& f
STM32F4 系列微控制器 IO 引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的 IO 口。这样可以确保共用同一个 IO 引脚的外设之间不会发生冲突。
$ \# a) [7 z3 A# g
9 H! S3 y9 \7 |9 |) |1 g$ n每个 IO 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0-7)和 GPIOx_AFRH(针对引脚 8-15)寄存器对这些输入进行配置,每四位控制一路复用
0 m+ H: r; T) Y# ]8 x" w# p8 Z- t: G" [4 b
1)完成复位后,所有 IO 都会连接到系统的复用功能 0(AF0)。
% r; J  K2 ]  y, @" q+ `2)外设的复用功能映射到 AF1 到 AF13。
+ p9 Q) q$ K0 M3 j& W; x/ F3)Cortex-M4 EVENTOUT 映射到 AF15。. @  \5 D0 F$ D" y- v

; k2 y/ M4 I/ U2 Z0 J 255@5}T_90{@@A]2`4J}FG4.png $ D- _0 D, W7 H. C; T: H

8 E0 e2 M% O/ x. N* _7 ]02. 寄存器描述
1 x6 F& G" V; J( A3 I2 S
探索者 STM32F407 开发板的原理图上 PC11 的原理图如图 所示:2 {$ T. [  C+ K8 r: k9 C3 S

5 {- T! _, x; Q$ h  n# k% C 20200821110906739.png
8 Z% U0 i/ b4 D0 ^
# c9 _) [4 B- T% `% mPC11 可以作为 SPI3_MISO/U3_RX/U4_RX/SDIO_D3/DCMI_D4/I2S3ext_SD等复用功能输出,这么多复用功能,如果这些外设都开启了,那么对 STM32F1 来说,那就可能乱套了,外设之间可互相干扰,但是 STM32F4,由于有复用功能选择功能,可以让 PC11 仅连接到某个特定的外设,因此不存在互相干扰的情况。
$ M* S" k- j! H+ u6 o& U
$ c' t( S2 d* KGPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)
& Y! g5 u% G* ~) _$ h# SGPIO alternate function low register2 @0 c* ]7 n. q; l' w+ d3 f
偏移地址:0x20
  ?( x6 u) y5 h# p6 C% k4 i2 h复位值:0x0000 00004 R/ t- x3 M2 R5 Q3 _

3 c4 `3 K9 e, T# Y9 n 1%$J{ZY0`HBV3I23R0FMX3X.png ' M5 [9 X3 M- T7 V

$ D/ ~$ l) N  W4 ^: fGPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)
# ^+ `  J' s5 E3 k+ m4 YGPIO alternate function high register  _8 [% b2 `+ J3 \- d7 ^6 p
偏移地址:0x24
; L5 @6 e4 T3 Y! N复位值:0x0000 00005 F  q, R" I9 ]. X( C8 a

/ L# T: F7 X+ M' b" n 1C%O9MJMC5BXN{(_7@(V627.png
. y1 E3 e6 C0 J' e5 R/ c$ N/ U- m, K3 |
在微控制器完成复位后,所有 IO 口都会连接到系统复用功能 0(AF0)。这里大家需要注意,对于系统复用功能 AF0,我们将 IO 口连接到 AF0 之后,还要根据所用功能进行配置:
7 r. Y( e8 E) {- |. h; r8 f' S: a. l: x9 c* K& j! d
JTAG/SWD:在器件复位之后,会将这些功能引脚指定为专用引脚。也就是说,这些引脚在复位后默认就是 JTAG/SWD 功能。如果我们要作为 GPIO 来使用,就需要对对应的 IO口复用器进行配置。6 x3 @$ }; s3 b

; f' I3 b" L* B- d' }4 KRTC_REFIN:此引脚在系统复位之后要使用的话要配置为浮空输入模式。
1 J' V) P9 I% D; s) S
5 i. y5 p' X/ J6 QMCO1 和 MCO2:这些引脚在系统复位之后要使用的话要配置为复用功能模式。
" v$ h& k: z& z9 [) V  N9 `& m1 l( e: {9 w" n: y8 t& ]
03. 类型5 z3 V0 j4 n0 X
复用功能相关宏4 x4 P2 ^) R" ]# k5 f

# m9 f% F; X3 a7 t
  1. /** 4 z3 f  g, A( W6 n2 `3 [
  2.   * @brief   AF 0 selection  
    4 w4 G) c$ u) f# `( Q. I5 d; a) ~7 l
  3.   */
    ; O9 E# s7 j% \9 f+ C1 b. o8 U
  4. #define GPIO_AF_RTC_50Hz      ((uint8_t)0x00)  /* RTC_50Hz Alternate Function mapping */7 h' }& Q& W8 }: V1 n' Y
  5. #define GPIO_AF_MCO           ((uint8_t)0x00)  /* MCO (MCO1 and MCO2) Alternate Function mapping */( w7 |4 B; d' c% q# D$ a- A
  6. #define GPIO_AF_TAMPER        ((uint8_t)0x00)  /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */& Z; u' B9 H2 u/ v9 i. |
  7. #define GPIO_AF_SWJ           ((uint8_t)0x00)  /* SWJ (SWD and JTAG) Alternate Function mapping */  W. _1 u: m6 e
  8. #define GPIO_AF_TRACE         ((uint8_t)0x00)  /* TRACE Alternate Function mapping */" V" D: n' ]3 M& u
  9. #if defined(STM32F446xx)
    . B9 j+ J; y( J! y4 Q; ?: M
  10. #define GPIO_AF0_TIM2         ((uint8_t)0x00)  /* TIM2 Alternate Function mapping */
    . g5 v  Q7 l+ A" S
  11. #endif /* STM32F446xx */; B2 j5 |8 K9 [# T

  12. 8 q$ W' a" {6 Q! I6 e
  13. /**
    1 \: A0 M9 E% c* h0 o9 G
  14.   * @brief   AF 1 selection  
    ) M% S) m, @2 O# W% l2 }
  15.   */
    ( g( |! H8 }" U: l$ D
  16. #define GPIO_AF_TIM1          ((uint8_t)0x01)  /* TIM1 Alternate Function mapping */  O+ L* R/ g4 S! L. P, u
  17. #define GPIO_AF_TIM2          ((uint8_t)0x01)  /* TIM2 Alternate Function mapping */' Y5 D1 W) N& p4 {
  18. #if defined(STM32F410xx) || defined(STM32F413_423xx)9 ~  _7 ~# |4 g6 p
  19. #define GPIO_AF_LPTIM         ((uint8_t)0x01)  /* LPTIM Alternate Function mapping */
    3 B4 o" H2 `2 P8 I! B' Q
  20. #endif /* STM32F410xx || STM32F413_423xx */$ J* z8 e# U( J: |9 M- g5 \2 ?  d0 b
  21. /** + h5 F5 |) o( C6 S/ Z
  22.   * @brief   AF 2 selection  : k& X, z2 {' j
  23.   */ ' c# t+ h% u/ p: r  N; Q7 ]
  24. #define GPIO_AF_TIM3          ((uint8_t)0x02)  /* TIM3 Alternate Function mapping */) N6 k' ~7 o; k8 ~/ v6 I6 J$ Y$ J, v
  25. #define GPIO_AF_TIM4          ((uint8_t)0x02)  /* TIM4 Alternate Function mapping */& V( I4 Q+ i* ]* H; I5 H, M
  26. #define GPIO_AF_TIM5          ((uint8_t)0x02)  /* TIM5 Alternate Function mapping */
    & p' W( y; t6 T9 F

  27. - `2 |7 M1 `* ?& N3 _5 a
  28. /** " J0 C3 c  A( H( Y% s0 L+ C
  29.   * @brief   AF 3 selection  
    4 H- j" g( a2 Z/ x! ]- q4 u
  30.   */
    , t  n" U/ L* s  K# E! c6 P
  31. #define GPIO_AF_TIM8          ((uint8_t)0x03)  /* TIM8 Alternate Function mapping */
    7 `! X2 s! S# S6 @% |+ _9 B/ {( [
  32. #define GPIO_AF_TIM9          ((uint8_t)0x03)  /* TIM9 Alternate Function mapping */
    + F8 A8 N- E1 @$ j
  33. #define GPIO_AF_TIM10         ((uint8_t)0x03)  /* TIM10 Alternate Function mapping */
    # w6 {0 I* i  h  }# {3 K6 Q! o
  34. #define GPIO_AF_TIM11         ((uint8_t)0x03)  /* TIM11 Alternate Function mapping */
    + a: ~! z0 S& D, ~3 f, ]0 v
  35. #if defined(STM32F446xx)
    0 \: H' @2 [* n
  36. #define GPIO_AF3_CEC          ((uint8_t)0x03)  /* CEC Alternate Function mapping */1 ?: I( Z6 }- \  r& n6 ?+ L: ^0 g/ }
  37. #endif /* STM32F446xx */
    % _7 x5 x; B( V+ Y' w% }# v
  38. #if defined(STM32F413_423xx)
    5 H! ~6 a9 N9 e, {, w0 x
  39. #define GPIO_AF3_DFSDM2       ((uint8_t)0x03)  /* DFSDM2 Alternate Function mapping */
    % D. G4 B  x( n! [
  40. #endif /* STM32F413_423xx */
    9 k0 c( M; i8 m0 b3 @5 A8 z5 e, K0 P
  41. /**
    4 C7 N' j/ v5 F& J. f; \
  42.   * @brief   AF 4 selection  * a% d* l( [$ l
  43.   */ # [. ~3 H5 N( D! i* _0 g2 p4 n
  44. #define GPIO_AF_I2C1          ((uint8_t)0x04)  /* I2C1 Alternate Function mapping */
    5 F. n5 p7 q4 l5 t+ M
  45. #define GPIO_AF_I2C2          ((uint8_t)0x04)  /* I2C2 Alternate Function mapping */1 j$ S* W( L8 q: w
  46. #define GPIO_AF_I2C3          ((uint8_t)0x04)  /* I2C3 Alternate Function mapping */% ~$ y! j: ~  K% j4 k& W
  47. #if defined(STM32F446xx)
    9 y; S. H, n( S5 |* ~
  48. #define GPIO_AF4_CEC          ((uint8_t)0x04)  /* CEC Alternate Function mapping */# B# {' E8 `: ]. C
  49. #endif /* STM32F446xx */2 G+ u8 Z2 {- |2 N' G* s' O5 @& L
  50. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)
    6 I- i# g% C: u, G# C3 D
  51. #define GPIO_AF_FMPI2C        ((uint8_t)0x04)  /* FMPI2C Alternate Function mapping */& I* I  @" ~, b# Q/ o4 L8 }
  52. #endif /* STM32F410xx || STM32F446xx */8 c9 K/ l! ~% [) n0 V7 A

  53. # P5 \7 ~' ~6 _% E8 C! L
  54. /**
    8 m/ C6 ^6 I, c4 J& l
  55.   * @brief   AF 5 selection  
    4 X, ^$ o$ K' ~1 o
  56.   */
      a" V* E+ P; Z$ k- r
  57. #define GPIO_AF_SPI1          ((uint8_t)0x05)  /* SPI1/I2S1 Alternate Function mapping */, c3 k7 C& g" k) U: [
  58. #define GPIO_AF_SPI2          ((uint8_t)0x05)  /* SPI2/I2S2 Alternate Function mapping */4 m( W% C- n) c% y
  59. #define GPIO_AF5_SPI3         ((uint8_t)0x05)  /* SPI3/I2S3 Alternate Function mapping (Only for STM32F411xE and STM32F413_423xx Devices) */
    ; q! z$ e( Y! A& j3 Q( C& n
  60. #define GPIO_AF_SPI4          ((uint8_t)0x05)  /* SPI4/I2S4 Alternate Function mapping */
      I8 b( D+ T0 F* C( ?/ q
  61. #define GPIO_AF_SPI5          ((uint8_t)0x05)  /* SPI5 Alternate Function mapping      */' s: V8 Y: M* I. p$ o" Y
  62. #define GPIO_AF_SPI6          ((uint8_t)0x05)  /* SPI6 Alternate Function mapping      */
    8 N0 L. E6 Z6 }% A6 [

  63. 2 y7 U4 W/ T' {. X
  64. /**
    * s3 }- t) b8 ?7 u' l! i8 [
  65.   * @brief   AF 6 selection  
    - f. G& P2 {6 s. c9 F+ a
  66.   */ : p, ^. y6 T( {/ B; S* r5 B0 M
  67. #define GPIO_AF_SPI3          ((uint8_t)0x06)  /* SPI3/I2S3 Alternate Function mapping */
    ; T- V7 x3 B) {! i
  68. #define GPIO_AF6_SPI1         ((uint8_t)0x06)  /* SPI1 Alternate Function mapping (Only for STM32F410xx Devices) */
    $ s9 X. S" V+ u4 x' S
  69. #define GPIO_AF6_SPI2         ((uint8_t)0x06)  /* SPI2 Alternate Function mapping (Only for STM32F410xx/STM32F411xE Devices) */# Y7 K( ]) ?1 e
  70. #define GPIO_AF6_SPI4         ((uint8_t)0x06)  /* SPI4 Alternate Function mapping (Only for STM32F411xE Devices) */
    # X3 E3 h$ y/ r. [3 g! G0 ^
  71. #define GPIO_AF6_SPI5         ((uint8_t)0x06)  /* SPI5 Alternate Function mapping (Only for STM32F410xx/STM32F411xE Devices) */
    7 z2 X/ S* P7 o/ s
  72. #define GPIO_AF_SAI1          ((uint8_t)0x06)  /* SAI1 Alternate Function mapping      */
    . \! g! x; S6 U9 S9 d8 [# R
  73. #define GPIO_AF_I2S2ext       ((uint8_t)0x06)  /* I2S2ext_SD Alternate Function mapping (only for STM32F412xG and STM32F413_423xx Devices) */
    : T6 e5 W/ w8 G% J3 B/ j
  74. #if defined(STM32F412xG) || defined(STM32F413_423xx), D5 }+ e8 ]. f) x" E! y
  75. #define GPIO_AF6_DFSDM1       ((uint8_t)0x06)  /* DFSDM1 Alternate Function mapping */
    5 H2 d& `/ \5 p! W* |9 H
  76. #endif /* STM32F412xG || STM32F413_423xx */
    . Y2 Z# E# \' c% ]
  77. #if defined(STM32F413_423xx)
    . r2 D' G0 s% i
  78. #define GPIO_AF6_DFSDM2       ((uint8_t)0x06)  /* DFSDM2 Alternate Function mapping */
    - ?2 l: _; T. s  z6 S
  79. #endif /* STM32F413_423xx */3 z$ |! t+ j% Q6 _0 s3 Y( U
  80. 7 u  t" Y8 u- u1 m( o+ N+ g
  81. /**
    - G) @( x+ Z6 R* n' z  m
  82.   * @brief   AF 7 selection  
    . g; u, C$ P  e' q
  83.   */
    - Y3 H; E: j; V( [
  84. #define GPIO_AF_USART1         ((uint8_t)0x07)  /* USART1 Alternate Function mapping  */. d, `( |' {$ ^3 R. B2 f
  85. #define GPIO_AF_USART2         ((uint8_t)0x07)  /* USART2 Alternate Function mapping  */
    - b2 H' _4 t/ d. J9 A  j
  86. #define GPIO_AF_USART3         ((uint8_t)0x07)  /* USART3 Alternate Function mapping  */0 m( |+ }; M; b4 L' m
  87. #define GPIO_AF7_SPI3          ((uint8_t)0x07)  /* SPI3/I2S3ext Alternate Function mapping */7 [, i9 p+ S  F! h8 D, b
  88. #if defined(STM32F413_423xx)
    " c& h3 m- w. y: @% U' A
  89. #define GPIO_AF7_DFSDM2        ((uint8_t)0x07)  /* DFSDM2 Alternate Function mapping     */
    6 \: B% k: G& c) l. ?* L
  90. #define GPIO_AF7_SAI1          ((uint8_t)0x07)  /* SAI1 Alternate Function mapping       */# Y+ w; j) N( ^. _$ v
  91. #endif /* STM32F413_423xx */
    ! ?) x& M2 p9 t' C- i2 {/ \) S

  92. 6 P) ^+ M. t1 S, q9 b
  93. /**   g8 |+ p' F! N  f2 I
  94.   * @brief   AF 7 selection Legacy
    ' o$ p/ C& D+ m9 g9 g
  95.   */ 9 m& e, O& A" Y$ f
  96. #define GPIO_AF_I2S3ext   GPIO_AF7_SPI3
    7 \- a2 ~  o* X6 |% ]. A5 D8 L

  97. 2 j1 l0 T2 d2 V, H0 X: e
  98. /** 9 g% d4 h6 D) \* ]$ D
  99.   * @brief   AF 8 selection  4 n! ?$ J5 b4 t
  100.   */ $ ]3 b8 P* N9 `" ~; U: O* s1 Y
  101. #define GPIO_AF_UART4         ((uint8_t)0x08)  /* UART4 Alternate Function mapping  */
    6 F  U# W" L: C  @8 Z! e& f
  102. #define GPIO_AF_UART5         ((uint8_t)0x08)  /* UART5 Alternate Function mapping  */
    8 W7 ~' j/ t$ K1 B
  103. #define GPIO_AF_USART6        ((uint8_t)0x08)  /* USART6 Alternate Function mapping */
    5 R6 r/ K) h, C/ ^3 H
  104. #define GPIO_AF_UART7         ((uint8_t)0x08)  /* UART7 Alternate Function mapping  */
    " \+ x: ?- C6 R5 v( a8 I3 Z
  105. #define GPIO_AF_UART8         ((uint8_t)0x08)  /* UART8 Alternate Function mapping  */
    & l2 }5 e# v7 I0 N" g! `# v
  106. #if defined(STM32F412xG) || defined(STM32F413_423xx)
    5 a% P8 A/ U: G+ I
  107. #define GPIO_AF8_USART3        ((uint8_t)0x08)  /* USART3 Alternate Function mapping */  e* P# a7 x/ f: s$ p+ u+ Y* q7 }
  108. #define GPIO_AF8_DFSDM1        ((uint8_t)0x08)  /* DFSDM Alternate Function mapping  */5 @$ M4 h4 g- x  A2 z4 E: n3 {. ^6 }
  109. #define GPIO_AF8_CAN1          ((uint8_t)0x08)  /* CAN1 Alternate Function mapping   */
    / d( X$ q; p  E/ j& z0 \: \1 u
  110. #endif /* STM32F412xG || STM32F413_423xx */  ?4 t4 E% y: X" ~
  111. #if defined(STM32F446xx)- O1 }1 J5 C/ p& o
  112. #define GPIO_AF8_SAI2          ((uint8_t)0x08)  /* SAI2 Alternate Function mapping */" p( u7 |6 |9 }1 ?4 Q2 T1 L5 W5 [
  113. #define GPIO_AF_SPDIF         ((uint8_t)0x08)   /* SPDIF Alternate Function mapping */. ^1 t& q& ~8 r. n8 ~+ d% _  f
  114. #endif /* STM32F446xx */
    ! X* m2 v, x! [( h( k/ O
  115. , L$ p9 w: k+ C  W, |
  116. /** - ?: d, w1 V$ d+ |& A* Q
  117.   * @brief   AF 9 selection
    8 f0 V5 N! Y% C& A. h+ g& q
  118.   */ ' y( y. H5 Y8 c% z! `  s- z! |1 G: U
  119. #define GPIO_AF_CAN1          ((uint8_t)0x09)  /* CAN1 Alternate Function mapping  */
    ) G9 S! ?' T" t3 g0 a/ K# C: g
  120. #define GPIO_AF_CAN2          ((uint8_t)0x09)  /* CAN2 Alternate Function mapping  */2 o! i- H& b9 }6 ~
  121. #define GPIO_AF_TIM12         ((uint8_t)0x09)  /* TIM12 Alternate Function mapping */
    2 u, r% H$ Q' `* o
  122. #define GPIO_AF_TIM13         ((uint8_t)0x09)  /* TIM13 Alternate Function mapping */) W$ J5 R( g4 M! g) U4 g
  123. #define GPIO_AF_TIM14         ((uint8_t)0x09)  /* TIM14 Alternate Function mapping */9 D$ W6 j% R. }
  124. #define GPIO_AF9_I2C2         ((uint8_t)0x09)  /* I2C2 Alternate Function mapping (Only for STM32F401xx/STM32F410xx/STM32F411xE/STM32F412xG/STM32F413_423xx Devices) */' \  b" `% N* b) f2 X: T- o9 d
  125. #define GPIO_AF9_I2C3         ((uint8_t)0x09)  /* I2C3 Alternate Function mapping (Only for STM32F401xx/STM32F411xE/STM32F412xG and STM32F413_423xx Devices) */9 \. Q' P4 B* |
  126. #if defined(STM32F446xx)8 n& G  Q# r8 t. A! H6 l! V' i
  127. #define GPIO_AF9_SAI2         ((uint8_t)0x09)  /* SAI2 Alternate Function mapping */: u5 F* X5 _5 R3 M* e
  128. #endif /* STM32F446xx */
    ' k2 ^# F+ Z% X7 h; ~
  129. #define GPIO_AF9_LTDC         ((uint8_t)0x09)  /* LTDC Alternate Function mapping */
    5 _' ]4 i; F. z/ [
  130. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx), N9 Z" W' m  K+ l
  131. #define GPIO_AF9_QUADSPI      ((uint8_t)0x09)  /* QuadSPI Alternate Function mapping */
    ' [3 T2 g- `( z6 O
  132. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */
    7 \  w1 A' ~1 H3 B8 Y2 D
  133. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx)) O& P) R# ^% A+ b
  134. #define GPIO_AF9_FMPI2C       ((uint8_t)0x09)  /* FMPI2C Alternate Function mapping (Only for STM32F410xx Devices) */2 b. C0 h% [, O# p! z6 F4 s
  135. #endif /* STM32F410xx || STM32F412xG || STM32F413_423xx */. a# B- I* f' W8 A4 k& m7 D8 l
  136. 9 X; l1 x" r  d5 i; S6 S. R
  137. /**
    % P" H9 c: E" ^4 ]  c
  138.   * @brief   AF 10 selection  
    + L9 k4 |3 o7 |2 w9 T3 f! i% _
  139.   */ 8 Q4 n" R! y0 x# ?* Y9 j# V
  140. #define GPIO_AF_OTG_FS         ((uint8_t)0xA)  /* OTG_FS Alternate Function mapping */7 q3 m3 l6 h( D  P3 W
  141. #define GPIO_AF_OTG_HS         ((uint8_t)0xA)  /* OTG_HS Alternate Function mapping */0 ?) X- E: @$ w4 A0 ], N0 a; W
  142. #if defined(STM32F446xx)4 J+ s9 `: O  f
  143. #define GPIO_AF10_SAI2         ((uint8_t)0x0A)  /* SAI2 Alternate Function mapping */& ~4 |1 [! d: M; ~
  144. #endif /* STM32F446xx */' n* I. C. Q/ T) p8 r! F  e
  145. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)* r1 X+ h8 E8 L& ?; D
  146. #define GPIO_AF10_QUADSPI      ((uint8_t)0x0A)  /* QuadSPI Alternate Function mapping */
    $ [" Z& H7 z; i1 E7 D: y
  147. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */
    8 W; ^. l# d( ]8 z- X
  148. #if defined(STM32F412xG) || defined(STM32F413_423xx); x! T4 j- S/ J4 Z: J3 k
  149. #define GPIO_AF10_FMC           ((uint8_t)0xA)  /* FMC Alternate Function mapping    */, P" H) l  F7 \* F7 B
  150. #define GPIO_AF10_DFSDM1         ((uint8_t)0xA) /* DFSDM Alternate Function mapping  */6 `9 e. X! `# Z
  151. #endif /* STM32F412xG || STM32F413_423xx */
    & B( ~* x" Y6 i% `+ [2 ]
  152. #if defined(STM32F413_423xx)
    1 w( A5 u6 N! Y6 D7 h0 k1 f
  153. #define GPIO_AF10_DFSDM2        ((uint8_t)0x0A)  /* DFSDM2 Alternate Function mapping */2 B6 s4 l5 R2 {. w8 ]
  154. #define GPIO_AF10_SAI1          ((uint8_t)0x0A)  /* SAI1 Alternate Function mapping   */$ ^5 i. ~  q$ E
  155. #endif /* STM32F413_423xx */! r; X7 _0 }. m1 X( X
  156. /**
    $ q: ^, K8 i+ E5 u
  157.   * @brief   AF 11 selection  
    - K1 i7 ]6 B" z1 b  _
  158.   */
    . y5 [; k; D- X( L7 e% K
  159. #define GPIO_AF_ETH             ((uint8_t)0x0B)  /* ETHERNET Alternate Function mapping */* ~0 c: x. V! J
  160. #if defined(STM32F413_423xx)
    ) h8 C% r$ a1 T- ]8 ?
  161. #define GPIO_AF11_UART4         ((uint8_t)0x0B)  /* UART4 Alternate Function mapping  */
    0 s; P  k) k. `) ?' k
  162. #define GPIO_AF11_UART5         ((uint8_t)0x0B)  /* UART5 Alternate Function mapping  */
    * T/ }1 T5 h; Y+ j7 B& o
  163. #define GPIO_AF11_UART9         ((uint8_t)0x0B)  /* UART9 Alternate Function mapping  */7 R% ^& J" J$ N2 m6 ~
  164. #define GPIO_AF11_UART10        ((uint8_t)0x0B)  /* UART10 Alternate Function mapping */
    6 q3 O7 o3 s, M& b: y# i* H; k
  165. #define GPIO_AF11_CAN3          ((uint8_t)0x0B)  /* CAN3 Alternate Function mapping   */
    + d' R1 p3 ~6 l" l6 {, N
  166. #endif /* STM32F413_423xx */8 s9 L: [- t# h8 u6 Q; T
  167. & h$ V4 C9 K! U. ^5 |% ?+ U3 A
  168. /**
    ' W0 V' b+ N& D
  169.   * @brief   AF 12 selection  
    : V" ~' v) J0 W: ^
  170.   */ , B' N1 i/ F* C
  171. #if defined(STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)1 d/ [6 d7 s* o: P0 O
  172. #define GPIO_AF_FSMC             ((uint8_t)0xC)  /* FSMC Alternate Function mapping                     */: O7 q; }+ I5 R5 _& [4 h1 A$ g
  173. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */) t3 G7 R/ c2 D- p: O  z) v& t/ y

  174. * c0 b2 F# b) K; K# n
  175. #if defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F446xx) || defined(STM32F469_479xx)0 U9 `: _# b6 {
  176. #define GPIO_AF_FMC              ((uint8_t)0xC)  /* FMC Alternate Function mapping                      */, R7 ^3 T- z& Q
  177. #endif /* STM32F427_437xx || STM32F429_439xx || STM32F446xx || STM32F469_479xx */- d( g- U' J* g  ]" N0 b& L  U

  178. ) u6 A) M5 V/ ^) ]+ i
  179. #define GPIO_AF_OTG_HS_FS        ((uint8_t)0xC)  /* OTG HS configured in FS, Alternate Function mapping */; b5 s; j" E3 F) Z
  180. #define GPIO_AF_SDIO             ((uint8_t)0xC)  /* SDIO Alternate Function mapping                     */
    $ P* v# M0 ?/ z2 u
  181. + F1 ]4 g# k- L5 U" c6 }9 E. K
  182. /** ( _0 N8 `9 v: r5 K6 y3 R$ r( y3 _7 W
  183.   * @brief   AF 13 selection  
    & u/ Z8 K  Z, {/ Q
  184.   */
    8 P8 P; n- T' V
  185. #define GPIO_AF_DCMI          ((uint8_t)0x0D)  /* DCMI Alternate Function mapping */
    " g( e( w  M8 \
  186. #if defined(STM32F469_479xx)5 R7 l- ^9 j, I7 ^
  187. #define GPIO_AF_DSI           ((uint8_t)0x0D)  /* DSI Alternate Function mapping */
    3 p% B9 h0 u% ], k
  188. #endif /* STM32F469_479xx */# S* [' x5 G/ s+ |7 M5 z! ^
  189. /** ) N1 |9 Z- x2 s1 ?8 c# R1 X7 c
  190.   * @brief   AF 14 selection  4 @! c6 V3 `/ ^4 I' j$ k
  191.   */
    4 r8 u) s& a/ p3 T6 u/ k, K! X& T* ?
  192. #define GPIO_AF_LTDC          ((uint8_t)0x0E)  /* LCD-TFT Alternate Function mapping */8 ^$ [! |7 T4 R) J
  193. #if defined(STM32F413_423xx)
    # h' d. o# b* D/ L- d
  194. #define GPIO_AF14_RNG         ((uint8_t)0x0E)  /* RNG Alternate Function mapping  */
    ) [$ O' `/ S( |+ N" @  Z
  195. #endif /* STM32F413_423xx */# V" R. f* d: X" r

  196. " S  |4 Y: W6 ~  _7 y8 Q3 C; H
  197. /**
    ; M6 \" A6 M! i
  198.   * @brief   AF 15 selection  , f6 J& {7 Y& t& v8 g& I1 j1 {
  199.   */
    , z& y/ W5 f8 I
  200. #define GPIO_AF_EVENTOUT      ((uint8_t)0x0F)  /* EVENTOUT Alternate Function mapping */% |. I$ @: Y: P) \
  201. 2 I1 O1 @% E$ A5 S% ?. \% O! i  \
  202. #define IS_GPIO_AF(AF)   (((AF) == GPIO_AF_RTC_50Hz)  || ((AF) == GPIO_AF_TIM14)     || \5 H7 {. X0 b& x1 n( U0 Y
  203.                           ((AF) == GPIO_AF_MCO)       || ((AF) == GPIO_AF_TAMPER)    || \$ o; u( ^% R' f1 W
  204.                           ((AF) == GPIO_AF_SWJ)       || ((AF) == GPIO_AF_TRACE)     || \: T/ a0 Q) M9 m4 j! n- k
  205.                           ((AF) == GPIO_AF_TIM1)      || ((AF) == GPIO_AF_TIM2)      || \. l- y; z: Z! E5 Y/ i# k+ ~' b
  206.                           ((AF) == GPIO_AF_TIM3)      || ((AF) == GPIO_AF_TIM4)      || \' s# y0 ]. B) n  p
  207.                           ((AF) == GPIO_AF_TIM5)      || ((AF) == GPIO_AF_TIM8)      || \5 b1 B) {9 N! k5 h  x
  208.                           ((AF) == GPIO_AF_I2C1)      || ((AF) == GPIO_AF_I2C2)      || \
    & Y1 h0 }' N! c9 T
  209.                           ((AF) == GPIO_AF_I2C3)      || ((AF) == GPIO_AF_SPI1)      || \
    9 h- @8 y- r; t& D5 z
  210.                           ((AF) == GPIO_AF_SPI2)      || ((AF) == GPIO_AF_TIM13)     || \" q1 |0 k8 }0 Q5 C" W; n7 B& j( _
  211.                           ((AF) == GPIO_AF_SPI3)      || ((AF) == GPIO_AF_TIM14)     || \! b( S; t8 A# V  K* L
  212.                           ((AF) == GPIO_AF_USART1)    || ((AF) == GPIO_AF_USART2)    || \
    : }0 x% m- G  p% f
  213.                           ((AF) == GPIO_AF_USART3)    || ((AF) == GPIO_AF_UART4)     || \( V1 M3 p9 C: C1 r4 h
  214.                           ((AF) == GPIO_AF_UART5)     || ((AF) == GPIO_AF_USART6)    || \
    ) ^! I1 l) b4 R* |
  215.                           ((AF) == GPIO_AF_CAN1)      || ((AF) == GPIO_AF_CAN2)      || \# g8 z! I/ k1 S- a; L+ q# U- H
  216.                           ((AF) == GPIO_AF_OTG_FS)    || ((AF) == GPIO_AF_OTG_HS)    || \3 \" h7 C4 w$ K3 `; x# T5 E( I9 p4 E6 B
  217.                           ((AF) == GPIO_AF_ETH)       || ((AF) == GPIO_AF_OTG_HS_FS) || \
    $ `0 \' t4 S  R& g; G) {
  218.                           ((AF) == GPIO_AF_SDIO)      || ((AF) == GPIO_AF_DCMI)      || \
    1 w7 z) R6 y6 z6 k/ i# ]
  219.                           ((AF) == GPIO_AF_EVENTOUT)  || ((AF) == GPIO_AF_FSMC))5 d" G+ W; B" ]- r) P
  220. #endif /* STM32F40_41xxx */
复制代码

, X/ p& R0 h% ]+ ^04. 函数  O2 }0 x" H7 v7 i  Z  l
GPIO复用功能函数6 @: W* `, f# w" A2 c' c. C# g

# i" C4 @1 P0 z3 [7 ~$ P# y
  1. /* GPIO Alternate functions configuration function ****************************/
    6 a6 |! a1 D" u8 q
  2. void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
复制代码

1 _" r9 `; P* @* d05. 参考示例6 B/ s8 M5 d6 b+ g! w
串口配置
0 Y; W8 \( W7 i6 i- K9 ~7 M/ o
  B% a8 v6 B4 m$ E+ {; [# P
  1. /*GPIOA9 与 GPIOA10 初始化*/
    6 J# g5 ]: @) I
  2. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
    2 \& n: H9 y( @& N6 _# j
  3. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;// 复用功能
    # e$ T  L2 @/ q- s2 [7 z
  4. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz& z' f( k, T$ d) S
  5. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出2 H& {' r3 N. `
  6. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
    7 _$ x* I4 M6 g0 o9 v3 s
  7. GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化 PA9,PA10
    4 V0 S' g" K. ^7 z
  8. : c) \$ t% s) @8 k
  9. /*PA9 连接 AF7,复用为 USART1_TX */& r9 C3 S6 J; m9 t# r5 v
  10. GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
    3 N8 m  i0 h* P: `+ a
  11. /* PA10 连接 AF7,复用为 USART1_RX*/
    : M2 P) p, w) m$ x' K( {; p
  12. GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
复制代码

" N8 E6 ^3 k, W6 Y6 @; m- y8 r3 z( f& w3 [! m

  ~) v0 u+ J( U* J; q$ M; X* x  X. n
收藏 评论0 发布时间:2022-4-2 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版