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

【经验分享】STM32 ADC相关函数和类型

[复制链接]
STMCU小助手 发布时间:2022-3-30 11:00
01. ADC概述
) N8 A; d9 s: e4 hSTM32F4xx 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32F4 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 19 个通道,可测量 16 个外部源、2 个内部源和 Vbat 通道的信号。这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。# Q" j; V0 R4 Y" K' v  a3 r* {% f4 q

6 W' p4 L* U. s相关文件为 stm32f4xx_adc.h和 stm32f4xx_adc.c。6 \. f# l; _9 {/ ?# H& `
% z- x: h  f+ ^4 C# b. q. F
02. 相关类型# {5 j* ^% X$ M3 B4 m. p
  1. /**
    $ t, h  i, A6 p6 t
  2.   * @brief   ADC Init structure definition  6 Y4 W  _; s1 v6 y2 l! w' n
  3.   */ ' J3 {) E" ]2 B2 ^8 e% p! s
  4. typedef struct
    * h; Y% p  N' j; W
  5. {' [* L+ g" r+ g7 ~1 q
  6.   uint32_t ADC_Resolution;                /*!< Configures the ADC resolution dual mode.
    / a, M; B* d4 c7 v- {4 J
  7.                                                This parameter can be a value of @ref ADC_resolution */                                   
    . ^7 S% C- D2 J% z; |7 t$ {: ]
  8.   FunctionalState ADC_ScanConvMode;       /*!< Specifies whether the conversion
    . p  ~! b& g( y* R' k+ ~
  9.                                                is performed in Scan (multichannels)
    ; \8 V2 l; v. h* M" |% T
  10.                                                or Single (one channel) mode.5 n$ Y4 O- \, i% R
  11.                                                This parameter can be set to ENABLE or DISABLE */
    1 ]& H6 b! X5 ~+ V
  12.   FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion
    ; N7 x* u. J& M3 o$ T+ V% |9 T
  13.                                                is performed in Continuous or Single mode.9 ~9 F' _& S4 r! c) i# g
  14.                                                This parameter can be set to ENABLE or DISABLE. */
    3 \& o  M) g" y. ]( y9 ^; b
  15.   uint32_t ADC_ExternalTrigConvEdge;      /*!< Select the external trigger edge and* u( q6 x) a9 j* ?1 a
  16.                                                enable the trigger of a regular group. 2 b8 e4 o- z8 [1 q# K) r
  17.                                                This parameter can be a value of 6 g& L6 N5 c3 o( n
  18.                                                @ref ADC_external_trigger_edge_for_regular_channels_conversion *// D5 v( p8 r% `! G
  19.   uint32_t ADC_ExternalTrigConv;          /*!< Select the external event used to trigger
    ' h3 A& n) T- n  u8 h0 @5 J
  20.                                                the start of conversion of a regular group.
      d1 a& q: p. N; `' o( O; ^
  21.                                                This parameter can be a value of
    + c6 \8 C, N$ x4 n  v$ S
  22.                                                @ref ADC_extrenal_trigger_sources_for_regular_channels_conversion */9 J5 G. z9 W/ a& N( _1 H
  23.   uint32_t ADC_DataAlign;                 /*!< Specifies whether the ADC data  alignment
    % D! X8 |% ^/ {7 w' Q$ h  T) @
  24.                                                is left or right. This parameter can be ( [; T+ y0 p; T, {3 J& C9 o
  25.                                                a value of @ref ADC_data_align */
    & D" ?6 H8 V$ p
  26.   uint8_t  ADC_NbrOfConversion;           /*!< Specifies the number of ADC conversions
    4 D; A- L1 S6 K) E+ p6 Z9 W
  27.                                                that will be done using the sequencer for; u  Y3 b% }9 ]4 W5 S
  28.                                                regular channel group.' u9 Z) e" S! I3 M* j+ L1 O7 A
  29.                                                This parameter must range from 1 to 16. */) U2 k; z) C+ x" w( C
  30. }ADC_InitTypeDef;( a" _0 d, x" V8 q* s2 U; ?' S

  31. + j" q' W. c8 x4 z8 |0 _
  32. /**
    6 y2 n% s* R: T0 ?- r. x
  33.   * @brief   ADC Common Init structure definition  
    / c, i- a5 Q& B, w
  34.   */ ! n& D# ^" q( a
  35. typedef struct
    8 H' m4 b7 B/ O" N2 d# t  f3 Q, b6 x
  36. {2 G, w* [7 z3 E, @
  37.   uint32_t ADC_Mode;                      /*!< Configures the ADC to operate in ) a# q! T9 w; W. a- D# v
  38.                                                independent or multi mode.
    " M; c0 @) p, I5 ^" L4 x
  39.                                                This parameter can be a value of @ref ADC_Common_mode */                                             
    + j2 \% @+ [0 W6 y4 I
  40.   uint32_t ADC_Prescaler;                 /*!< Select the frequency of the clock * d1 V( `4 F% L/ |% y' v# g# @
  41.                                                to the ADC. The clock is common for all the ADCs.4 B2 I) y$ V: P1 ?  d$ t
  42.                                                This parameter can be a value of @ref ADC_Prescaler */
    " U9 G' A# i2 V  S# z0 d% |
  43.   uint32_t ADC_DMAAccessMode;             /*!< Configures the Direct memory access ) |6 H5 L. ^) G9 g- k2 L
  44.                                               mode for multi ADC mode.
    % K# }& @' i7 V* J/ d+ o
  45.                                                This parameter can be a value of ( [$ P' U$ _, V) C8 z! o' s
  46.                                                @ref ADC_Direct_memory_access_mode_for_multi_mode */
    6 K3 T' M4 }. K
  47.   uint32_t ADC_TwoSamplingDelay;          /*!< Configures the Delay between 2 sampling phases.
    8 X2 |; P& C$ F; _+ f  U. k
  48.                                                This parameter can be a value of
      f7 s8 p& @7 z2 e/ u! a
  49.                                                @ref ADC_delay_between_2_sampling_phases */
    ' s3 r/ k% S' y7 y8 ^+ {
  50. , ^0 o8 k: U( O1 O+ Z. t  \
  51. }ADC_CommonInitTypeDef;0 W* k+ N3 ]* K4 D- D

  52. # h! x, s4 _  v7 V
  53. 1 @: K% w+ ^" X0 F! O
  54. /* Exported constants --------------------------------------------------------*/* T: s0 ^! _* e# L
  55. 0 o( j' D3 O; a! k" n* r. F
  56. /** @defgroup ADC_Exported_Constants# n9 A! U+ h# @2 J$ c
  57.   * @{1 h' ^% R7 S8 `1 \5 X
  58.   */ . i+ B' q3 p; e9 b
  59. #define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \
    5 r2 t$ K4 `( \9 {; |, |
  60.                                    ((PERIPH) == ADC2) || \
    6 F5 W# B  M* R, V) _( [& ]
  61.                                    ((PERIPH) == ADC3))  $ v0 o: q  S' _: }' T

  62. 5 f/ a4 B# H. }' ^5 s* ?  g
  63. /** @defgroup ADC_Common_mode # W. p: {: s! O" C; u8 z' a* R* I+ ~
  64.   * @{; V" g! [9 X, C9 \
  65.   */
    ; K. [6 F' O' Y. C$ q) m" j4 d- t
  66. #define ADC_Mode_Independent                       ((uint32_t)0x00000000)       ; `! F9 _1 s$ e* e# ]
  67. #define ADC_DualMode_RegSimult_InjecSimult         ((uint32_t)0x00000001)
    , v8 p' N( C7 }2 n5 r5 v( S
  68. #define ADC_DualMode_RegSimult_AlterTrig           ((uint32_t)0x00000002)
    9 ?$ w# o5 v, E# W1 |. v
  69. #define ADC_DualMode_InjecSimult                   ((uint32_t)0x00000005)
    # Y8 u& _+ f, [. g% n
  70. #define ADC_DualMode_RegSimult                     ((uint32_t)0x00000006)
    , g8 j4 z& W' g5 |
  71. #define ADC_DualMode_Interl                        ((uint32_t)0x00000007)
    0 w  z/ k/ I# |
  72. #define ADC_DualMode_AlterTrig                     ((uint32_t)0x00000009)
    - E. w* ]/ p6 C2 F! l) J; B
  73. #define ADC_TripleMode_RegSimult_InjecSimult       ((uint32_t)0x00000011)
    0 }7 O( U( A5 c4 ?  R
  74. #define ADC_TripleMode_RegSimult_AlterTrig         ((uint32_t)0x00000012)$ Z5 ^. V4 \. [+ m$ b4 d( j& ^2 r. m
  75. #define ADC_TripleMode_InjecSimult                 ((uint32_t)0x00000015)' J' j. a# @' y2 ^9 ^3 V4 V7 b
  76. #define ADC_TripleMode_RegSimult                   ((uint32_t)0x00000016), o+ A! o) {" N0 r6 Y0 G  c
  77. #define ADC_TripleMode_Interl                      ((uint32_t)0x00000017)+ w5 k" H6 j7 ?' i' t8 c# `
  78. #define ADC_TripleMode_AlterTrig                   ((uint32_t)0x00000019)5 c; A% Y( d6 t4 c
  79. #define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \9 ^- K8 |) U0 ?/ l+ W
  80.                            ((MODE) == ADC_DualMode_RegSimult_InjecSimult) || \7 \2 c' [4 M7 a# {# g0 a; r
  81.                            ((MODE) == ADC_DualMode_RegSimult_AlterTrig) || \
    + M% m  J# _, E( E( X
  82.                            ((MODE) == ADC_DualMode_InjecSimult) || \; ]0 K8 H& _6 E& n/ S, e& C
  83.                            ((MODE) == ADC_DualMode_RegSimult) || \+ u4 f! W4 o( r1 L) y) X
  84.                            ((MODE) == ADC_DualMode_Interl) || \
    4 U6 x4 D1 T( Y& n! Q; K
  85.                            ((MODE) == ADC_DualMode_AlterTrig) || \1 e5 ?& p2 o6 j% u3 F  d
  86.                            ((MODE) == ADC_TripleMode_RegSimult_InjecSimult) || \
    7 {* Y- q) O+ |8 ~, D, D
  87.                            ((MODE) == ADC_TripleMode_RegSimult_AlterTrig) || \! n& q, F* C7 l4 _" E$ N) K
  88.                            ((MODE) == ADC_TripleMode_InjecSimult) || \
    2 [! c- o2 H  Q# N9 A3 y  g% V# U  B5 H
  89.                            ((MODE) == ADC_TripleMode_RegSimult) || \& }8 g+ U7 ^5 h+ ]* F4 I/ |4 Y2 U
  90.                            ((MODE) == ADC_TripleMode_Interl) || \
    0 v8 b8 y1 c7 C7 K! w1 f, K! V
  91.                            ((MODE) == ADC_TripleMode_AlterTrig)), x) Q0 f- T* ?# Z
  92. /**8 a9 A5 J3 d7 J. p3 z8 a
  93.   * @}, p/ W3 d7 w1 o
  94.   */
    8 `' o3 R7 y" a# E. X
  95. * u& U/ g+ ?9 e2 J
  96.   E  u% H5 n% l1 H: b2 c7 b+ D: C6 N/ ]
  97. /** @defgroup ADC_Prescaler - t+ P6 j" [' H
  98.   * @{6 c- \6 W. X" X$ i
  99.   */
    ! F- Y) R- ~) U* D$ E# n* Z4 G$ C- w
  100. #define ADC_Prescaler_Div2                         ((uint32_t)0x00000000)
    % w2 l- ]/ q& @  m' X
  101. #define ADC_Prescaler_Div4                         ((uint32_t)0x00010000)
    & i2 F2 k9 h. g: H1 ~5 v1 E8 v
  102. #define ADC_Prescaler_Div6                         ((uint32_t)0x00020000)0 i5 I5 `& }- U8 r. y
  103. #define ADC_Prescaler_Div8                         ((uint32_t)0x00030000)* A9 @9 j; N& R* a0 \2 w
  104. #define IS_ADC_PRESCALER(PRESCALER) (((PRESCALER) == ADC_Prescaler_Div2) || \
    ( T5 H) _  V: Z8 _" f5 f( j* B: l! B
  105.                                      ((PRESCALER) == ADC_Prescaler_Div4) || \
    7 c& e* f9 }: F' g: W
  106.                                      ((PRESCALER) == ADC_Prescaler_Div6) || \
    $ t+ U, }$ [7 o
  107.                                      ((PRESCALER) == ADC_Prescaler_Div8))
    4 b" C' D# n9 D1 `0 W5 w, W8 ~
  108. /**2 n" v0 r) W0 |* j0 d0 _* S: D
  109.   * @}" r( i0 D. _( E$ n& i
  110.   */ 0 F, |+ F0 Z& B9 Z  Y4 g8 _( E  {

  111. 6 l8 `( Y+ k  U9 }5 U" w7 x
  112. ; m5 I/ A. l0 I! U
  113. /** @defgroup ADC_Direct_memory_access_mode_for_multi_mode
    6 y4 Y( m; q; y% g8 E% f, l- k
  114.   * @{, Q* \! W9 {. p" P8 _5 v
  115.   */ ; C0 v( f4 w3 n; D( X; u
  116. #define ADC_DMAAccessMode_Disabled      ((uint32_t)0x00000000)     /* DMA mode disabled */
    9 i* G4 J. [2 C! y! b, @' F
  117. #define ADC_DMAAccessMode_1             ((uint32_t)0x00004000)     /* DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)*/# n% `$ l1 _" {9 m
  118. #define ADC_DMAAccessMode_2             ((uint32_t)0x00008000)     /* DMA mode 2 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2)*/% _5 Q5 l9 z' p
  119. #define ADC_DMAAccessMode_3             ((uint32_t)0x0000C000)     /* DMA mode 3 enabled (2 / 3 bytes by pairs - 2&1 then 1&3 then 3&2) */
    / R6 e# W0 e! r0 N9 `; K0 L, O
  120. #define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAAccessMode_Disabled) || \
    - F  O+ O# @2 G: O1 j  b
  121.                                       ((MODE) == ADC_DMAAccessMode_1) || \+ U+ {" A) `& X  y! d; |
  122.                                       ((MODE) == ADC_DMAAccessMode_2) || \) V% }$ R$ |5 A/ n$ Z4 b
  123.                                       ((MODE) == ADC_DMAAccessMode_3))# c: w/ z% Y2 K4 N- k" _, i& g

  124. . K2 J$ o1 Q7 w. |4 d
  125. /**
    ' ]3 n$ D" Q7 F6 F' i/ S1 t# s
  126.   * @}8 f: M. }8 s5 Z- o, O
  127.   */ $ m9 V0 t  l  \8 N

  128. ' W# J" H  ?# q/ q1 h4 q6 `/ l( x

  129. 0 r( [5 C: c' M4 ]7 o1 g
  130. /** @defgroup ADC_delay_between_2_sampling_phases
    + ]  ]5 t' G. p2 C
  131.   * @{5 q* u( G* U0 S0 C& r
  132.   */
    6 M4 ?6 U% \8 A2 I( K7 m; o& y/ Y
  133. #define ADC_TwoSamplingDelay_5Cycles               ((uint32_t)0x00000000)
    % y; H1 z: p/ u3 H$ I( i
  134. #define ADC_TwoSamplingDelay_6Cycles               ((uint32_t)0x00000100)
    . I; J' r- S2 E
  135. #define ADC_TwoSamplingDelay_7Cycles               ((uint32_t)0x00000200)
    / E9 H' Q, l/ p* W: D0 J# J
  136. #define ADC_TwoSamplingDelay_8Cycles               ((uint32_t)0x00000300)
    3 s- [4 x5 u+ f9 E+ Y
  137. #define ADC_TwoSamplingDelay_9Cycles               ((uint32_t)0x00000400)
      u6 H% W" \+ Q6 C! \  _8 T7 j
  138. #define ADC_TwoSamplingDelay_10Cycles              ((uint32_t)0x00000500)3 l, n( I, V% [2 H! O  V
  139. #define ADC_TwoSamplingDelay_11Cycles              ((uint32_t)0x00000600)
    2 I4 I/ R7 ^0 n/ Z
  140. #define ADC_TwoSamplingDelay_12Cycles              ((uint32_t)0x00000700)- L2 e/ U" Y. O- R1 o
  141. #define ADC_TwoSamplingDelay_13Cycles              ((uint32_t)0x00000800)4 m- k  V. N7 K8 m  o) y. o6 f
  142. #define ADC_TwoSamplingDelay_14Cycles              ((uint32_t)0x00000900)
    & b9 T$ E8 \: L% i
  143. #define ADC_TwoSamplingDelay_15Cycles              ((uint32_t)0x00000A00)  }5 e) N6 ^8 c( x6 k% Y
  144. #define ADC_TwoSamplingDelay_16Cycles              ((uint32_t)0x00000B00)
    , J6 a2 _% B6 D* a/ f! U7 e
  145. #define ADC_TwoSamplingDelay_17Cycles              ((uint32_t)0x00000C00)2 ~$ A, e& i7 h  L1 J' G# m5 s( I
  146. #define ADC_TwoSamplingDelay_18Cycles              ((uint32_t)0x00000D00)
    / T& V' i! M1 X' V
  147. #define ADC_TwoSamplingDelay_19Cycles              ((uint32_t)0x00000E00)$ B+ C! w2 l# b/ @; a
  148. #define ADC_TwoSamplingDelay_20Cycles              ((uint32_t)0x00000F00)
      T/ V+ r2 t2 @# z) h
  149. #define IS_ADC_SAMPLING_DELAY(DELAY) (((DELAY) == ADC_TwoSamplingDelay_5Cycles) || \$ X& v( X5 C* e+ ~4 R
  150.                                       ((DELAY) == ADC_TwoSamplingDelay_6Cycles) || \* M* @3 i$ n* X: u: }1 {
  151.                                       ((DELAY) == ADC_TwoSamplingDelay_7Cycles) || \
    * O5 ^" U( A4 s, G* J3 {
  152.                                       ((DELAY) == ADC_TwoSamplingDelay_8Cycles) || \
    ; H: F" m7 ]  C# K  O3 e+ Q: _
  153.                                       ((DELAY) == ADC_TwoSamplingDelay_9Cycles) || \% g* O1 |# q: e( s7 _
  154.                                       ((DELAY) == ADC_TwoSamplingDelay_10Cycles) || \
    9 D6 w0 l" y& M4 X; }
  155.                                       ((DELAY) == ADC_TwoSamplingDelay_11Cycles) || \
    ( @( d; m( u2 f( m+ Q
  156.                                       ((DELAY) == ADC_TwoSamplingDelay_12Cycles) || \
    # K5 b% i* `7 Z7 v4 T6 M9 W/ a
  157.                                       ((DELAY) == ADC_TwoSamplingDelay_13Cycles) || \
    % P# x( q0 e# j4 A2 u  D
  158.                                       ((DELAY) == ADC_TwoSamplingDelay_14Cycles) || \- A3 t" g) C0 d0 B$ B
  159.                                       ((DELAY) == ADC_TwoSamplingDelay_15Cycles) || \- G$ R; {( @/ R" c0 x) s2 _
  160.                                       ((DELAY) == ADC_TwoSamplingDelay_16Cycles) || \# ~6 d- D! z$ N4 N7 P: j) o  {+ y
  161.                                       ((DELAY) == ADC_TwoSamplingDelay_17Cycles) || \& ~) r* t/ }+ p. k- u
  162.                                       ((DELAY) == ADC_TwoSamplingDelay_18Cycles) || \
    " ^/ G* j+ s! p% B
  163.                                       ((DELAY) == ADC_TwoSamplingDelay_19Cycles) || \9 s  g; w. h+ C7 @
  164.                                       ((DELAY) == ADC_TwoSamplingDelay_20Cycles))  p7 ^. A$ X0 K& i! n8 w

  165. 6 o2 g; j- P( ?3 [3 Q. a
  166. /**# }6 ^2 }& \" P4 a" ]
  167.   * @}
    . A9 S! a) q, h3 Y, \+ h; H
  168.   */ 4 i; o7 F4 a$ Y7 @' Z5 C
  169. ; q& f: G6 B+ ?7 w  X
  170. ) ]) n6 Q" G: {( {7 J/ l* B! V
  171. /** @defgroup ADC_resolution # A# o, c! K- w& i
  172.   * @{: D  }: V) v( {8 y7 M8 L% ^
  173.   */ 5 n. q7 \: o, ?0 \4 o
  174. #define ADC_Resolution_12b                         ((uint32_t)0x00000000)
    8 R( [) i: W! K3 D$ R' j% ]
  175. #define ADC_Resolution_10b                         ((uint32_t)0x01000000)3 R8 @# k) u; g; T0 p5 g; T
  176. #define ADC_Resolution_8b                          ((uint32_t)0x02000000)
    # T! j  [1 A2 N( j
  177. #define ADC_Resolution_6b                          ((uint32_t)0x03000000)
    ; T! `& ^- q' \9 H& @  e, p
  178. #define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_Resolution_12b) || \% W' b0 t4 I  |, g* t$ l3 o! S9 {
  179.                                        ((RESOLUTION) == ADC_Resolution_10b) || \  D) Z7 a8 M3 y! c( A& x
  180.                                        ((RESOLUTION) == ADC_Resolution_8b) || \
    ) F3 q. i2 G0 {1 ~5 f
  181.                                        ((RESOLUTION) == ADC_Resolution_6b))
      ?" ~7 L8 }2 z8 j' u* e) c
  182. 4 K) x2 e( }% V) s
  183. /**) R! E3 S/ y0 j9 g& X) F
  184.   * @}6 ?( M1 V/ `/ v6 B' Y7 W3 K2 b5 p
  185.   */ 1 l- ]1 l( b/ {. C2 t1 b4 y3 J

  186. * a: J; j- y0 [, X5 |
  187. 4 |6 M4 K  [5 r  \2 {" Y+ U
  188. /** @defgroup ADC_external_trigger_edge_for_regular_channels_conversion
    ' T! o3 ~# c( \! i" c6 h
  189.   * @{- j! s# C' B& b5 C4 ~' m% U
  190.   */
    8 d$ X( o0 R3 P+ Y
  191. #define ADC_ExternalTrigConvEdge_None          ((uint32_t)0x00000000)
    # Y4 G- w: o, W& |! h0 p% l) y
  192. #define ADC_ExternalTrigConvEdge_Rising        ((uint32_t)0x10000000)6 \6 _( x  W5 j! P
  193. #define ADC_ExternalTrigConvEdge_Falling       ((uint32_t)0x20000000)# X. T# g8 }, r; a
  194. #define ADC_ExternalTrigConvEdge_RisingFalling ((uint32_t)0x30000000)
    2 f4 ?* O9 O& h! u* [+ H& {, r4 P3 p
  195. #define IS_ADC_EXT_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigConvEdge_None) || \
    9 j5 d2 y5 s" g% `! h
  196.                              ((EDGE) == ADC_ExternalTrigConvEdge_Rising) || \# {% x1 F. T: w5 d
  197.                              ((EDGE) == ADC_ExternalTrigConvEdge_Falling) || \5 F5 K4 t( m! H: v3 m9 n2 C4 s% M+ W
  198.                              ((EDGE) == ADC_ExternalTrigConvEdge_RisingFalling))% i9 E: n' Z' A
  199. /**  p" |. z7 h) l, t! o3 h6 r) ?' l
  200.   * @}
    3 m8 i, G, F7 p
  201.   */ & L  s6 U, n6 P; N
  202. + a# A( T! B" A# _
  203. : s- G1 V/ i; M% [; w% P
  204. /** @defgroup ADC_extrenal_trigger_sources_for_regular_channels_conversion . ^0 z0 K! n9 v  v- d
  205.   * @{
    7 C( c6 r: m5 Q# S. w4 M
  206.   */
    # Z% Y1 W  l. [. D
  207. #define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000)
    1 E1 F6 T7 U4 I6 ~' S( x) ?; j* @
  208. #define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x01000000)8 X" {! C0 F; y3 Y
  209. #define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x02000000)
    4 n4 ~! v4 Z8 }
  210. #define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x03000000)
    8 p3 T4 B/ w) f
  211. #define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x04000000)
    , V, x7 U) o# l* ~/ N1 L
  212. #define ADC_ExternalTrigConv_T2_CC4                ((uint32_t)0x05000000)1 h2 V  c6 G! H6 C* y+ }/ O
  213. #define ADC_ExternalTrigConv_T2_TRGO               ((uint32_t)0x06000000)4 z  f) a4 i' G- ]2 A
  214. #define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x07000000)
    % u" H2 G" f" M$ e
  215. #define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x08000000)
    ) x3 ]+ \7 y' Z: ?0 k- `1 N3 M. E
  216. #define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x09000000)
    9 B' u# R, H4 T
  217. #define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x0A000000)
    * e* O# U: Q8 T- E% n2 f* E' f
  218. #define ADC_ExternalTrigConv_T5_CC2                ((uint32_t)0x0B000000)/ d' E' ?& A  u, P% F0 O) S
  219. #define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x0C000000)
    9 a2 S$ J! [% ?- w" p# }
  220. #define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x0D000000), E/ S; i4 I4 e
  221. #define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x0E000000)
    ) n8 a0 w, y% U/ l
  222. #define ADC_ExternalTrigConv_Ext_IT11              ((uint32_t)0x0F000000)
    * f9 @, {) k3 A+ g
  223. #define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_ExternalTrigConv_T1_CC1) || \
    8 P1 T; o- G$ k/ e
  224.                                   ((REGTRIG) == ADC_ExternalTrigConv_T1_CC2) || \
    , G& @" D3 |+ Y
  225.                                   ((REGTRIG) == ADC_ExternalTrigConv_T1_CC3) || \
    ) h# \" M: U4 y/ g+ p3 G4 z! `' N
  226.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC2) || \
    1 [3 g# h- `% h
  227.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC3) || \& D7 T0 x  \! ^# }! |- }8 @
  228.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC4) || \( ^, M' T% g9 J9 w
  229.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_TRGO) || \4 E( Y7 ?" E% G% l0 ]
  230.                                   ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \
    $ k$ V  v7 o, r- ^/ ^; m
  231.                                   ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \
    ( `5 z9 Q2 C+ h; m4 f8 q
  232.                                   ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \
    ; v  {3 O3 D% l8 }7 h% |
  233.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \3 c5 i) d# \: h" o" |# v# s6 o% {
  234.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC2) || \
    $ x8 ]3 X8 `' D# _+ v& K
  235.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3) || \. w' e/ _# P/ F9 }
  236.                                   ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \! ~+ Y8 J7 f7 @
  237.                                   ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \
      O; t. Q4 v! p9 c& j
  238.                                   ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11))
    ) j+ j# u( z2 k) a
  239. /**3 _* ]- i$ X/ [  ~4 k6 s
  240.   * @}$ G9 B& [$ Q3 a* ?+ A0 z! f
  241.   */ 6 c7 @8 g1 @& a; ~) X

  242. ! B; g' w8 ^) r% [
  243. 4 x! N1 n6 e/ n3 X8 a8 g, i. h
  244. /** @defgroup ADC_data_align 8 @1 ]/ w8 T3 O+ `: M4 J1 F3 K
  245.   * @{* E9 P0 A  Q% U4 o; J2 ~$ M
  246.   */ 9 B' _% v& j; b7 t1 _
  247. #define ADC_DataAlign_Right                        ((uint32_t)0x00000000)
    ; W$ ~) J" u6 |% H7 B/ c
  248. #define ADC_DataAlign_Left                         ((uint32_t)0x00000800)
    : g6 Y. v! z5 |7 ^
  249. #define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DataAlign_Right) || \
    1 I( p+ U( x1 X" R. z1 Y6 @6 L; A6 R
  250.                                   ((ALIGN) == ADC_DataAlign_Left))
    5 I+ |2 w! I8 Q; e+ U
  251. /**
    ' D: _+ f) ]( |' x, G7 ^
  252.   * @}
    * p$ |& a  x, ?+ O! O! T; V6 l8 w
  253.   */ # ^  C2 p' I4 `. Y8 S) p
  254. / B9 Z, I' f7 G0 `

  255. + ]4 {( x0 y, O
  256. /** @defgroup ADC_channels . L; B- I/ F, o! G6 \0 @  {* p2 n
  257.   * @{
    - o7 ?' b; i9 O! \( p! c3 h- k
  258.   */
    7 M0 W$ ~: y; l
  259. #define ADC_Channel_0                               ((uint8_t)0x00)2 _9 H2 c  L9 i
  260. #define ADC_Channel_1                               ((uint8_t)0x01)
    5 W' R. [) |$ }  K9 c5 R/ H
  261. #define ADC_Channel_2                               ((uint8_t)0x02)
    ; @9 l! ~" t- f5 s: L
  262. #define ADC_Channel_3                               ((uint8_t)0x03)" W% }+ A7 n( g4 E  c
  263. #define ADC_Channel_4                               ((uint8_t)0x04)
    ) j3 @8 u0 ?7 V8 F
  264. #define ADC_Channel_5                               ((uint8_t)0x05), U- R" d, i( E. A9 n& ?7 R
  265. #define ADC_Channel_6                               ((uint8_t)0x06)
    : Q$ X; R+ q& g) R
  266. #define ADC_Channel_7                               ((uint8_t)0x07)
    ! e. _* y, ?: `- s7 F9 ?
  267. #define ADC_Channel_8                               ((uint8_t)0x08)
    2 W$ f3 D0 ?# U
  268. #define ADC_Channel_9                               ((uint8_t)0x09)
    ! S9 \& @5 W! w) a
  269. #define ADC_Channel_10                              ((uint8_t)0x0A)
    9 D+ h3 ?5 Y" _( o6 n3 o5 Z3 N3 {
  270. #define ADC_Channel_11                              ((uint8_t)0x0B)* c: i8 ?) Z8 |" a: ^
  271. #define ADC_Channel_12                              ((uint8_t)0x0C)( K! G7 \( H- q6 K" s: h
  272. #define ADC_Channel_13                              ((uint8_t)0x0D)  b+ X8 y. k4 u
  273. #define ADC_Channel_14                              ((uint8_t)0x0E)$ q. D% E9 f! h% k; _" ?: y! G* J2 N
  274. #define ADC_Channel_15                              ((uint8_t)0x0F)
    : F2 ]5 r" t) D: ?0 H& D% k( @6 C
  275. #define ADC_Channel_16                              ((uint8_t)0x10)9 t# a. j% A/ o; _  i& C8 _) b- l
  276. #define ADC_Channel_17                              ((uint8_t)0x11)9 J6 d2 T1 A/ A# g3 I' ~
  277. #define ADC_Channel_18                              ((uint8_t)0x12)) m6 _3 Y# c2 h# r( |( I9 h

  278. * |* T  a( `, x$ ]
  279. #if defined (STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)3 @7 ?( Q7 [' s6 N7 |3 T
  280. #define ADC_Channel_TempSensor                      ((uint8_t)ADC_Channel_16)
    , E) @0 W- D/ }  Q3 ~3 X/ ?! a) B) n
  281. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */6 s. _% P" j2 M4 ^4 z, g( M

  282. ; z  H- \6 t% X, {, L4 D# v
  283. #if defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) || defined (STM32F410xx) || defined (STM32F411xE)
    5 S" z$ P) w# p; m* h
  284. #define ADC_Channel_TempSensor                      ((uint8_t)ADC_Channel_18)$ N$ v7 X. t' o& R4 [9 @! z4 r) x# y
  285. #endif /* STM32F427_437xx || STM32F429_439xx || STM32F401xx || STM32F410xx || STM32F411xE */
    $ H8 Q3 `3 L, W8 H
  286. 0 q& M8 F: _$ N, F) Z# y3 \1 ]# o/ t
  287. #define ADC_Channel_Vrefint                         ((uint8_t)ADC_Channel_17)) }$ u) H! [, l: B3 G- `
  288. #define ADC_Channel_Vbat                            ((uint8_t)ADC_Channel_18)  ^$ n% d% |; C/ L( E2 x! w1 v* F
  289.   E- N4 p, h+ X
  290. #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_Channel_0) || \
    3 ~- W$ t5 C8 H/ a6 |& x, {
  291.                                  ((CHANNEL) == ADC_Channel_1) || \
    : J% [1 M% Y9 o* n
  292.                                  ((CHANNEL) == ADC_Channel_2) || \9 o1 J; i* f' b7 ]# p, a" G& o# Z
  293.                                  ((CHANNEL) == ADC_Channel_3) || \5 j5 T) r9 P" n' i  U
  294.                                  ((CHANNEL) == ADC_Channel_4) || \7 A$ G8 @9 q) p/ O6 Q( V
  295.                                  ((CHANNEL) == ADC_Channel_5) || \) F' o- ^" l" T+ q
  296.                                  ((CHANNEL) == ADC_Channel_6) || \' P5 Q% i  C% w8 o
  297.                                  ((CHANNEL) == ADC_Channel_7) || \
    0 z% f; A0 N% L# G
  298.                                  ((CHANNEL) == ADC_Channel_8) || \4 P8 p9 g. r0 P
  299.                                  ((CHANNEL) == ADC_Channel_9) || \) x: g3 J. B1 O
  300.                                  ((CHANNEL) == ADC_Channel_10) || \
    - X0 \$ T7 k$ t; k) s) M4 C, Z4 i9 ^
  301.                                  ((CHANNEL) == ADC_Channel_11) || \
    4 m7 }8 |) p1 ~6 m( }9 |
  302.                                  ((CHANNEL) == ADC_Channel_12) || \+ s  O: w1 a3 S$ R. _
  303.                                  ((CHANNEL) == ADC_Channel_13) || \# q( {8 C! n, Z
  304.                                  ((CHANNEL) == ADC_Channel_14) || \
    0 r/ J2 m, F' X  i) z
  305.                                  ((CHANNEL) == ADC_Channel_15) || \3 k& s% p4 r* L( G
  306.                                  ((CHANNEL) == ADC_Channel_16) || \
    + ]: D) o8 f3 l# v
  307.                                  ((CHANNEL) == ADC_Channel_17) || \- E- K7 S& ?4 X; W
  308.                                  ((CHANNEL) == ADC_Channel_18))
    ' i+ q1 A& M& k" Q' ~+ ~: o
  309. /**
    1 [5 d! [  ~  s9 G$ @4 ?: V
  310.   * @}, D+ w( N8 \0 f; c1 _% P% K" r  ]
  311.   */ 6 \7 W+ p+ N/ [/ H
  312. ! s2 [4 O5 _# b; U  j2 @
  313. ) }8 S/ P# _7 E: u
  314. /** @defgroup ADC_sampling_times
    + x% }1 Q. q8 v  Z
  315.   * @{
    $ S, q" j9 ]% x# V7 D9 q
  316.   */ 8 ?! m! a2 P5 D8 F/ ~) B
  317. #define ADC_SampleTime_3Cycles                    ((uint8_t)0x00)
    ; e) @4 Z, z, \2 e( i1 q& C
  318. #define ADC_SampleTime_15Cycles                   ((uint8_t)0x01)
    5 O+ u  j' N- o# o
  319. #define ADC_SampleTime_28Cycles                   ((uint8_t)0x02)7 o4 A& F1 L$ |2 n. M: Q  l6 j& h
  320. #define ADC_SampleTime_56Cycles                   ((uint8_t)0x03)  i' a) Y+ }. m$ u$ n4 ~
  321. #define ADC_SampleTime_84Cycles                   ((uint8_t)0x04)4 [' \" c8 F$ \" e' w
  322. #define ADC_SampleTime_112Cycles                  ((uint8_t)0x05)' P& f* l9 H$ L$ m  S6 `2 g, s  K, k
  323. #define ADC_SampleTime_144Cycles                  ((uint8_t)0x06)' }9 B+ }. }1 k3 T- `  B2 b
  324. #define ADC_SampleTime_480Cycles                  ((uint8_t)0x07)
    , u" a: k& w7 I- f! n
  325. #define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_3Cycles) || \' ]9 k* h2 h+ }  g5 J
  326.                                   ((TIME) == ADC_SampleTime_15Cycles) || \
    " s+ W6 f, v! R$ U( h
  327.                                   ((TIME) == ADC_SampleTime_28Cycles) || \
    - P* C! v# l/ Q( {; L$ m; y
  328.                                   ((TIME) == ADC_SampleTime_56Cycles) || \2 [- T) y8 ^9 H, i/ B
  329.                                   ((TIME) == ADC_SampleTime_84Cycles) || \1 f* E3 u' m7 {4 m
  330.                                   ((TIME) == ADC_SampleTime_112Cycles) || \
    3 k  P" e, e1 u% R& d( Q
  331.                                   ((TIME) == ADC_SampleTime_144Cycles) || \# k. i( X* k6 g2 J: D, v* X* k, `
  332.                                   ((TIME) == ADC_SampleTime_480Cycles))
    7 y3 }, r. i' _( P/ P* N+ n
  333. /**
    7 \0 q2 W. b% G* p
  334.   * @}
    # j# J5 k2 V# z0 ?
  335.   */
    ) c$ c( a% |8 o; G2 B

  336.   {1 O5 b" [1 [0 @! N7 L4 Q( d/ t. h
  337. ! Z% Z: J6 Z( _% g. j7 H
  338. /** @defgroup ADC_external_trigger_edge_for_injected_channels_conversion
    & C1 S/ g) G) ?; S$ g
  339.   * @{
    # t% D/ w3 W1 o+ J
  340.   */
    ! ], T3 D+ U( ~0 D" z
  341. #define ADC_ExternalTrigInjecConvEdge_None          ((uint32_t)0x00000000)6 k3 B6 H8 j) C( b' x5 @
  342. #define ADC_ExternalTrigInjecConvEdge_Rising        ((uint32_t)0x00100000)+ l* m0 I+ H. K5 b: a
  343. #define ADC_ExternalTrigInjecConvEdge_Falling       ((uint32_t)0x00200000)
    - u0 F1 |8 A) }2 D5 x
  344. #define ADC_ExternalTrigInjecConvEdge_RisingFalling ((uint32_t)0x00300000)
    " Y4 V4 }2 P, r& M5 q$ Q
  345. #define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigInjecConvEdge_None) || \
    : }3 a' V2 c! c9 \) E% M2 [. J
  346.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_Rising) || \
    0 L( @+ v" k8 L' i* u7 C/ }, q
  347.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_Falling) || \* k: Z3 ~: d2 \6 N  V! ^
  348.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_RisingFalling))
    , w3 u: M4 {$ f! a( [

  349. : u3 c2 P* p( r& g
  350. /**
    3 D% L! V* Q$ I
  351.   * @}& W" R1 Y7 Y6 V9 K: K
  352.   */ . u1 O" o( M5 {: Z% n7 e
  353. ; j$ r: R6 o0 G& m$ S, i- j
  354. 7 H9 y* b$ Z8 p+ `4 w
  355. /** @defgroup ADC_extrenal_trigger_sources_for_injected_channels_conversion ' F" {: l& M/ ~+ T
  356.   * @{
    % J4 u. K  T$ J; O% J+ i5 E
  357.   */ ' `* ~# W4 R8 p9 r; b+ J
  358. #define ADC_ExternalTrigInjecConv_T1_CC4            ((uint32_t)0x00000000)
      g+ V8 X1 H! @( j# t2 w/ @" A
  359. #define ADC_ExternalTrigInjecConv_T1_TRGO           ((uint32_t)0x00010000)2 G' B9 J$ t+ P/ G3 v3 }$ F7 t
  360. #define ADC_ExternalTrigInjecConv_T2_CC1            ((uint32_t)0x00020000)
    " f+ f* u+ y5 u% r0 \. X
  361. #define ADC_ExternalTrigInjecConv_T2_TRGO           ((uint32_t)0x00030000)/ g2 k" p/ N; v' {# ~
  362. #define ADC_ExternalTrigInjecConv_T3_CC2            ((uint32_t)0x00040000)
      Z: A6 |- d$ B
  363. #define ADC_ExternalTrigInjecConv_T3_CC4            ((uint32_t)0x00050000)( c) [# I3 {0 I" u6 s! b' l3 q
  364. #define ADC_ExternalTrigInjecConv_T4_CC1            ((uint32_t)0x00060000)* ]  ^% g& C6 W
  365. #define ADC_ExternalTrigInjecConv_T4_CC2            ((uint32_t)0x00070000)
    9 h8 Q; b  E* R* m4 m) `) m1 O
  366. #define ADC_ExternalTrigInjecConv_T4_CC3            ((uint32_t)0x00080000)
    , @9 d( F" g; A$ ~( p
  367. #define ADC_ExternalTrigInjecConv_T4_TRGO           ((uint32_t)0x00090000)
    ( n) f, n4 Z: c* c
  368. #define ADC_ExternalTrigInjecConv_T5_CC4            ((uint32_t)0x000A0000)
    ) |: D0 n0 g0 ~8 @3 ^0 G
  369. #define ADC_ExternalTrigInjecConv_T5_TRGO           ((uint32_t)0x000B0000)0 d# g/ e4 l: M
  370. #define ADC_ExternalTrigInjecConv_T8_CC2            ((uint32_t)0x000C0000)
    9 M- e- ~9 S' u3 ^# c
  371. #define ADC_ExternalTrigInjecConv_T8_CC3            ((uint32_t)0x000D0000)' y" D' E2 I; z8 z  _: _. j9 o
  372. #define ADC_ExternalTrigInjecConv_T8_CC4            ((uint32_t)0x000E0000)
    ' x0 W4 k# M- t# W- U
  373. #define ADC_ExternalTrigInjecConv_Ext_IT15          ((uint32_t)0x000F0000)
    . Y9 F& b, @: c9 ^* i. T/ ~" ]+ B
  374. #define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \
      s4 B6 M5 [  R: j' [
  375.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \
    # X9 o4 e* [* y% ]
  376.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \
    $ J9 c2 z! `- Y* ?/ N6 ]
  377.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \8 F1 w: s; s, \+ G# g
  378.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC2) || \
    0 ?, {3 G/ v& ~3 U* \$ W
  379.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \% h7 Y$ D2 K, T. N
  380.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC1) || \1 N8 u; c. r9 J
  381.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC2) || \
    , y+ Z  S) c, R) u: t7 w4 ^
  382.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \
    1 B) g, P  x* ~, q2 {1 j
  383.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \, A* ?" c9 e3 j4 Z  R7 l
  384.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4) || \1 e8 g* d* I: w- O
  385.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \4 {( l0 s3 m/ `, ^# E/ X
  386.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \
    3 z6 [. J2 ^) S4 ?/ p
  387.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC3) || \
    ( J0 U8 N% j8 P$ X& k7 w5 p3 q
  388.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \
    . L, Q3 c  p  J8 @& Q7 n2 X
  389.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15))
    9 b8 y/ n/ {; o# [7 A! W
  390. /**
    ) R6 o6 Z2 I; k8 @5 ]3 n
  391.   * @}! q, r* ~; o' y, E" R
  392.   */
    , J& r$ x8 o# E$ s% k' g

  393. 6 Y$ Q0 J0 ^' \* Y5 b4 ^2 p
  394. " f+ o% x7 r; c# c; ]1 L& [
  395. /** @defgroup ADC_injected_channel_selection 7 M) R6 R; d6 s' Z# ]5 W6 C
  396.   * @{
    + D! ]3 S% F  S% l$ N
  397.   */
    - x7 i: Q; o5 i  x
  398. #define ADC_InjectedChannel_1                       ((uint8_t)0x14)
    ' {) ~! P! N# \5 e! j/ n! o; ?! }
  399. #define ADC_InjectedChannel_2                       ((uint8_t)0x18)
    , Y3 a# ~; R  C* ]0 Y; [1 K
  400. #define ADC_InjectedChannel_3                       ((uint8_t)0x1C)' F4 o5 P6 `  d/ y8 _+ v
  401. #define ADC_InjectedChannel_4                       ((uint8_t)0x20)
    - h" J) Y/ l! G1 Z) d) V
  402. #define IS_ADC_INJECTED_CHANNEL(CHANNEL) (((CHANNEL) == ADC_InjectedChannel_1) || \
    / R% ^% T! ]9 Z6 V% h- E
  403.                                           ((CHANNEL) == ADC_InjectedChannel_2) || \" z2 z9 h4 ^; Z% P  H0 f& Z
  404.                                           ((CHANNEL) == ADC_InjectedChannel_3) || \
    3 v0 H; H( ~$ l8 u. F% k$ j9 I
  405.                                           ((CHANNEL) == ADC_InjectedChannel_4))1 D: Z$ M6 X8 J: U2 l) F
  406. /**
    1 x! Q; B2 f% F8 T, l
  407.   * @}
    ( I9 x7 c4 N; ^, M
  408.   */
    # Y) N, f5 w" I( P& u" U; w- l5 l1 u
  409. " E# y2 E& A% T& `! r+ ~
  410. # n# S$ G7 b( d6 S
  411. /** @defgroup ADC_analog_watchdog_selection
    ; r$ ?) C5 s$ k; T) v& F
  412.   * @{
    9 S5 z: f: z7 ?/ ~0 R
  413.   */
    ( b1 S5 h) A) E' x/ Y# h
  414. #define ADC_AnalogWatchdog_SingleRegEnable         ((uint32_t)0x00800200)
    . l* D2 ^: L) ~8 `" n, b
  415. #define ADC_AnalogWatchdog_SingleInjecEnable       ((uint32_t)0x00400200)
    ! T- ]. L2 F6 N0 L) t% s
  416. #define ADC_AnalogWatchdog_SingleRegOrInjecEnable  ((uint32_t)0x00C00200)
    , ]/ q( B) C9 f6 Q: F
  417. #define ADC_AnalogWatchdog_AllRegEnable            ((uint32_t)0x00800000)
    , ]- ?/ l2 {) s9 L
  418. #define ADC_AnalogWatchdog_AllInjecEnable          ((uint32_t)0x00400000)
    " R2 j( A$ |& u( V
  419. #define ADC_AnalogWatchdog_AllRegAllInjecEnable    ((uint32_t)0x00C00000)
    % i  J5 ?8 L9 w- j2 C1 V
  420. #define ADC_AnalogWatchdog_None                    ((uint32_t)0x00000000)
    * T" t7 U+ q7 {0 Y
  421. #define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_AnalogWatchdog_SingleRegEnable) || \% c+ b% N3 B! R3 B
  422.                                           ((WATCHDOG) == ADC_AnalogWatchdog_SingleInjecEnable) || \9 v" T" H( ^$ b9 o
  423.                                           ((WATCHDOG) == ADC_AnalogWatchdog_SingleRegOrInjecEnable) || \  P1 j+ b% Q% U) k& c; O  G
  424.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllRegEnable) || \
    ' L& U0 E; {4 y/ f
  425.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllInjecEnable) || \' {7 F$ K  c& h2 g
  426.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllRegAllInjecEnable) || \
    ) S0 ?" h( ]( {' P
  427.                                           ((WATCHDOG) == ADC_AnalogWatchdog_None))
    8 N/ g% i' X  G, }. X! e
  428. /**+ E6 N- y% k+ N/ y- J4 g) p+ |
  429.   * @}
    3 |8 h% D' d" f4 C
  430.   */ , |: O0 i+ q2 t# u
  431. $ E# k* f1 n) ~8 ^4 r8 n
  432. 5 G5 L  N/ X5 i. ?1 P) n
  433. /** @defgroup ADC_interrupts_definition % B4 A/ M) J+ T: M
  434.   * @{$ \; }0 ^4 ]% Z' n. h, C3 j8 Y7 J
  435.   */ 5 v& P6 e" M+ L: z
  436. #define ADC_IT_EOC                                 ((uint16_t)0x0205)  $ m5 _, i) R" h0 z8 I  H2 |
  437. #define ADC_IT_AWD                                 ((uint16_t)0x0106)  
    : u8 n# v) Z9 t3 W+ k3 @2 ^
  438. #define ADC_IT_JEOC                                ((uint16_t)0x0407)  
    1 ?  v" F6 M* s
  439. #define ADC_IT_OVR                                 ((uint16_t)0x201A)  
    5 v$ u9 }$ j, r: A- m- P" ]
  440. #define IS_ADC_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \8 I8 ]- h; D7 h. n: I
  441.                        ((IT) == ADC_IT_JEOC)|| ((IT) == ADC_IT_OVR)) / l- Y% i* v2 y* }/ T
  442. /**. s8 ]2 p6 A; g
  443.   * @}
    * z1 T1 e3 V, B1 o  B
  444.   */ ( s5 T) I; o5 M2 ]% A. `
  445. ( ~( _. J! M; ]( P! Y  l9 N

  446.   j1 b6 X2 S( j! q" Y2 x9 x4 t
  447. /** @defgroup ADC_flags_definition 3 T* ?- p; J7 h' g2 m
  448.   * @{
    ( y% g1 @9 P& W( B
  449.   */ % C2 v* C5 @( d% G% s8 M' L
  450. #define ADC_FLAG_AWD                               ((uint8_t)0x01)5 |  u& y% m* O4 P- }
  451. #define ADC_FLAG_EOC                               ((uint8_t)0x02)
    1 q2 e+ Y" F) e& K, f8 f
  452. #define ADC_FLAG_JEOC                              ((uint8_t)0x04)2 [+ |& D$ n4 L& ?! u
  453. #define ADC_FLAG_JSTRT                             ((uint8_t)0x08)5 ?' F& a, j9 U$ f
  454. #define ADC_FLAG_STRT                              ((uint8_t)0x10)
    4 l. ?4 l  p2 x
  455. #define ADC_FLAG_OVR                               ((uint8_t)0x20)   
    : r, }  Y; t! S' p8 H" R3 z' E

  456. 8 {+ k- e' e! g! w8 {
  457. #define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xC0) == 0x00) && ((FLAG) != 0x00))   
    4 V- j3 N- f: |& ]$ k& ^
  458. #define IS_ADC_GET_FLAG(FLAG) (((FLAG) == ADC_FLAG_AWD) || \
    & q5 X0 V: R  I
  459.                                ((FLAG) == ADC_FLAG_EOC) || \
    8 a1 o5 |& F% v9 T, E! `
  460.                                ((FLAG) == ADC_FLAG_JEOC) || \2 H) u5 b" z! f) r. ~: O
  461.                                ((FLAG)== ADC_FLAG_JSTRT) || \) y+ c! X" U; i5 v$ |" \" M
  462.                                ((FLAG) == ADC_FLAG_STRT) || \; X/ @6 |" u6 R
  463.                                ((FLAG)== ADC_FLAG_OVR))     
    % i5 k( s% Y5 Q' }6 w# E1 t8 o
  464. /**
    * Z- T, ~6 N' I6 c# b9 }: f3 `; E
  465.   * @}
    , |; i, K4 i' ]. b/ R' i
  466.   */ + A2 M* i! v3 o, g7 U: u

  467. 6 o( d# w1 ]4 K% x( t

  468. 9 y* V7 M  c5 X! u* W
  469. /** @defgroup ADC_thresholds
    ' c' J# S3 t! h. V
  470.   * @{
      o" K# g+ k' G# g* J$ \5 ]4 w1 t
  471.   */ - x- u3 H4 J/ M2 i! Z! v: f6 n+ m
  472. #define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFF)
    4 Q0 X1 u1 U* `
  473. /**; [) [5 C5 W; L/ e; k$ u
  474.   * @}
    " F. }6 ^2 [7 j! H: C
  475.   */ * B! l& Q3 n! Z0 ^6 X* {# `

  476. ) Z8 w, i  F9 D  I1 h7 ~8 r

  477. 3 X/ F' @9 d5 Z3 h
  478. /** @defgroup ADC_injected_offset
    9 A, @; |1 `, C* k! _
  479.   * @{" M0 V! P4 O& Q
  480.   */ 8 h, @% e# I$ m6 M* `. O! l! F
  481. #define IS_ADC_OFFSET(OFFSET) ((OFFSET) <= 0xFFF)
    1 n. W) A% k% ?; _( T* q
  482. /**: J, S$ G! ?1 O1 N: p2 T* I( W
  483.   * @}4 M7 R& {/ g$ U. [4 @# c/ c5 f! v
  484.   */ / ?; H( d# H2 e0 U/ m

  485. " O$ p: P) D2 j+ ]" p0 k( o% H2 M

  486. 0 ], B0 G, X: n, J; b
  487. /** @defgroup ADC_injected_length ; m) Y7 m( ~) j. R- F% p( y6 _
  488.   * @{/ x$ Y! X0 X' ^+ f) L, P
  489.   */
    / s, N3 c9 T% f& Q- i) R
  490. #define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x4))9 q; I1 x, N% C3 o3 v% v1 w
  491. /**
    9 W8 x7 p) n$ u, A/ H+ y$ P
  492.   * @}
    ( ^* p% f- X: A" T  |
  493.   */
    + ~0 ?) K; @4 x+ \  O) s1 D( v2 Z
  494. ! c8 ]) A0 H2 O1 ~! T+ r3 p
  495. 4 U( T# B6 R" U4 ]! w! ^2 L' N* g
  496. /** @defgroup ADC_injected_rank ; p! k+ i6 v7 n  \% M
  497.   * @{0 f5 X& R8 l2 u3 K! @" ^
  498.   */
    , C5 Y: _/ w9 z; I, i
  499. #define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x4))& q7 U- h- G$ u6 A' M1 `! t; n
  500. /**" a! l; `" X+ e, ?% m2 r
  501.   * @}  Y+ w) O  o" `4 d
  502.   */
    6 V) w% D. X9 L0 `7 x
  503. ( |) |( C( K! J$ ?5 i: c  C
  504. . Q; x3 y& U* w$ j  b4 {
  505. /** @defgroup ADC_regular_length
    4 J! D; J# J0 X% F* M" `: ]
  506.   * @{! P$ B/ d) N. e8 F/ s
  507.   */
    - ^9 B4 o0 k/ p3 F0 y8 K( P" [
  508. #define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x10))- s- h7 q7 U, D) k
  509. /**2 T5 Y, f3 w, h0 t3 \) B8 t& m
  510.   * @}
    8 K; C% {0 _/ f7 Y! {4 ]
  511.   */ * U2 ?: `  x" r+ G5 l
  512. 2 M( s; t6 ?. V+ \
  513. 6 ]# D+ c% @' O' i. f, b
  514. /** @defgroup ADC_regular_rank
    & k$ o2 g" f( I& Q) S
  515.   * @{; m; C4 A& W% w5 V3 ~
  516.   */
    $ l1 I7 g# _" l/ K$ _/ ~
  517. #define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x10))  H+ B2 j* t2 b5 R
  518. /*** P6 J$ U& }2 h+ m
  519.   * @}& y+ V9 Z" p$ I* N6 v, A% A$ \
  520.   */ 5 P7 v/ |  V. S$ L2 j" b- O& ]1 ?

  521. & y8 n5 w& t( `' x" b+ _
  522. ) n  H' m- t& u
  523. /** @defgroup ADC_regular_discontinuous_mode_number
    & K: s9 L: Z  {1 V; n/ _; \0 h
  524.   * @{6 C4 V1 e/ |( z
  525.   */
    5 P" C% i9 [5 m; w( c2 v
  526. #define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 0x1) && ((NUMBER) <= 0x8))
    6 s) O: }# Z5 _/ k* H4 p1 p0 T
  527. /**
    6 i1 t4 X5 S- y
  528.   * @}# I! Q6 H: c2 K9 w
  529.   */
