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

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

[复制链接]
STMCU小助手 发布时间:2022-6-11 22:16
01. GPIO复用概述9 g: g" ]3 [6 U9 B6 s
STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 复用的。也就是说,一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。7 @. V! a/ N" [) t% A( {# h
8 p) u0 d1 P( E% F9 S
STM32F4 系列微控制器 IO 引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的 IO 口。这样可以确保共用同一个 IO 引脚的外设之间不会发生冲突。$ I6 ~: A( J3 i5 |$ A: F

# o6 t, Y$ i! D4 G# n# Y每个 IO 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0-7)和 GPIOx_AFRH(针对引脚 8-15)寄存器对这些输入进行配置,每四位控制一路复用1 Q+ f3 W/ i1 h4 C+ a. ^3 m1 O! I" Q
4 x. n' N" y0 @5 m6 v
1)完成复位后,所有 IO 都会连接到系统的复用功能 0(AF0)。  `( N" P# u8 I4 s6 ~6 H5 ]0 c8 h+ V
2)外设的复用功能映射到 AF1 到 AF13。6 k: i. Q9 W" g6 @
3)Cortex-M4 EVENTOUT 映射到 AF15。. v- m1 Q( S9 B* o
# i5 D, m. Y/ P' N) f8 f1 R6 H
S%{]$$IU_OY45{%VZJW}Y_A.png # Q" Q( [; @- i* |# K7 L
0 U2 U) Z' U+ g# }) I) C% f
02. 寄存器描述
: K* y9 `; t7 l' Y# u
探索者 STM32F407 开发板的原理图上 PC11 的原理图如图 所示:# S7 x8 T1 c& x- Q7 B/ ~

9 z# V- L0 |4 M$ V. K8 G2 X% H 20200821110906739.png ( X- o. A5 ~, D( f/ ]
8 |! d5 S9 f; [! j! b
PC11 可以作为 SPI3_MISO/U3_RX/U4_RX/SDIO_D3/DCMI_D4/I2S3ext_SD等复用功能输出,这么多复用功能,如果这些外设都开启了,那么对 STM32F1 来说,那就可能乱套了,外设之间可互相干扰,但是 STM32F4,由于有复用功能选择功能,可以让 PC11 仅连接到某个特定的外设,因此不存在互相干扰的情况。/ \0 F3 J" K3 @3 l, @. d

$ t/ p2 l' k  G5 U: F. s/ @& YGPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)

2 _8 }. ?8 U9 ?4 s& V4 ?GPIO alternate function low register# k' ]: w: i0 \7 X  _" _( Z
偏移地址:0x20
, M; u  z* _  |4 G1 p复位值:0x0000 0000
$ K9 k4 S2 Z" i0 S2 x) c3 `4 k5 P5 o1 U( m. x, f# O% D
][MABC$DEAS@LHFBCWZI447.png
4 ~' @4 x6 d% E+ M0 f! \0 B6 E, C/ f& r6 E
GPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)

' {5 o. j+ `. \% V1 }/ `GPIO alternate function high register
4 K0 Q+ x2 G8 w$ P4 K/ ~  e偏移地址:0x24! s1 c7 \7 I: r2 b5 j
复位值:0x0000 0000; {  a* M* {% J6 \  J0 T
: V3 S; B: F7 ], }- s/ z& P1 ~
J)FG0SHV$_(@IKCY[N]F0B9.png ! p$ k- M/ o. y+ @3 I% Z/ }& V

