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

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

[复制链接]
STMCU小助手 发布时间:2022-4-2 22:00
01. GPIO复用概述1 z9 |7 k7 `3 k$ E% d
STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 复用的。也就是说,一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。9 k( U3 _0 v0 B- Y7 T5 ]4 I- D7 a
+ W: @* r8 r7 w
STM32F4 系列微控制器 IO 引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的 IO 口。这样可以确保共用同一个 IO 引脚的外设之间不会发生冲突。
" O/ |5 a; V- A" ^3 ^  ]$ P* g% W, q" e
每个 IO 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0-7)和 GPIOx_AFRH(针对引脚 8-15)寄存器对这些输入进行配置,每四位控制一路复用
  N6 |! B/ d/ G* ?
2 c4 s& b! ~$ u9 H) k: r$ L' `/ l1)完成复位后,所有 IO 都会连接到系统的复用功能 0(AF0)。
$ ?, T- x  g& Y8 h2)外设的复用功能映射到 AF1 到 AF13。
: x6 H+ C7 h# u1 M7 M3)Cortex-M4 EVENTOUT 映射到 AF15。
0 l7 ?: u: p8 d2 W/ Q& V
9 f2 n2 V$ x& {5 {5 V' P 255@5}T_90{@@A]2`4J}FG4.png 0 {- J6 v' y, g: r( l. b* z5 k* x3 b, a

+ o$ I9 i4 Y$ s7 K1 ~* @02. 寄存器描述

( Y, e7 @+ x' v) K0 @: Z) y探索者 STM32F407 开发板的原理图上 PC11 的原理图如图 所示:
* V6 A  _! c4 U7 j8 ~7 Q  ?  f( B3 J2 T0 L: Q+ x% i
20200821110906739.png ! z# {. }- f. Z0 t
4 U0 ?& C. Y5 V0 y. o" u, k5 [
PC11 可以作为 SPI3_MISO/U3_RX/U4_RX/SDIO_D3/DCMI_D4/I2S3ext_SD等复用功能输出,这么多复用功能,如果这些外设都开启了,那么对 STM32F1 来说,那就可能乱套了,外设之间可互相干扰,但是 STM32F4,由于有复用功能选择功能,可以让 PC11 仅连接到某个特定的外设,因此不存在互相干扰的情况。
2 O# z3 t' B, P0 I( `: a4 ~' P
" n: |+ r7 n6 L" n! sGPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)( j% {+ X2 l  ?6 V. O2 W. o  [
GPIO alternate function low register
* [7 N6 N  c2 x7 J偏移地址:0x20
8 A( A4 ]: o5 ]  P9 B' ]! ^复位值:0x0000 0000& M. [+ y& P9 H# ?. u: T; z

3 Z. ~, l/ b+ q 1%$J{ZY0`HBV3I23R0FMX3X.png
# i; H4 g1 _* L( v1 R
! h" w' k, D8 M8 a2 hGPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)
) E  k1 m4 v+ x' ^( W3 r1 R6 A4 aGPIO alternate function high register3 p2 O( r! N. Z0 Q/ m/ q0 j2 }
偏移地址:0x24* ^2 l) x. z; W# A: ~* |; A. V
复位值:0x0000 0000
$ n4 g- ^9 Q/ _  `8 b
" g# N7 `2 W" Y$ S' O 1C%O9MJMC5BXN{(_7@(V627.png
( ~" h0 ~4 a. Q( R* G7 k- s9 G" P" F
3 ^! O& B# A8 _3 r( B  @% i. B, j在微控制器完成复位后,所有 IO 口都会连接到系统复用功能 0(AF0)。这里大家需要注意,对于系统复用功能 AF0,我们将 IO 口连接到 AF0 之后,还要根据所用功能进行配置:
4 J* [7 \2 u+ ?4 P- e' f
$ m- ^; H' d5 F: r  Y- D" kJTAG/SWD:在器件复位之后,会将这些功能引脚指定为专用引脚。也就是说,这些引脚在复位后默认就是 JTAG/SWD 功能。如果我们要作为 GPIO 来使用,就需要对对应的 IO口复用器进行配置。; `" r8 p" z& f/ f0 p! H8 f6 x% ?
! ~4 t+ w9 _& h# n4 c. u' v
RTC_REFIN:此引脚在系统复位之后要使用的话要配置为浮空输入模式。- J5 ^0 E1 T" g$ N- _

: N* `# Q6 E, gMCO1 和 MCO2:这些引脚在系统复位之后要使用的话要配置为复用功能模式。4 s8 Z9 w8 v' s$ {
% A  _" a, Q$ y: G7 q$ O- T
03. 类型! j% ^$ _3 ]! ]" m
复用功能相关宏- v7 _' V& t( e0 y

5 }& K% G3 I  T
  1. /** + i$ n3 Y7 l3 N3 y( S
  2.   * @brief   AF 0 selection  
    ) a1 Y3 x6 E# G5 m; ~; [  C" M
  3.   */
    1 ]( v: k" f- ?0 T6 a8 u1 D
  4. #define GPIO_AF_RTC_50Hz      ((uint8_t)0x00)  /* RTC_50Hz Alternate Function mapping */
    6 Y+ n0 K" i. v2 q! z* N1 L' Q% l1 }
  5. #define GPIO_AF_MCO           ((uint8_t)0x00)  /* MCO (MCO1 and MCO2) Alternate Function mapping */
    . P& _4 V/ Y5 L! z% Z, o# c
  6. #define GPIO_AF_TAMPER        ((uint8_t)0x00)  /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */
    9 V8 \5 `/ W0 F* W9 n
  7. #define GPIO_AF_SWJ           ((uint8_t)0x00)  /* SWJ (SWD and JTAG) Alternate Function mapping */6 L1 _0 s) B& j) c  c
  8. #define GPIO_AF_TRACE         ((uint8_t)0x00)  /* TRACE Alternate Function mapping */
    8 W5 O0 q$ \. ]  U4 o; [. T0 C
  9. #if defined(STM32F446xx)
    9 F/ r" M3 ?' R
  10. #define GPIO_AF0_TIM2         ((uint8_t)0x00)  /* TIM2 Alternate Function mapping */
    3 ~+ S6 b) \2 B9 v1 m& c& t
  11. #endif /* STM32F446xx */
    ' k( ?6 [% f7 }; S+ |% }7 d

  12. 5 h; W! C' X0 V- P
  13. /** , `& C1 z6 h, I; @# ]! k- n
  14.   * @brief   AF 1 selection  / m' t8 G8 f& Y: _# p$ j) Z6 g. K. v4 R
  15.   */
    & t# \$ k# F7 Y0 C$ d! e# f2 m' _
  16. #define GPIO_AF_TIM1          ((uint8_t)0x01)  /* TIM1 Alternate Function mapping */3 z8 [" ^+ S3 y5 C5 H( N$ O- ^4 l
  17. #define GPIO_AF_TIM2          ((uint8_t)0x01)  /* TIM2 Alternate Function mapping */
    ) w6 {1 n+ {: n. {9 W7 D! S- ]
  18. #if defined(STM32F410xx) || defined(STM32F413_423xx)& ?; o3 `: S7 N' `& e+ I# b
  19. #define GPIO_AF_LPTIM         ((uint8_t)0x01)  /* LPTIM Alternate Function mapping */, S6 X/ [/ c. W. }( C; \  x
  20. #endif /* STM32F410xx || STM32F413_423xx */$ _5 v5 Q" I, {, q% J$ t' _& E/ c
  21. /**
    6 ]8 i4 _7 L4 U4 Q+ a
  22.   * @brief   AF 2 selection  9 I: v" c. c+ X' P* c
  23.   */
    ) q+ y" L* w8 a' x9 o/ g/ t+ Z0 @" m
  24. #define GPIO_AF_TIM3          ((uint8_t)0x02)  /* TIM3 Alternate Function mapping */: T5 ]7 {" P' |1 E& b1 m
  25. #define GPIO_AF_TIM4          ((uint8_t)0x02)  /* TIM4 Alternate Function mapping */
    % _, f1 c; W# j, z
  26. #define GPIO_AF_TIM5          ((uint8_t)0x02)  /* TIM5 Alternate Function mapping */1 r3 X5 P* r' S- d6 h, B6 O

  27. 2 ]* c. ?, \- k2 _2 N6 Z
  28. /**
    ' D# j, W& I  T( v2 m
  29.   * @brief   AF 3 selection  
    $ ?0 l7 @2 s3 M8 L% r
  30.   */ " s& V9 L& ~! s; b4 ~$ c$ R
  31. #define GPIO_AF_TIM8          ((uint8_t)0x03)  /* TIM8 Alternate Function mapping */$ }! F) a0 v! ?
  32. #define GPIO_AF_TIM9          ((uint8_t)0x03)  /* TIM9 Alternate Function mapping */8 R  h" V6 _7 ^; J9 M9 d" G
  33. #define GPIO_AF_TIM10         ((uint8_t)0x03)  /* TIM10 Alternate Function mapping */4 d" a6 G8 `3 S" b  O
  34. #define GPIO_AF_TIM11         ((uint8_t)0x03)  /* TIM11 Alternate Function mapping */8 v% ?$ u3 G  H+ }: v5 w& Q
  35. #if defined(STM32F446xx)) N6 s% V8 p# ?" s" Z% n
  36. #define GPIO_AF3_CEC          ((uint8_t)0x03)  /* CEC Alternate Function mapping */4 g  r: g: X1 W2 F! F: P6 t# j- t
  37. #endif /* STM32F446xx */! W# `+ J- D+ P5 y
  38. #if defined(STM32F413_423xx)
    ; v  ]8 W3 O% {. m
  39. #define GPIO_AF3_DFSDM2       ((uint8_t)0x03)  /* DFSDM2 Alternate Function mapping */
    7 l& O1 ?. v; r7 o) Y) H
  40. #endif /* STM32F413_423xx */" S# S1 B! f2 s* C* h
  41. /** " e8 Y7 J) C2 h  _: I
  42.   * @brief   AF 4 selection  
    % \* m  x+ ?6 u6 Q8 v" ?
  43.   */ . U( H* p+ \  i, t4 H) X
  44. #define GPIO_AF_I2C1          ((uint8_t)0x04)  /* I2C1 Alternate Function mapping */1 A5 l+ w0 p. r# K9 K, g
  45. #define GPIO_AF_I2C2          ((uint8_t)0x04)  /* I2C2 Alternate Function mapping */2 S6 p2 J; f! @$ T! q' @& y
  46. #define GPIO_AF_I2C3          ((uint8_t)0x04)  /* I2C3 Alternate Function mapping */, T( U6 a" a8 t2 c1 N
  47. #if defined(STM32F446xx)
    ! N3 `. X% E/ z2 h
  48. #define GPIO_AF4_CEC          ((uint8_t)0x04)  /* CEC Alternate Function mapping */( ^0 P* W+ J+ a8 s; r, Z  N8 h
  49. #endif /* STM32F446xx */8 N- l; u9 i8 h8 S! d  |' f
  50. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)' Y/ |3 r, D& ^$ ?/ b+ b& z, \
  51. #define GPIO_AF_FMPI2C        ((uint8_t)0x04)  /* FMPI2C Alternate Function mapping */" h+ S0 G1 h+ F. |! n- g" E$ m/ \
  52. #endif /* STM32F410xx || STM32F446xx */
    ; B# V5 \& T& ^& a9 J6 r7 Y! n

  53. 6 }% v& M8 A6 o
  54. /**
    8 a) D8 y% U& R8 D. n3 f
  55.   * @brief   AF 5 selection  * y. [' O# U& L$ X0 a6 F
  56.   */
    $ s6 G+ l. D2 T1 n! n! t9 e
  57. #define GPIO_AF_SPI1          ((uint8_t)0x05)  /* SPI1/I2S1 Alternate Function mapping */, n, U6 u2 N" e1 I5 B2 v
  58. #define GPIO_AF_SPI2          ((uint8_t)0x05)  /* SPI2/I2S2 Alternate Function mapping */* Y% p( c( k* |, c  {& Z+ c  n
  59. #define GPIO_AF5_SPI3         ((uint8_t)0x05)  /* SPI3/I2S3 Alternate Function mapping (Only for STM32F411xE and STM32F413_423xx Devices) */
    7 c8 C& Y; m! @0 j5 K
  60. #define GPIO_AF_SPI4          ((uint8_t)0x05)  /* SPI4/I2S4 Alternate Function mapping */5 J$ t' ?6 {8 @* y8 i+ z  Q2 ^5 a
  61. #define GPIO_AF_SPI5          ((uint8_t)0x05)  /* SPI5 Alternate Function mapping      */
    # W! F) S, J7 p+ \6 G, i4 o& i* _
  62. #define GPIO_AF_SPI6          ((uint8_t)0x05)  /* SPI6 Alternate Function mapping      */
    , m- m  a" n/ t% @: V3 \( Q) M
  63. . x4 g: R7 X$ t3 A' E2 j3 K
  64. /** $ X9 l- T) G0 u
  65.   * @brief   AF 6 selection  
    8 g: Q# z2 c2 O1 e5 @
  66.   */
    8 q/ R- U* E$ }9 t$ Y1 Q8 b+ T
  67. #define GPIO_AF_SPI3          ((uint8_t)0x06)  /* SPI3/I2S3 Alternate Function mapping */
    9 b! I( r) I4 a4 D
  68. #define GPIO_AF6_SPI1         ((uint8_t)0x06)  /* SPI1 Alternate Function mapping (Only for STM32F410xx Devices) */& J9 G+ }9 f% j( I9 o4 P2 M8 U
  69. #define GPIO_AF6_SPI2         ((uint8_t)0x06)  /* SPI2 Alternate Function mapping (Only for STM32F410xx/STM32F411xE Devices) */
    4 D, }9 a' [" Z9 p3 L3 t, m
  70. #define GPIO_AF6_SPI4         ((uint8_t)0x06)  /* SPI4 Alternate Function mapping (Only for STM32F411xE Devices) */
    ) K$ `! h3 H- \
  71. #define GPIO_AF6_SPI5         ((uint8_t)0x06)  /* SPI5 Alternate Function mapping (Only for STM32F410xx/STM32F411xE Devices) */5 v+ J0 L  }9 g0 q! \. z
  72. #define GPIO_AF_SAI1          ((uint8_t)0x06)  /* SAI1 Alternate Function mapping      */
    8 \& S1 c% j* m/ Q
  73. #define GPIO_AF_I2S2ext       ((uint8_t)0x06)  /* I2S2ext_SD Alternate Function mapping (only for STM32F412xG and STM32F413_423xx Devices) */
    ; x) J: T8 ?" E: e6 i' F2 D
  74. #if defined(STM32F412xG) || defined(STM32F413_423xx), O$ \: \( Z" }
  75. #define GPIO_AF6_DFSDM1       ((uint8_t)0x06)  /* DFSDM1 Alternate Function mapping */7 f* z8 ~1 x8 \3 o, I
  76. #endif /* STM32F412xG || STM32F413_423xx */6 T) ^+ Q' p9 Y. d7 J! I
  77. #if defined(STM32F413_423xx)
    0 d# I6 }- w4 o1 L
  78. #define GPIO_AF6_DFSDM2       ((uint8_t)0x06)  /* DFSDM2 Alternate Function mapping */
      W( B8 Q1 Y+ Z- M: P; y
  79. #endif /* STM32F413_423xx */
    7 E4 W+ K/ e5 O: w# ?

  80. ( Q  v, G8 w1 g  r4 g0 N2 i
  81. /**
    0 d4 @/ p" d3 I4 g6 L1 e  ]% d
  82.   * @brief   AF 7 selection  & G, D7 Y' ]" O* H
  83.   */
    % @/ S/ ~) I. z- k! D7 m
  84. #define GPIO_AF_USART1         ((uint8_t)0x07)  /* USART1 Alternate Function mapping  */
      _) {$ ^: P! z9 I
  85. #define GPIO_AF_USART2         ((uint8_t)0x07)  /* USART2 Alternate Function mapping  */
    . |- f8 U" o) z, }/ M
  86. #define GPIO_AF_USART3         ((uint8_t)0x07)  /* USART3 Alternate Function mapping  */
    ; k- [8 U& X4 u
  87. #define GPIO_AF7_SPI3          ((uint8_t)0x07)  /* SPI3/I2S3ext Alternate Function mapping */% {  h! w7 h0 ?$ N
  88. #if defined(STM32F413_423xx)
    . o1 y, A* y6 X5 d" ^
  89. #define GPIO_AF7_DFSDM2        ((uint8_t)0x07)  /* DFSDM2 Alternate Function mapping     */6 N# t/ G( s: Q7 u% E: p1 K
  90. #define GPIO_AF7_SAI1          ((uint8_t)0x07)  /* SAI1 Alternate Function mapping       */$ s; U' \7 h/ ^% ?  b3 g
  91. #endif /* STM32F413_423xx */- ~8 _4 I% z5 u5 f& X
  92. $ s* j8 s' q$ W8 K, |% H- w0 z
  93. /**   M5 s# X. x1 P3 f/ p
  94.   * @brief   AF 7 selection Legacy 2 h% w* ]$ N8 F# `% ?
  95.   */ 7 ?+ Y: U9 Z' a) t$ J# K
  96. #define GPIO_AF_I2S3ext   GPIO_AF7_SPI3
    ( \8 V& W# p. [" j

  97. : K6 F3 U/ A% k4 B+ d0 h) [8 q
  98. /**
    * @+ T4 ^$ h' M, ?
  99.   * @brief   AF 8 selection  
    0 C* ^, d- n) w# H6 \1 H! u
  100.   */ & z0 {7 I" z2 }+ \# ], M& h
  101. #define GPIO_AF_UART4         ((uint8_t)0x08)  /* UART4 Alternate Function mapping  */$ T) v5 E) }' N; R7 C
  102. #define GPIO_AF_UART5         ((uint8_t)0x08)  /* UART5 Alternate Function mapping  */
      |' u# N0 ]* u
  103. #define GPIO_AF_USART6        ((uint8_t)0x08)  /* USART6 Alternate Function mapping */6 `; Z1 F% X1 ^& o- ]
  104. #define GPIO_AF_UART7         ((uint8_t)0x08)  /* UART7 Alternate Function mapping  *// N3 ~' A6 q8 s1 s8 H# J3 Y
  105. #define GPIO_AF_UART8         ((uint8_t)0x08)  /* UART8 Alternate Function mapping  */3 }, r0 H4 ~" _
  106. #if defined(STM32F412xG) || defined(STM32F413_423xx)$ K; \3 ~" w0 z' }9 h: F% ]. h
  107. #define GPIO_AF8_USART3        ((uint8_t)0x08)  /* USART3 Alternate Function mapping */
    ' Z) a4 X1 F8 W( e9 U2 p) T% e
  108. #define GPIO_AF8_DFSDM1        ((uint8_t)0x08)  /* DFSDM Alternate Function mapping  */
    5 ]3 i5 F4 o2 l& W) p# d
  109. #define GPIO_AF8_CAN1          ((uint8_t)0x08)  /* CAN1 Alternate Function mapping   */
    + W2 `+ G: H$ v+ u6 }# s2 s) K
  110. #endif /* STM32F412xG || STM32F413_423xx */
    2 K+ T" v# s+ q4 Z5 m; `
  111. #if defined(STM32F446xx)
      B8 [, W( l7 A9 M' H2 c$ G
  112. #define GPIO_AF8_SAI2          ((uint8_t)0x08)  /* SAI2 Alternate Function mapping */( c+ _8 \4 w1 ~$ H5 v
  113. #define GPIO_AF_SPDIF         ((uint8_t)0x08)   /* SPDIF Alternate Function mapping */
    ! T4 V' C+ i/ L1 C) s
  114. #endif /* STM32F446xx */
    " j7 X1 u- u  u9 Z

  115. " H% l) U3 L3 w, W
  116. /** ( W; g0 a5 M* }4 R' I
  117.   * @brief   AF 9 selection
    & u5 E, W1 W& k1 f9 F
  118.   */
    5 ^* `5 ]& k1 n) T0 [: Y0 i2 ~  i
  119. #define GPIO_AF_CAN1          ((uint8_t)0x09)  /* CAN1 Alternate Function mapping  */, \0 N1 ]  l/ E# w; ?) D5 r7 }4 f( G
  120. #define GPIO_AF_CAN2          ((uint8_t)0x09)  /* CAN2 Alternate Function mapping  */
    9 C3 c4 l! V1 L7 k/ Q( {( }. S
  121. #define GPIO_AF_TIM12         ((uint8_t)0x09)  /* TIM12 Alternate Function mapping */
    - v7 Q" [' O2 D# `. [
  122. #define GPIO_AF_TIM13         ((uint8_t)0x09)  /* TIM13 Alternate Function mapping */
    4 v$ f5 p( T% D1 J% d
  123. #define GPIO_AF_TIM14         ((uint8_t)0x09)  /* TIM14 Alternate Function mapping */3 ]2 a6 `. |" F* h) e
  124. #define GPIO_AF9_I2C2         ((uint8_t)0x09)  /* I2C2 Alternate Function mapping (Only for STM32F401xx/STM32F410xx/STM32F411xE/STM32F412xG/STM32F413_423xx Devices) */" n. ]+ Q; e" |0 I' K* M/ I1 {' v
  125. #define GPIO_AF9_I2C3         ((uint8_t)0x09)  /* I2C3 Alternate Function mapping (Only for STM32F401xx/STM32F411xE/STM32F412xG and STM32F413_423xx Devices) */
    5 f  u3 d' N2 N+ j
  126. #if defined(STM32F446xx)3 h4 A; c7 g/ _! y
  127. #define GPIO_AF9_SAI2         ((uint8_t)0x09)  /* SAI2 Alternate Function mapping */
    6 U3 h3 x9 t6 O& }
  128. #endif /* STM32F446xx */
    + A7 z( ~# V  u/ D% a1 P6 h
  129. #define GPIO_AF9_LTDC         ((uint8_t)0x09)  /* LTDC Alternate Function mapping */; X* K2 m/ j. t$ |+ d6 v1 Y
  130. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
    / j$ L4 _5 c+ Q9 g8 I7 d8 p
  131. #define GPIO_AF9_QUADSPI      ((uint8_t)0x09)  /* QuadSPI Alternate Function mapping */
    ) h5 Q% Z3 b. n( f
  132. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */8 m: y: ]( a2 L. T
  133. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx)
      x( N- v& |5 @+ q# f, \! r
  134. #define GPIO_AF9_FMPI2C       ((uint8_t)0x09)  /* FMPI2C Alternate Function mapping (Only for STM32F410xx Devices) */* u- `$ k1 e! g" H! ~  T
  135. #endif /* STM32F410xx || STM32F412xG || STM32F413_423xx */
    2 c& n% P8 z" U" b" ~! Y

  136. # ?: V  A# b, ^* ?  H: K: z
  137. /** : u  @4 |6 B4 X
  138.   * @brief   AF 10 selection  . z+ O3 R5 O# g8 s
  139.   */ " a& j+ n) H/ s% T9 y* w% ~/ A- S
  140. #define GPIO_AF_OTG_FS         ((uint8_t)0xA)  /* OTG_FS Alternate Function mapping */
    , A8 F( \! H- q" O: j  v1 q
  141. #define GPIO_AF_OTG_HS         ((uint8_t)0xA)  /* OTG_HS Alternate Function mapping */' N0 {) P3 |8 B1 U8 E4 V9 T. P
  142. #if defined(STM32F446xx)) B, |' ~) d5 h4 t
  143. #define GPIO_AF10_SAI2         ((uint8_t)0x0A)  /* SAI2 Alternate Function mapping */
    / I: X6 D' N; `+ S
  144. #endif /* STM32F446xx */
      I4 G, l/ ]6 z' L  K/ S+ H8 g
  145. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)6 n! S# _. U1 y& y# U
  146. #define GPIO_AF10_QUADSPI      ((uint8_t)0x0A)  /* QuadSPI Alternate Function mapping */
    * |; D. x6 |( |: [: b0 C, D
  147. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */4 |/ A  |% H1 j! C
  148. #if defined(STM32F412xG) || defined(STM32F413_423xx)
    8 U/ R9 X# _7 \0 `
  149. #define GPIO_AF10_FMC           ((uint8_t)0xA)  /* FMC Alternate Function mapping    */
    , g1 \& c" K/ g% _% h
  150. #define GPIO_AF10_DFSDM1         ((uint8_t)0xA) /* DFSDM Alternate Function mapping  */
    ' \% C* Z  T& ^3 A- V& w' H" G8 I
  151. #endif /* STM32F412xG || STM32F413_423xx */
    % a  \- G0 K3 z# B% l# j, e
  152. #if defined(STM32F413_423xx)
    1 m! }6 v: V/ q- \
  153. #define GPIO_AF10_DFSDM2        ((uint8_t)0x0A)  /* DFSDM2 Alternate Function mapping */
    5 z; t# k( [- ~0 z! j
  154. #define GPIO_AF10_SAI1          ((uint8_t)0x0A)  /* SAI1 Alternate Function mapping   */! @; V8 W1 C# z7 k1 s# U) F8 _
  155. #endif /* STM32F413_423xx */" E! c4 e1 h5 i  p
  156. /**
    0 Z/ H; a7 a- S" x, N: c
  157.   * @brief   AF 11 selection  / V8 S0 K2 x1 |( F. r9 U8 N: B
  158.   */
    % e% _2 x5 f: Z# ~2 S% W
  159. #define GPIO_AF_ETH             ((uint8_t)0x0B)  /* ETHERNET Alternate Function mapping */
    9 C2 j9 L0 R1 ~5 i6 y0 L
  160. #if defined(STM32F413_423xx)
    / K/ c+ q& F8 \
  161. #define GPIO_AF11_UART4         ((uint8_t)0x0B)  /* UART4 Alternate Function mapping  */
    $ h/ g% [+ k; v1 q$ {( n( _
  162. #define GPIO_AF11_UART5         ((uint8_t)0x0B)  /* UART5 Alternate Function mapping  */
    8 _7 o5 }/ ^- ~2 c
  163. #define GPIO_AF11_UART9         ((uint8_t)0x0B)  /* UART9 Alternate Function mapping  */
    7 D- b; V. @( j. P; ]- z* N$ _
  164. #define GPIO_AF11_UART10        ((uint8_t)0x0B)  /* UART10 Alternate Function mapping */
    $ v5 e- O. M$ Y% ~( ~# M. m8 y
  165. #define GPIO_AF11_CAN3          ((uint8_t)0x0B)  /* CAN3 Alternate Function mapping   */9 [( \0 B, a5 {
  166. #endif /* STM32F413_423xx */
    + k6 `! q3 S) K- N
  167. ( h) o6 W- q* r( p6 I- ?
  168. /**
    . M' g5 u) R" D! w1 m
  169.   * @brief   AF 12 selection  
    # R! `# }4 y- K) h6 N
  170.   */
      I4 y* W* G$ C# L  d; o" H) |0 b% V
  171. #if defined(STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)
    $ [& k0 P( K1 _; U, W
  172. #define GPIO_AF_FSMC             ((uint8_t)0xC)  /* FSMC Alternate Function mapping                     */3 s  s' e4 `% U1 }" b* G; a
  173. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */  u# P3 d! h* P# \

  174. . }2 `* N9 K& j6 g$ ]- c
  175. #if defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F446xx) || defined(STM32F469_479xx)2 I  \' K* B4 z! F
  176. #define GPIO_AF_FMC              ((uint8_t)0xC)  /* FMC Alternate Function mapping                      */
    4 A( s  n& ]" Q; T' m6 p9 `( R
  177. #endif /* STM32F427_437xx || STM32F429_439xx || STM32F446xx || STM32F469_479xx */; e" z1 I* M2 G0 p3 V6 |; l
  178. ; \9 h: V" V+ w! z. A% y
  179. #define GPIO_AF_OTG_HS_FS        ((uint8_t)0xC)  /* OTG HS configured in FS, Alternate Function mapping */
    " w. R# |; q& I- t# \
  180. #define GPIO_AF_SDIO             ((uint8_t)0xC)  /* SDIO Alternate Function mapping                     */
    0 G: l. E6 S( S) X" A

  181. + }! Z( d1 ~3 c& h( n# w* ~9 p
  182. /**
    . i0 I9 @+ e; K/ g
  183.   * @brief   AF 13 selection  
    & D6 N# w5 o! e! h/ i2 R' b
  184.   */ / d8 C" F* W0 a0 q
  185. #define GPIO_AF_DCMI          ((uint8_t)0x0D)  /* DCMI Alternate Function mapping */( h, R( a  p9 i- O# Z6 `$ A* b
  186. #if defined(STM32F469_479xx), l( O7 @- P9 H# t/ h$ V2 `8 S
  187. #define GPIO_AF_DSI           ((uint8_t)0x0D)  /* DSI Alternate Function mapping *// T5 s: O/ f( v3 x# }
  188. #endif /* STM32F469_479xx */
    6 p, y$ l; C& T& S9 F! _( u
  189. /** 9 Y: m" _9 M2 M# k2 G% O
  190.   * @brief   AF 14 selection  
    . N3 H7 L3 C/ {
  191.   */
    * d8 m  l9 G# r$ o" j
  192. #define GPIO_AF_LTDC          ((uint8_t)0x0E)  /* LCD-TFT Alternate Function mapping */
    ' A5 P4 h0 p$ k+ k, ]$ s, H; N
  193. #if defined(STM32F413_423xx)9 n0 w7 p% c. E- b
  194. #define GPIO_AF14_RNG         ((uint8_t)0x0E)  /* RNG Alternate Function mapping  */7 w6 x5 r5 `+ X; i) ^9 M- a
  195. #endif /* STM32F413_423xx */, |2 B; H0 r5 S- P  C
  196. 2 g0 Q% d1 c! f# X
  197. /**
    , e' f9 s" t3 d6 ~- k: j
  198.   * @brief   AF 15 selection  
      f) g! m) g9 R6 e$ [5 W: Z
  199.   */
    . Z- d! I+ a& r& k
  200. #define GPIO_AF_EVENTOUT      ((uint8_t)0x0F)  /* EVENTOUT Alternate Function mapping */2 `% O- h5 T: i1 r
  201. # K/ S* d) S6 j: V
  202. #define IS_GPIO_AF(AF)   (((AF) == GPIO_AF_RTC_50Hz)  || ((AF) == GPIO_AF_TIM14)     || \% D% e/ z& `& ~% x
  203.                           ((AF) == GPIO_AF_MCO)       || ((AF) == GPIO_AF_TAMPER)    || \. D% E# E+ h* c# j, e
  204.                           ((AF) == GPIO_AF_SWJ)       || ((AF) == GPIO_AF_TRACE)     || \0 T* }$ ]& N6 U* `
  205.                           ((AF) == GPIO_AF_TIM1)      || ((AF) == GPIO_AF_TIM2)      || \
    9 `6 q8 h3 h& b8 z7 t  \: Z# J
  206.                           ((AF) == GPIO_AF_TIM3)      || ((AF) == GPIO_AF_TIM4)      || \+ u6 {6 w- j1 h: L* A$ W
  207.                           ((AF) == GPIO_AF_TIM5)      || ((AF) == GPIO_AF_TIM8)      || \
    ) v! S; P+ a/ G; E5 j2 ?; m
  208.                           ((AF) == GPIO_AF_I2C1)      || ((AF) == GPIO_AF_I2C2)      || \
    % s, f  `. P  G/ {$ Q2 ?
  209.                           ((AF) == GPIO_AF_I2C3)      || ((AF) == GPIO_AF_SPI1)      || \
    ! u0 T) T& T" v5 C* O
  210.                           ((AF) == GPIO_AF_SPI2)      || ((AF) == GPIO_AF_TIM13)     || \2 B# y0 S( Z& D1 A; `
  211.                           ((AF) == GPIO_AF_SPI3)      || ((AF) == GPIO_AF_TIM14)     || \( K- Z1 X8 K+ t/ X! Z% C
  212.                           ((AF) == GPIO_AF_USART1)    || ((AF) == GPIO_AF_USART2)    || \
    4 \+ s9 w. b" d  i! q" K5 o5 m" f: g
  213.                           ((AF) == GPIO_AF_USART3)    || ((AF) == GPIO_AF_UART4)     || \7 L# ^, p2 y  H
  214.                           ((AF) == GPIO_AF_UART5)     || ((AF) == GPIO_AF_USART6)    || \
    2 h( u7 c! ]) g  e5 ^' e) |
  215.                           ((AF) == GPIO_AF_CAN1)      || ((AF) == GPIO_AF_CAN2)      || \
    6 Y" Y$ o7 C& m& z' A  l! E# Z" D3 K
  216.                           ((AF) == GPIO_AF_OTG_FS)    || ((AF) == GPIO_AF_OTG_HS)    || \: A9 e) k1 r) U/ m
  217.                           ((AF) == GPIO_AF_ETH)       || ((AF) == GPIO_AF_OTG_HS_FS) || \: |( D) Z+ q+ d6 L) j2 y  m1 n
  218.                           ((AF) == GPIO_AF_SDIO)      || ((AF) == GPIO_AF_DCMI)      || \
    ( s0 e/ y/ D9 A$ @7 E6 m3 p4 e
  219.                           ((AF) == GPIO_AF_EVENTOUT)  || ((AF) == GPIO_AF_FSMC))0 D( G& z% j6 }. c9 O# U7 Y6 D
  220. #endif /* STM32F40_41xxx */
复制代码

  N- d  M9 u' A2 |6 a, R04. 函数) K) E4 F7 F9 c' l* b4 R- q, u& @$ E
GPIO复用功能函数6 N3 Y$ i; `& C. Q$ w7 @1 S! Y

2 u5 y$ N; E/ c
  1. /* GPIO Alternate functions configuration function ****************************/
    2 O0 V9 k/ p. l6 [7 F
  2. void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
复制代码
; a# N5 U+ U/ a. j( z
05. 参考示例  E, v. a1 R3 e8 D
串口配置
7 I' Z0 I) I" B+ I; j0 ^& E- U7 _& N1 W
  1. /*GPIOA9 与 GPIOA10 初始化*/7 p: B7 q& e" T( U6 j2 h# x
  2. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
    6 O. t% g) b" W* N6 @
  3. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;// 复用功能
    4 `9 K' a! o3 y8 N! l# f* S
  4. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz: _; p4 o( [7 v
  5. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
    * S4 b$ f: r, R3 ^  v
  6. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉1 H6 s: R: c; D2 L3 E) G) p  n$ m
  7. GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化 PA9,PA104 [  s% n+ z- y& P$ G$ h" A8 `; c
  8. - Z9 I5 j) t$ h, J* I# i3 P# X
  9. /*PA9 连接 AF7,复用为 USART1_TX */
    : O# x  O) P5 s" v, j! M: s
  10. GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);" c6 R6 k' k5 t
  11. /* PA10 连接 AF7,复用为 USART1_RX*/
    $ x' j2 _7 v* h: p6 q# k
  12. GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
复制代码

, T  T' U2 H* @" r9 r
* _! v+ Q7 M) r3 V  c' m  m  {' F% u8 q9 y* X4 d4 q8 b: u; o
赞 收藏 评论0 发布时间:2022-4-2 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版