复制代码

4 v/ k: V- o" i. n% X- n03. 相关函数, q9 F' O9 {3 q! {1 h
  1. /*  Function used to set the ADC configuration to the default reset state *****/  
    ! [( L9 v- U; E! o% A# j9 x  o
  2. void ADC_DeInit(void);
    * K  j' G& P  F5 i$ D1 e6 s; U

  3. 9 b7 r+ P5 R4 R. j3 O) c5 `% K
  4. /* Initialization and Configuration functions *********************************/
    ; C6 J$ M7 X9 |- L) n8 k. C
  5. void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);) q1 a. ?; G* n8 m  a
  6. void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
    9 [0 z1 t, S/ ~" \8 m$ X! ]
  7. void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
    " F4 X1 W4 E. {5 w1 g- b) S
  8. void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
    * G6 I' d- J& z
  9. void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);9 O, G5 r; y7 ]
  10. 4 k1 s+ N. z. Z
  11. /* Analog Watchdog configuration functions ************************************/
    : |. B  L9 h/ |
  12. void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);
    . a) W* v1 e( z6 l" l
  13. void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold);
    , u! \2 `2 j! B9 B1 F" x
  14. void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);2 Y5 a5 A$ ~) ]! n2 \3 p6 W6 Q. H1 g
  15. 0 R# J# w* ?" i5 f* k& T! W
  16. /* Temperature Sensor, Vrefint and VBAT management functions ******************/' U% Y0 E* ~8 j  p$ D5 H  y- Y
  17. void ADC_TempSensorVrefintCmd(FunctionalState NewState);
    7 d! n! s" [3 b& j3 P0 b) N$ G/ V
  18. void ADC_VBATCmd(FunctionalState NewState);) @3 k8 A8 p- n) [. J. y
  19. 0 p4 A: v$ Z  c7 X: m2 v" x
  20. /* Regular Channels Configuration functions ***********************************/
    " ^  L* @, r6 u' w! m
  21. void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);/ E/ F9 \* L  V7 o
  22. void ADC_SoftwareStartConv(ADC_TypeDef* ADCx);' O8 f/ t/ u5 s0 `1 y4 U6 G  H4 N
  23. FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);2 w3 Q" G- A/ L2 K" {
  24. void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    6 x, I) L) `- ~' r3 U: I* `. k
  25. void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);, a( v9 }  i1 O, r
  26. void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);
      H6 f: c3 `& u9 T. U: _
  27. void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);/ E( }* Y. C& I1 w
  28. uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
    * W# G- Q% \' T
  29. uint32_t ADC_GetMultiModeConversionValue(void);9 j6 X/ ]" A: |# l0 M) L
  30. , M3 P  j& |, {3 V" ?1 S6 U
  31. /* Regular Channels DMA Configuration functions *******************************/0 c- g, M; G% Q7 Y( A+ v
  32. void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);: {0 v* W. b, S+ q$ g2 K3 C: |' A
  33. void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState);; B# C; J# g; v2 [
  34. void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState);
    % [$ j" Q: H" d3 O
  35. 0 `- U8 q1 T" |) O7 n& |6 @
  36. /* Injected channels Configuration functions **********************************/* O2 ]) n+ u+ d/ D  U
  37. void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
    2 {, Y4 X5 x* A" G: [, J
  38. void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);4 W& y2 ^0 o9 N/ z0 H
  39. void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);3 R4 x3 k) B6 d' Q- t5 w$ \
  40. void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);0 M2 S+ y# x( d( W/ Z
  41. void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge);9 m: y0 b. w" e7 @8 J
  42. void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx);
    7 k6 {  g- U" S+ b, L% _4 t. p
  43. FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
    ( V8 J; @8 R1 E6 X4 r+ a
  44. void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    8 C, d, }- y4 D0 ?
  45. void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    ( m, B, B3 B0 l
  46. uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);
    8 ~# A" V! M! g

  47. - L& V! O: ?" h5 G
  48. /* Interrupts and flags management functions **********************************/( Q: w7 D% f3 [# m: `: H
  49. void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);- a1 j, R4 z: I0 o
  50. FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);9 z5 E- Q3 E3 W/ g1 R- f
  51. void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
    ( d: {# W6 A& q5 ?
  52. ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);
    . A  M7 M: E0 _9 j; Q9 p) H; t
  53. void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);