3 y/ [5 N7 Z( f在微控制器完成复位后,所有 IO 口都会连接到系统复用功能 0(AF0)。这里大家需要注意,对于系统复用功能 AF0,我们将 IO 口连接到 AF0 之后,还要根据所用功能进行配置:; j3 X6 Q1 E& q  D4 ]/ H
$ y3 Y" Y* Z8 m; Y8 l+ g' k) y0 v: `
1.JTAG/SWD:在器件复位之后,会将这些功能引脚指定为专用引脚。也就是说,这些引脚在复位后默认就是 JTAG/SWD 功能。如果我们要作为 GPIO 来使用,就需要对对应的 IO口复用器进行配置。* y! s* Q3 L8 g. T5 C

0 L# h  q0 N9 o% p2 Y0 d: [2.RTC_REFIN:此引脚在系统复位之后要使用的话要配置为浮空输入模式。
5 p2 `- R) e1 p/ F1 M
. _, w- q* ^0 N6 S3.MCO1 和 MCO2:这些引脚在系统复位之后要使用的话要配置为复用功能模式。
# E+ a, N) p9 ~  m9 i1 }9 U* W6 R% |, Z4 r: {' r/ K- c
03. 类型
% D& {$ {' A9 e; r0 V" p复用功能相关宏& w% x8 m0 l' M- I
: \5 R) h8 D$ x! d/ P
  1. /** ) P' |0 F5 F+ x1 r0 y' j* t
  2.   * @brief   AF 0 selection  * W! r  Y6 l3 Q1 h3 `
  3.   */ 4 ]& ?. [8 _  U+ y2 x) G
  4. #define GPIO_AF_RTC_50Hz      ((uint8_t)0x00)  /* RTC_50Hz Alternate Function mapping */
    , ?' B( {4 j! L( j1 Y" G
  5. #define GPIO_AF_MCO           ((uint8_t)0x00)  /* MCO (MCO1 and MCO2) Alternate Function mapping */. x8 e+ k9 `" p5 `
  6. #define GPIO_AF_TAMPER        ((uint8_t)0x00)  /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */% e) D( M$ ?$ D" _+ f1 f& {/ Q
  7. #define GPIO_AF_SWJ           ((uint8_t)0x00)  /* SWJ (SWD and JTAG) Alternate Function mapping */
    / d7 J5 }9 x  G. V8 _; [
  8. #define GPIO_AF_TRACE         ((uint8_t)0x00)  /* TRACE Alternate Function mapping */  }' |- W0 l, N* u* k& \; r- B
  9. #if defined(STM32F446xx)
    6 |6 e- [. A0 h; i4 h* g, [
  10. #define GPIO_AF0_TIM2         ((uint8_t)0x00)  /* TIM2 Alternate Function mapping */4 A6 j" c9 S3 }0 C$ H& [
  11. #endif /* STM32F446xx */
    . n  `- Y) j/ [

  12. + j3 ?7 N9 Q' @7 _/ X
  13. /**
    % f' X# P* D2 N9 R; l
  14.   * @brief   AF 1 selection  
    + L* Q* E0 W7 h8 Z% o
  15.   */ : r( S+ a0 |; n2 |; Z. ?  `, H! a% G( I
  16. #define GPIO_AF_TIM1          ((uint8_t)0x01)  /* TIM1 Alternate Function mapping */
    1 c6 n1 D$ H" x5 Z3 |/ C1 E2 o
  17. #define GPIO_AF_TIM2          ((uint8_t)0x01)  /* TIM2 Alternate Function mapping */5 S( U8 J5 P; I+ y, C
  18. #if defined(STM32F410xx) || defined(STM32F413_423xx)
    / X4 |- L8 g. V! @
  19. #define GPIO_AF_LPTIM         ((uint8_t)0x01)  /* LPTIM Alternate Function mapping */5 C  j3 n- h  c  G$ d, e/ m
  20. #endif /* STM32F410xx || STM32F413_423xx */0 ^% M4 ?; J: M6 X6 Z4 i( F
  21. /** , a; W0 F( H; q* b) b/ L6 R
  22.   * @brief   AF 2 selection  ) `9 ^# u. N8 P7 a7 |
  23.   */ % N4 Q$ R) V6 X0 o4 s' c& ~
  24. #define GPIO_AF_TIM3          ((uint8_t)0x02)  /* TIM3 Alternate Function mapping */6 ]; ?0 [' \% |: c# c& v( v
  25. #define GPIO_AF_TIM4          ((uint8_t)0x02)  /* TIM4 Alternate Function mapping */) a2 `" p1 E# ?0 B6 w1 t. g! p/ \
  26. #define GPIO_AF_TIM5          ((uint8_t)0x02)  /* TIM5 Alternate Function mapping */
    $ \# u# t3 l' F4 P7 G( x' j

  27. ; t- {; P* W- L  a2 I
  28. /**
    7 n% Y1 o( `" y" V7 B9 ^
  29.   * @brief   AF 3 selection  
    3 S! t- k. y1 y4 Q$ _
  30.   */
      L3 S% y& `5 H. E# a# D$ s
  31. #define GPIO_AF_TIM8          ((uint8_t)0x03)  /* TIM8 Alternate Function mapping */1 h7 h, g: G2 ^- S
  32. #define GPIO_AF_TIM9          ((uint8_t)0x03)  /* TIM9 Alternate Function mapping */
    7 e3 z- P1 t$ j/ S
  33. #define GPIO_AF_TIM10         ((uint8_t)0x03)  /* TIM10 Alternate Function mapping */
    1 d( `" g8 v9 `- l$ v
  34. #define GPIO_AF_TIM11         ((uint8_t)0x03)  /* TIM11 Alternate Function mapping */
    9 T  c& C) ]: M/ n% k; ^# t
  35. #if defined(STM32F446xx)
    - x& w) D( o2 @* [+ \/ i/ M4 k" {4 k
  36. #define GPIO_AF3_CEC          ((uint8_t)0x03)  /* CEC Alternate Function mapping */$ C% R: l* _2 V0 ~
  37. #endif /* STM32F446xx */
    : \* F3 C' {; [* F% ]7 M, g
  38. #if defined(STM32F413_423xx)
    2 [+ G* v* C0 V- Q) s6 t% V
  39. #define GPIO_AF3_DFSDM2       ((uint8_t)0x03)  /* DFSDM2 Alternate Function mapping */
    ) G- K2 [! z, U, I' X
  40. #endif /* STM32F413_423xx */
    ' Q% v" X, _4 d
  41. /**
    $ }' L5 ]5 a7 d, G6 `: F4 l9 [
  42.   * @brief   AF 4 selection  
    5 N5 k3 j1 H9 ^) r* ?- n
  43.   */ 7 o9 Q3 f4 x( G& f+ Q
  44. #define GPIO_AF_I2C1          ((uint8_t)0x04)  /* I2C1 Alternate Function mapping */
    ( u3 L, u5 T" g
  45. #define GPIO_AF_I2C2          ((uint8_t)0x04)  /* I2C2 Alternate Function mapping */
    . p$ j7 t$ `( ]3 j3 A
  46. #define GPIO_AF_I2C3          ((uint8_t)0x04)  /* I2C3 Alternate Function mapping */
    2 d4 v2 M4 l3 K, `) ]8 b, w
  47. #if defined(STM32F446xx)
    / Y3 i* D3 T9 Z8 N2 N4 Y* B
  48. #define GPIO_AF4_CEC          ((uint8_t)0x04)  /* CEC Alternate Function mapping */
    5 e2 `) O. W3 t& e
  49. #endif /* STM32F446xx */( W0 X0 f1 A* s* g' j
  50. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)
    2 ^5 N) Y; _) Q' ?6 v
  51. #define GPIO_AF_FMPI2C        ((uint8_t)0x04)  /* FMPI2C Alternate Function mapping */6 I1 }9 H: T8 w' Y  d# }
  52. #endif /* STM32F410xx || STM32F446xx */
    * z  F1 j6 y9 l9 @1 g8 d
  53. 9 A/ f: r. ^2 Y, j
  54. /**
    $ q" O, n( e# D# n
  55.   * @brief   AF 5 selection  
      l/ T! d( V7 V! D5 l
  56.   */ , O; t+ f- T: a1 a% A- l/ i) p
  57. #define GPIO_AF_SPI1          ((uint8_t)0x05)  /* SPI1/I2S1 Alternate Function mapping */
    ! @  K5 c9 d" W) w
  58. #define GPIO_AF_SPI2          ((uint8_t)0x05)  /* SPI2/I2S2 Alternate Function mapping */
    9 b1 L! ?* g3 N, M5 o
  59. #define GPIO_AF5_SPI3         ((uint8_t)0x05)  /* SPI3/I2S3 Alternate Function mapping (Only for STM32F411xE and STM32F413_423xx Devices) */5 D1 A3 d7 M3 [
  60. #define GPIO_AF_SPI4          ((uint8_t)0x05)  /* SPI4/I2S4 Alternate Function mapping */5 ^5 a9 j9 g: y. u5 |) K! t: p. v
  61. #define GPIO_AF_SPI5          ((uint8_t)0x05)  /* SPI5 Alternate Function mapping      */( r. c; w5 M# z( z( s" G/ h
  62. #define GPIO_AF_SPI6          ((uint8_t)0x05)  /* SPI6 Alternate Function mapping      */$ h0 N" K2 G9 W" j

  63. ! F, C0 ^. c. G" [0 ]
  64. /**
    & U# `" z  ?& }3 W: }8 ?) |7 I
  65.   * @brief   AF 6 selection  
    0 h; u- b1 A, x4 G# o3 ?
  66.   */ * U$ J& U' d8 i, ]3 W# `! K5 ^
  67. #define GPIO_AF_SPI3          ((uint8_t)0x06)  /* SPI3/I2S3 Alternate Function mapping */0 T( R5 x  V" E( P+ B9 Y# d. X
  68. #define GPIO_AF6_SPI1         ((uint8_t)0x06)  /* SPI1 Alternate Function mapping (Only for STM32F410xx Devices) */2 O, |8 G) N4 b# p7 P
  69. #define GPIO_AF6_SPI2         ((uint8_t)0x06)  /* SPI2 Alternate Function mapping (Only for STM32F410xx/STM32F411xE Devices) */5 f4 @& b% O% I7 a: |
  70. #define GPIO_AF6_SPI4         ((uint8_t)0x06)  /* SPI4 Alternate Function mapping (Only for STM32F411xE Devices) */) a. @' x. y8 [2 u( o5 Z! V' s! x  Y; R
  71. #define GPIO_AF6_SPI5         ((uint8_t)0x06)  /* SPI5 Alternate Function mapping (Only for STM32F410xx/STM32F411xE Devices) */
    $ K+ C8 O) I4 T" C
  72. #define GPIO_AF_SAI1          ((uint8_t)0x06)  /* SAI1 Alternate Function mapping      */3 B  Z# j, F2 o0 g
  73. #define GPIO_AF_I2S2ext       ((uint8_t)0x06)  /* I2S2ext_SD Alternate Function mapping (only for STM32F412xG and STM32F413_423xx Devices) */
    4 @/ ~$ M9 `  ^" a* Z9 @0 ]( }
  74. #if defined(STM32F412xG) || defined(STM32F413_423xx)" R# b) u8 K4 R
  75. #define GPIO_AF6_DFSDM1       ((uint8_t)0x06)  /* DFSDM1 Alternate Function mapping */: L: S/ a8 o) d% s3 G# T; b3 e
  76. #endif /* STM32F412xG || STM32F413_423xx */
    5 u' [% h# M5 [  G' t4 E3 N
  77. #if defined(STM32F413_423xx)3 r+ j" t* }$ O
  78. #define GPIO_AF6_DFSDM2       ((uint8_t)0x06)  /* DFSDM2 Alternate Function mapping */
    5 i8 `! i6 w) o5 B% @; Z8 H
  79. #endif /* STM32F413_423xx */0 Z% r. {+ D" F. B& ^

  80. " T; A% t( I/ g, m/ c
  81. /** 4 Z: T( B- j1 V/ v) C
  82.   * @brief   AF 7 selection  # l9 D( V5 o, s5 b2 W/ ^1 e: J
  83.   */ ' [" F% A  W; Y8 _# [; I$ y
  84. #define GPIO_AF_USART1         ((uint8_t)0x07)  /* USART1 Alternate Function mapping  */
    ! e( S2 J# {$ t
  85. #define GPIO_AF_USART2         ((uint8_t)0x07)  /* USART2 Alternate Function mapping  */
    8 u' m+ k$ u3 M  J8 w2 o# |
  86. #define GPIO_AF_USART3         ((uint8_t)0x07)  /* USART3 Alternate Function mapping  */! |1 _  w" p' E  s# B+ V
  87. #define GPIO_AF7_SPI3          ((uint8_t)0x07)  /* SPI3/I2S3ext Alternate Function mapping */
    ! e9 W' T- K- a! c0 K$ k
  88. #if defined(STM32F413_423xx)) i6 R( s- I- I3 z* x9 q- k
  89. #define GPIO_AF7_DFSDM2        ((uint8_t)0x07)  /* DFSDM2 Alternate Function mapping     */6 R. U( b' a! q1 b9 ~
  90. #define GPIO_AF7_SAI1          ((uint8_t)0x07)  /* SAI1 Alternate Function mapping       */. T/ j$ o& n1 a3 o- F1 {
  91. #endif /* STM32F413_423xx */9 }# F! ]; Y$ t. I/ d! r% s8 c4 `

  92. " l& I- o9 e! R, p9 ~. @. N8 R
  93. /**
    " O9 }4 |2 m/ ^/ C2 P; H$ |
  94.   * @brief   AF 7 selection Legacy
    ' p# I: [  D( |' Q; V" C- S6 M
  95.   */
    ( f, J: [# j) Z6 e  S
  96. #define GPIO_AF_I2S3ext   GPIO_AF7_SPI3- {/ a$ E  M% X6 o/ z" }* o

  97. 4 n, S8 K6 m" s+ `
  98. /**
    8 V' \) s/ [- P* k
  99.   * @brief   AF 8 selection  
    - r' s: {5 u) T; u$ Z6 x& U
  100.   */   W1 g  Q- Q1 W" N  S3 [/ u8 L
  101. #define GPIO_AF_UART4         ((uint8_t)0x08)  /* UART4 Alternate Function mapping  */
    4 N& T- z  C! C4 J& A
  102. #define GPIO_AF_UART5         ((uint8_t)0x08)  /* UART5 Alternate Function mapping  */
    * l8 O* M' t& g/ K+ s, u
  103. #define GPIO_AF_USART6        ((uint8_t)0x08)  /* USART6 Alternate Function mapping */7 H- c' ]% x7 s/ G
  104. #define GPIO_AF_UART7         ((uint8_t)0x08)  /* UART7 Alternate Function mapping  */6 y% M( b6 K( Y! F' i) g1 t
  105. #define GPIO_AF_UART8         ((uint8_t)0x08)  /* UART8 Alternate Function mapping  */
    & F2 g; p% M+ @4 f3 _5 f
  106. #if defined(STM32F412xG) || defined(STM32F413_423xx)3 k; R, c8 D2 u6 i$ Z. ~$ g
  107. #define GPIO_AF8_USART3        ((uint8_t)0x08)  /* USART3 Alternate Function mapping */
    ( k* {; D9 |' B( n" U# c$ H! ^) L
  108. #define GPIO_AF8_DFSDM1        ((uint8_t)0x08)  /* DFSDM Alternate Function mapping  */
    , |! B& l) _1 M8 ^/ L3 l' P
  109. #define GPIO_AF8_CAN1          ((uint8_t)0x08)  /* CAN1 Alternate Function mapping   */
    ! N# R1 O! H2 a' G- k' W" A& [
  110. #endif /* STM32F412xG || STM32F413_423xx *// }$ f; ^4 ^) Z% V* V/ L. e
  111. #if defined(STM32F446xx): ]3 B+ f  L/ _% K8 o$ Q9 k
  112. #define GPIO_AF8_SAI2          ((uint8_t)0x08)  /* SAI2 Alternate Function mapping */
      S! P) r8 O) |/ u8 [) g
  113. #define GPIO_AF_SPDIF         ((uint8_t)0x08)   /* SPDIF Alternate Function mapping */
    . o$ ^! a% L9 M) |4 F- U
  114. #endif /* STM32F446xx */9 x+ L2 F" b' Y! s1 O$ a: c( y

  115. : L, V+ U6 y9 H8 M
  116. /** - j* ~- o0 T2 o* k
  117.   * @brief   AF 9 selection
    % o" P' J1 N2 }) p
  118.   */
    * x& G8 c) j  u& Y' @# I
  119. #define GPIO_AF_CAN1          ((uint8_t)0x09)  /* CAN1 Alternate Function mapping  */
    - h- W6 @. \) i
  120. #define GPIO_AF_CAN2          ((uint8_t)0x09)  /* CAN2 Alternate Function mapping  */" g4 J$ l; K0 G" N8 o9 y
  121. #define GPIO_AF_TIM12         ((uint8_t)0x09)  /* TIM12 Alternate Function mapping */9 e7 [5 d* E% f1 a# q  M
  122. #define GPIO_AF_TIM13         ((uint8_t)0x09)  /* TIM13 Alternate Function mapping */
    - `2 w# Q) `' i$ d, u- w% j- b, q
  123. #define GPIO_AF_TIM14         ((uint8_t)0x09)  /* TIM14 Alternate Function mapping */
    8 _( a2 S3 ^  B
  124. #define GPIO_AF9_I2C2         ((uint8_t)0x09)  /* I2C2 Alternate Function mapping (Only for STM32F401xx/STM32F410xx/STM32F411xE/STM32F412xG/STM32F413_423xx Devices) */
    2 G4 I) M+ q' ^; @( b
  125. #define GPIO_AF9_I2C3         ((uint8_t)0x09)  /* I2C3 Alternate Function mapping (Only for STM32F401xx/STM32F411xE/STM32F412xG and STM32F413_423xx Devices) */1 d  ^4 }  X  v: o
  126. #if defined(STM32F446xx)
    ; L# |2 n+ p: O. s" Q2 H! y
  127. #define GPIO_AF9_SAI2         ((uint8_t)0x09)  /* SAI2 Alternate Function mapping */& Z! J& ^5 }" S- w3 j, f' C5 H
  128. #endif /* STM32F446xx */
    / J2 M1 U7 Z, t; E4 A) v
  129. #define GPIO_AF9_LTDC         ((uint8_t)0x09)  /* LTDC Alternate Function mapping */6 [- @$ T( `) [
  130. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)! o6 A8 e7 m0 _) T8 {
  131. #define GPIO_AF9_QUADSPI      ((uint8_t)0x09)  /* QuadSPI Alternate Function mapping */! a/ Q# k! V0 |! v) S  ^: ]
  132. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */. g( W/ p& q- _$ C. V
  133. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx)- \0 @: y- q0 v& C
  134. #define GPIO_AF9_FMPI2C       ((uint8_t)0x09)  /* FMPI2C Alternate Function mapping (Only for STM32F410xx Devices) */& c/ _" @, A7 m& R' I
  135. #endif /* STM32F410xx || STM32F412xG || STM32F413_423xx */9 ?9 j) R3 P! ^' ?! y" M/ f, l
  136. + @% P* Z3 ~  }1 R
  137. /**
    " o0 k2 S  i' I5 n1 r
  138.   * @brief   AF 10 selection  - j" z  b8 E& R: `) s( i
  139.   */ 1 c3 m* Y9 k: i) k7 ]$ s
  140. #define GPIO_AF_OTG_FS         ((uint8_t)0xA)  /* OTG_FS Alternate Function mapping */
    1 A; p% m5 O6 Q* ~7 z, f
  141. #define GPIO_AF_OTG_HS         ((uint8_t)0xA)  /* OTG_HS Alternate Function mapping */; m7 P+ f, _1 w5 ]8 q9 t' Z
  142. #if defined(STM32F446xx)
    # R: {) M" o$ F3 Q* d8 I
  143. #define GPIO_AF10_SAI2         ((uint8_t)0x0A)  /* SAI2 Alternate Function mapping */
    9 s% Y/ U" F# {/ y8 a) ^
  144. #endif /* STM32F446xx */) Q- t$ J- ]2 Q5 L+ \
  145. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)* |+ h0 w) {' \, \
  146. #define GPIO_AF10_QUADSPI      ((uint8_t)0x0A)  /* QuadSPI Alternate Function mapping */  l, z+ H. H3 c1 Q8 F
  147. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */2 `3 }  W5 @7 e: ~% m( L
  148. #if defined(STM32F412xG) || defined(STM32F413_423xx)) B3 \% l" A* U* \& L- n6 s
  149. #define GPIO_AF10_FMC           ((uint8_t)0xA)  /* FMC Alternate Function mapping    */# t0 m2 s6 B' W
  150. #define GPIO_AF10_DFSDM1         ((uint8_t)0xA) /* DFSDM Alternate Function mapping  */
    * j1 U5 _2 C# Z! H& ~- \
  151. #endif /* STM32F412xG || STM32F413_423xx */" X0 L9 d: Y! A7 E' j% A: P
  152. #if defined(STM32F413_423xx)
    5 l1 w" F* A1 y7 q, G
  153. #define GPIO_AF10_DFSDM2        ((uint8_t)0x0A)  /* DFSDM2 Alternate Function mapping */% k$ Z& c  j+ v0 }0 z
  154. #define GPIO_AF10_SAI1          ((uint8_t)0x0A)  /* SAI1 Alternate Function mapping   */( q3 r5 i( y  S0 G
  155. #endif /* STM32F413_423xx */
    8 Z$ B, z. p. R
  156. /** ( y0 T5 D, p. C- M# x! }9 v" E
  157.   * @brief   AF 11 selection  $ C; V/ w# y# W( N' ]! |
  158.   */ 0 Y9 N5 j4 U: P6 M5 O8 ^
  159. #define GPIO_AF_ETH             ((uint8_t)0x0B)  /* ETHERNET Alternate Function mapping */
    , Q* [7 l1 `6 B  C( V
  160. #if defined(STM32F413_423xx)
    8 [' c  T; H5 O- t# t% B
  161. #define GPIO_AF11_UART4         ((uint8_t)0x0B)  /* UART4 Alternate Function mapping  */
    8 J. U: F6 M9 v, G$ i- w
  162. #define GPIO_AF11_UART5         ((uint8_t)0x0B)  /* UART5 Alternate Function mapping  */
    - v* y* \/ L. ?/ Z5 R* q
  163. #define GPIO_AF11_UART9         ((uint8_t)0x0B)  /* UART9 Alternate Function mapping  */% I# `6 p5 m4 U+ c, D3 y
  164. #define GPIO_AF11_UART10        ((uint8_t)0x0B)  /* UART10 Alternate Function mapping */8 w! C! g6 s. s1 K5 v
  165. #define GPIO_AF11_CAN3          ((uint8_t)0x0B)  /* CAN3 Alternate Function mapping   */
    5 f" p5 x  e& M1 I
  166. #endif /* STM32F413_423xx */* X  D! S: P- g& t

  167. ' M! b" q6 m7 R" _2 u: q1 \
  168. /** , I1 x% z) J/ t4 d0 g" Q9 x
  169.   * @brief   AF 12 selection  5 }* O$ ~0 X; P5 e! a' M* ^
  170.   */
    - f! I2 B4 f# g
  171. #if defined(STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)5 {6 ?1 R# _+ X' b2 q. ~
  172. #define GPIO_AF_FSMC             ((uint8_t)0xC)  /* FSMC Alternate Function mapping                     */
    & N8 H) b% J4 y: N* o
  173. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */
    ) [. s1 |+ K2 c: n0 U; e' F

  174. 3 B( k! t: P& I2 {1 X7 F
  175. #if defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F446xx) || defined(STM32F469_479xx)/ y8 f8 }8 e+ ~: t3 t8 A# E  B
  176. #define GPIO_AF_FMC              ((uint8_t)0xC)  /* FMC Alternate Function mapping                      */% H4 B" G  S% O5 E, X  d
  177. #endif /* STM32F427_437xx || STM32F429_439xx || STM32F446xx || STM32F469_479xx */
    ; w' H8 W  \2 b3 G6 K

  178. 8 h+ Q! t* e; ~
  179. #define GPIO_AF_OTG_HS_FS        ((uint8_t)0xC)  /* OTG HS configured in FS, Alternate Function mapping */
    4 i) J& f0 e  b# x8 X! j
  180. #define GPIO_AF_SDIO             ((uint8_t)0xC)  /* SDIO Alternate Function mapping                     */' r4 Q7 V# }8 P" f
  181. 9 q8 b2 s& b! c
  182. /**   _( w. d! j, E( o4 C
  183.   * @brief   AF 13 selection  4 I1 M/ z& F9 j! r+ Y# g2 h6 s/ |
  184.   */
    5 i1 V! }5 u' M5 p) {# @
  185. #define GPIO_AF_DCMI          ((uint8_t)0x0D)  /* DCMI Alternate Function mapping *// _% l( z  n) _, y% w$ g& b' N5 C
  186. #if defined(STM32F469_479xx)
    : ~" B4 |+ ?/ y: z! S
  187. #define GPIO_AF_DSI           ((uint8_t)0x0D)  /* DSI Alternate Function mapping */- |, T- Y0 f9 B3 \6 W  L0 z1 S
  188. #endif /* STM32F469_479xx */4 V/ ^0 D7 f8 `1 k; d  c
  189. /** # U- A4 n9 S0 A% ?3 ]7 E- `/ Q, h
  190.   * @brief   AF 14 selection  - j# z5 j  z, Q6 U
  191.   */3 c9 r7 H9 x; q: r. c
  192. #define GPIO_AF_LTDC          ((uint8_t)0x0E)  /* LCD-TFT Alternate Function mapping */% Z' z) |8 c2 O' B3 G0 Q4 I
  193. #if defined(STM32F413_423xx), f2 M7 x0 X. V6 ~( c8 S
  194. #define GPIO_AF14_RNG         ((uint8_t)0x0E)  /* RNG Alternate Function mapping  */6 ^/ d$ s& ?% T
  195. #endif /* STM32F413_423xx */
    ! I8 f% S. i  G4 i3 [* |

  196. 1 \9 R$ r& G8 z
  197. /** 1 \5 @# R3 E, x. s3 R7 H! o/ }
  198.   * @brief   AF 15 selection  
    8 L3 E& ~) U) ]% x0 @
  199.   */
    0 W: A8 A" V  T' Q# i! X1 [
  200. #define GPIO_AF_EVENTOUT      ((uint8_t)0x0F)  /* EVENTOUT Alternate Function mapping *// Y- L, n# x) W

  201. 3 L, x7 @8 }7 `9 `' I( T
  202. #define IS_GPIO_AF(AF)   (((AF) == GPIO_AF_RTC_50Hz)  || ((AF) == GPIO_AF_TIM14)     || \9 ]3 p, U- S7 V9 ~) h
  203.                           ((AF) == GPIO_AF_MCO)       || ((AF) == GPIO_AF_TAMPER)    || \
    0 H; }/ G8 q9 J
  204.                           ((AF) == GPIO_AF_SWJ)       || ((AF) == GPIO_AF_TRACE)     || \
    7 M( t$ @8 a8 e
  205.                           ((AF) == GPIO_AF_TIM1)      || ((AF) == GPIO_AF_TIM2)      || \
    - O8 u( V# n: F( m% l
  206.                           ((AF) == GPIO_AF_TIM3)      || ((AF) == GPIO_AF_TIM4)      || \
    & M- y, x1 k. v
  207.                           ((AF) == GPIO_AF_TIM5)      || ((AF) == GPIO_AF_TIM8)      || \
    : m7 e1 ^' {! J: _
  208.                           ((AF) == GPIO_AF_I2C1)      || ((AF) == GPIO_AF_I2C2)      || \( Q, h2 v% E" F% B5 U
  209.                           ((AF) == GPIO_AF_I2C3)      || ((AF) == GPIO_AF_SPI1)      || \- f/ L6 \3 j$ h* K7 B% ~4 t
  210.                           ((AF) == GPIO_AF_SPI2)      || ((AF) == GPIO_AF_TIM13)     || \# W2 c7 H  D5 L7 `2 h/ W- l
  211.                           ((AF) == GPIO_AF_SPI3)      || ((AF) == GPIO_AF_TIM14)     || \" w' e4 W$ L) f" f% O- q* u: J
  212.                           ((AF) == GPIO_AF_USART1)    || ((AF) == GPIO_AF_USART2)    || \
    # H6 i0 t, d6 P7 E& I- ?
  213.                           ((AF) == GPIO_AF_USART3)    || ((AF) == GPIO_AF_UART4)     || \) ~& ]7 u) W3 @% i& y
  214.                           ((AF) == GPIO_AF_UART5)     || ((AF) == GPIO_AF_USART6)    || \' I' `5 ]* Y4 ]. u* M
  215.                           ((AF) == GPIO_AF_CAN1)      || ((AF) == GPIO_AF_CAN2)      || \: e5 V! e% N8 N& ~" [
  216.                           ((AF) == GPIO_AF_OTG_FS)    || ((AF) == GPIO_AF_OTG_HS)    || \
    8 L9 X0 u2 g; O* I4 e$ P
  217.                           ((AF) == GPIO_AF_ETH)       || ((AF) == GPIO_AF_OTG_HS_FS) || \
    & a. w. u; l+ n5 e1 u
  218.                           ((AF) == GPIO_AF_SDIO)      || ((AF) == GPIO_AF_DCMI)      || \: U9 ?+ \4 [: t* L) c
  219.                           ((AF) == GPIO_AF_EVENTOUT)  || ((AF) == GPIO_AF_FSMC))
    3 _% A# P8 f& x0 B* t4 n
  220. #endif /* STM32F40_41xxx */
复制代码

+ e. w4 N, }% b5 ^* Y; s04. 函数% R6 V2 @- l) |
GPIO复用功能函数
8 l4 M& l& n& X/ U- L5 _% J5 u1 c' c7 n2 v7 Z
  1. /* GPIO Alternate functions configuration function ****************************/5 j* E' \: j& S0 X. H2 k$ `
  2. void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
复制代码
1 A# n7 r9 n7 H) }9 T) T: i/ U8 W
05. 参考示例

7 X9 q6 _! g' k6 Z& n! H) i/ W/ ^串口配置; a( l. @; d" T7 N. O" [( K; u
/ s$ h: E% b; i" N
  1. /*GPIOA9 与 GPIOA10 初始化*/
    2 D0 M) u3 q2 a, P
  2. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
    & S4 R+ P5 A! H
  3. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;// 复用功能1 t  t; g4 B% ^# l
  4. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz
    % I' j7 F2 `: \1 C' `
  5. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出2 y* q/ K6 h3 m$ u/ T; k/ L
  6. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉" ?/ u$ v* V: G. x" d# @
  7. GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化 PA9,PA10
    , y' T; ~5 |: c. ?% u! U
  8. , d- g. c8 S5 S8 X( C8 i; C
  9. /*PA9 连接 AF7,复用为 USART1_TX */1 b- Z+ _9 I' k! B
  10. GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
    # b# v& [9 B1 ?) M: o' j
  11. /* PA10 连接 AF7,复用为 USART1_RX*/
    6 ?. ~: ?6 Y9 ^! B7 d8 [' V8 X8 p
  12. GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
复制代码
  l: |( V/ e8 }( W( e+ b: E, U
& j- P8 l( D7 B
7 m& q, D& I' r4 \; k) H( b
收藏 评论0 发布时间:2022-6-11 22:16

举报

0个回答

所属标签

相似分享

官网相关资源

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