复制代码
! ^: K" d7 {% }
04. 结构体封装$ x& Y' U) R( F. H6 S
  1. /**   n* s& |2 F; k/ w# p
  2.   * @brief Analog to Digital Converter  
      m" n; \% `$ o6 T' Z+ V
  3.   */! a/ k8 n5 k; R: u, F
  4. 9 _7 n. Y+ k3 q* Q) `( S
  5. typedef struct5 k. g& @7 e3 K6 ?9 M
  6. {4 x+ B6 I# ], c' [, f
  7.   __IO uint32_t SR;     /*!< ADC status register,                         Address offset: 0x00 */; e  t8 N7 g# h, ~) }
  8.   __IO uint32_t CR1;    /*!< ADC control register 1,                      Address offset: 0x04 */      
    % v7 T; ^2 m, t8 ]& k
  9.   __IO uint32_t CR2;    /*!< ADC control register 2,                      Address offset: 0x08 */
    " C% ?8 x2 O6 k( `6 K+ n) |% b4 h
  10.   __IO uint32_t SMPR1;  /*!< ADC sample time register 1,                  Address offset: 0x0C */
    * j7 d6 L. _+ o$ n. |
  11.   __IO uint32_t SMPR2;  /*!< ADC sample time register 2,                  Address offset: 0x10 */! ?' s# ]$ d% X9 P5 V$ R% X# G
  12.   __IO uint32_t JOFR1;  /*!< ADC injected channel data offset register 1, Address offset: 0x14 */
    " R, p, r7 }& x. G0 w8 e' p5 {
  13.   __IO uint32_t JOFR2;  /*!< ADC injected channel data offset register 2, Address offset: 0x18 */
    , s9 J2 r$ d5 V- u5 C4 m
  14.   __IO uint32_t JOFR3;  /*!< ADC injected channel data offset register 3, Address offset: 0x1C */
    ( ~# f& U& c" {- G: D
  15.   __IO uint32_t JOFR4;  /*!< ADC injected channel data offset register 4, Address offset: 0x20 */
    ( S+ `; \( S( Y4 c0 w, l
  16.   __IO uint32_t HTR;    /*!< ADC watchdog higher threshold register,      Address offset: 0x24 */
    3 y- b% p$ t2 \6 O
  17.   __IO uint32_t LTR;    /*!< ADC watchdog lower threshold register,       Address offset: 0x28 */3 s4 z' I5 S9 R
  18.   __IO uint32_t SQR1;   /*!< ADC regular sequence register 1,             Address offset: 0x2C */
    / B3 A; }7 f+ t9 R  U4 H
  19.   __IO uint32_t SQR2;   /*!< ADC regular sequence register 2,             Address offset: 0x30 */, i1 P9 W& A! |: W7 j1 [
  20.   __IO uint32_t SQR3;   /*!< ADC regular sequence register 3,             Address offset: 0x34 */5 D# u# T, @* N! S
  21.   __IO uint32_t JSQR;   /*!< ADC injected sequence register,              Address offset: 0x38 */
    % |: y1 J& v5 S2 U, S9 G+ ]; h
  22.   __IO uint32_t JDR1;   /*!< ADC injected data register 1,                Address offset: 0x3C */
    ! K. z) t# A0 d4 P4 ~$ F
  23.   __IO uint32_t JDR2;   /*!< ADC injected data register 2,                Address offset: 0x40 */
    5 W( g, l* \% }# a( {1 _0 a
  24.   __IO uint32_t JDR3;   /*!< ADC injected data register 3,                Address offset: 0x44 */8 C( Y/ ?$ e" W# m
  25.   __IO uint32_t JDR4;   /*!< ADC injected data register 4,                Address offset: 0x48 */& d4 e7 m( i' k4 n3 |, b
  26.   __IO uint32_t DR;     /*!< ADC regular data register,                   Address offset: 0x4C */
    ! }) B& M2 n, ?/ J" p4 u* {
  27. } ADC_TypeDef;
    $ I& W7 e3 S0 S% K

  28. 8 K# {2 M  R9 s3 ~: Q& s+ Q
复制代码
  [' j9 j1 R% k3 Z) s  X1 K

/ P& j' V" J" N. D! K$ }
赞 收藏 评论0 发布时间:2022-3-30 11:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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