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

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

[复制链接]
STMCU小助手 发布时间:2022-6-14 17:06
01. ADC概述# r& `4 r' f0 j. N( v( y* K. J4 u
STM32F4xx 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32F4 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 19 个通道,可测量 16 个外部源、2 个内部源和 Vbat 通道的信号。这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。% [5 J1 n2 e, z
- k- \1 e. U# Y, m1 |: E$ x
相关文件为 stm32f4xx_adc.h和 stm32f4xx_adc.c。
) T  t4 P& F& A6 s, v7 s; [: A" w
02. 相关类型, t* Q5 T4 f+ Y
  1. /** + U- f1 ~# z3 f: P( O
  2.   * @brief   ADC Init structure definition  ) z* ^8 G$ z) Y1 e
  3.   */ 9 m$ Z# N" C5 u) ]2 Y! S) L
  4. typedef struct, T4 u1 G# D8 a7 N2 w$ ?4 A
  5. {3 T! b! b2 v4 h' _
  6.   uint32_t ADC_Resolution;                /*!< Configures the ADC resolution dual mode. ( O5 R8 u! E& v5 [6 I2 z
  7.                                                This parameter can be a value of @ref ADC_resolution */                                   6 z2 E3 ]% L: h2 S4 N
  8.   FunctionalState ADC_ScanConvMode;       /*!< Specifies whether the conversion # |& f' ~0 l" @( w$ `
  9.                                                is performed in Scan (multichannels) 5 i$ C; ]. I; X; A2 y, w
  10.                                                or Single (one channel) mode.
    3 X) B: E/ C0 l5 H, g( l
  11.                                                This parameter can be set to ENABLE or DISABLE */
    - d. K# |3 d. o& S' k4 k" b3 R% g
  12.   FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion
    ' x! e0 m" N, h- H1 V) e/ z
  13.                                                is performed in Continuous or Single mode.
    0 t" p9 i7 {; K* b8 b2 y, C9 q
  14.                                                This parameter can be set to ENABLE or DISABLE. */
    7 J- ?% q" {3 e4 R
  15.   uint32_t ADC_ExternalTrigConvEdge;      /*!< Select the external trigger edge and
    ; ~+ b& u, E2 w" C% |: j
  16.                                                enable the trigger of a regular group.
    + N, a' f- ^6 C) b+ K) X
  17.                                                This parameter can be a value of
    , @7 S0 \# F' V- u; `+ a
  18.                                                @ref ADC_external_trigger_edge_for_regular_channels_conversion */
    3 J" [, Q/ I" q" e
  19.   uint32_t ADC_ExternalTrigConv;          /*!< Select the external event used to trigger
    : l5 N& ^0 ~4 a$ @
  20.                                                the start of conversion of a regular group.) _, l3 B: x( ^
  21.                                                This parameter can be a value of # p. g/ u7 z# B2 q$ x
  22.                                                @ref ADC_extrenal_trigger_sources_for_regular_channels_conversion */+ N) Y4 x7 }6 L4 |( e; ^
  23.   uint32_t ADC_DataAlign;                 /*!< Specifies whether the ADC data  alignment
    & e. K7 S. e! M% v$ h* Q2 Z
  24.                                                is left or right. This parameter can be 1 Z6 l, V# p5 q! V1 M
  25.                                                a value of @ref ADC_data_align */
    ' \. p- t, A4 d( o  `
  26.   uint8_t  ADC_NbrOfConversion;           /*!< Specifies the number of ADC conversions
    1 Q" W7 {* |* h: S/ {4 `
  27.                                                that will be done using the sequencer for
    7 [0 L0 A$ w7 k3 N' w  V
  28.                                                regular channel group.
    1 o  O2 Q9 d# a
  29.                                                This parameter must range from 1 to 16. */
    * q! w  [9 V7 ^4 Y2 y7 i+ \
  30. }ADC_InitTypeDef;6 h1 j, t0 U. b: t( C

  31. ; W  A  g& x8 K: i
  32. /** 2 l. e# \* J7 Z" @7 R
  33.   * @brief   ADC Common Init structure definition  
    5 U! d* Y* ^. o& Q" s: s: u1 G/ x/ {
  34.   */ ! a# I8 v3 H! W. b+ I: M
  35. typedef struct " l( f* l& k0 M' ^
  36. {3 E$ ?! b+ h. Q
  37.   uint32_t ADC_Mode;                      /*!< Configures the ADC to operate in
    4 h3 f# k; B7 t8 o3 L9 G8 W
  38.                                                independent or multi mode.
    $ B) {7 X* E* Y- b2 S$ v
  39.                                                This parameter can be a value of @ref ADC_Common_mode */                                              5 L+ u; v5 B" @1 C( c6 H! H. d
  40.   uint32_t ADC_Prescaler;                 /*!< Select the frequency of the clock - V& n) J: r+ K
  41.                                                to the ADC. The clock is common for all the ADCs.
    5 ?) i. H5 U1 K4 L* T. f
  42.                                                This parameter can be a value of @ref ADC_Prescaler */
    9 i6 w8 Y0 B* S# w  Y* Z4 d" v, \
  43.   uint32_t ADC_DMAAccessMode;             /*!< Configures the Direct memory access   @4 _1 o) h( r- q
  44.                                               mode for multi ADC mode.
    3 t1 U3 d, Z+ @
  45.                                                This parameter can be a value of 1 K9 [0 a, f" C/ K7 I
  46.                                                @ref ADC_Direct_memory_access_mode_for_multi_mode */5 @, H. G0 C. u& q7 k0 s. Z% a
  47.   uint32_t ADC_TwoSamplingDelay;          /*!< Configures the Delay between 2 sampling phases.
    7 M. C6 {. A1 Y! H5 k& L* [6 J
  48.                                                This parameter can be a value of 9 a  j- G, d% b+ U  `7 z
  49.                                                @ref ADC_delay_between_2_sampling_phases */
    7 Q& B" G6 m  J- G" ?
  50. + G$ g1 Y5 a. p+ y0 J
  51. }ADC_CommonInitTypeDef;
    ( |# ~- ]2 @/ N/ _* u, F1 l5 x
  52. # V5 @" I. g$ i# i, \1 c8 f

  53. " F6 Q' D9 s, t3 g$ ^  _% l
  54. /* Exported constants --------------------------------------------------------*/
    : L8 O9 M% A6 z) q

  55. * p0 S1 s. i* t  h( w; F  W* K
  56. /** @defgroup ADC_Exported_Constants
    ( M! ^: m6 T4 I2 ]8 u' j
  57.   * @{
    5 O7 \4 G3 z; Q2 r$ j, Z+ O
  58.   */
    ) N3 G2 i. l" D4 V6 O, h; {
  59. #define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \
    ! w& o! w# B- G( a/ P4 Q
  60.                                    ((PERIPH) == ADC2) || \' p7 a. N, @2 }3 U/ N
  61.                                    ((PERIPH) == ADC3))  % `$ W9 ~3 P* Q5 Z0 }
  62. - H2 e9 r% ]0 V# v! o! W+ Z- f
  63. /** @defgroup ADC_Common_mode
    / H6 D, R' t/ R; p! D' Y+ u
  64.   * @{
    6 K- h  Q, e4 q1 N. `4 d
  65.   */
    $ M9 D% v9 K2 Y' E0 ^2 O* {( I
  66. #define ADC_Mode_Independent                       ((uint32_t)0x00000000)       2 c) ~) x: ?" l$ O: J* r5 H. v% S
  67. #define ADC_DualMode_RegSimult_InjecSimult         ((uint32_t)0x00000001)9 _$ S( a% Q5 O+ e" \
  68. #define ADC_DualMode_RegSimult_AlterTrig           ((uint32_t)0x00000002)8 c: H7 H, B0 S4 p0 b  z
  69. #define ADC_DualMode_InjecSimult                   ((uint32_t)0x00000005)
    # p* C6 q; Z* v( Q, T) N- ^, Z
  70. #define ADC_DualMode_RegSimult                     ((uint32_t)0x00000006)
    ! e0 w  [/ g& A9 G& U5 n
  71. #define ADC_DualMode_Interl                        ((uint32_t)0x00000007)
    % m$ ?, i8 Y$ z# H
  72. #define ADC_DualMode_AlterTrig                     ((uint32_t)0x00000009)
    6 I* m* A) \6 \$ G' ?3 ]3 m
  73. #define ADC_TripleMode_RegSimult_InjecSimult       ((uint32_t)0x00000011)/ B1 q! J0 o4 S% m+ E+ C
  74. #define ADC_TripleMode_RegSimult_AlterTrig         ((uint32_t)0x00000012)" n# O$ ]# J" w3 @8 g  i6 I
  75. #define ADC_TripleMode_InjecSimult                 ((uint32_t)0x00000015)
    ) \2 Z" }- A2 Z' \/ J" X
  76. #define ADC_TripleMode_RegSimult                   ((uint32_t)0x00000016)6 E: f8 B# f. T& b6 Q0 q- u
  77. #define ADC_TripleMode_Interl                      ((uint32_t)0x00000017)/ G# Z8 c+ O: l% I
  78. #define ADC_TripleMode_AlterTrig                   ((uint32_t)0x00000019)) q% \+ }1 \7 W  o' W0 K
  79. #define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \& O9 l# c7 }$ n& k3 x1 {+ P
  80.                            ((MODE) == ADC_DualMode_RegSimult_InjecSimult) || \
    ) Z1 D1 F( l" y+ f7 S
  81.                            ((MODE) == ADC_DualMode_RegSimult_AlterTrig) || \" q/ D8 T$ w- I% e, V/ q
  82.                            ((MODE) == ADC_DualMode_InjecSimult) || \
    ! D: r) @3 S1 q* n: I* k, ^5 ^
  83.                            ((MODE) == ADC_DualMode_RegSimult) || \, b* p4 ~/ S5 y. |" `
  84.                            ((MODE) == ADC_DualMode_Interl) || \
    ( T/ x3 \& d* [, C4 x: @) Q; O
  85.                            ((MODE) == ADC_DualMode_AlterTrig) || \
    3 d. a# q* \8 n# U5 O8 y
  86.                            ((MODE) == ADC_TripleMode_RegSimult_InjecSimult) || \+ u% Q; {7 s/ C5 a
  87.                            ((MODE) == ADC_TripleMode_RegSimult_AlterTrig) || \
    * D2 M% y" A+ i: o0 T
  88.                            ((MODE) == ADC_TripleMode_InjecSimult) || \! L0 d, R: N. Y3 ~; v0 Z1 h
  89.                            ((MODE) == ADC_TripleMode_RegSimult) || \" Q5 N2 M3 a" ^. |* ^* V/ j
  90.                            ((MODE) == ADC_TripleMode_Interl) || \
    ' I" A1 X# o0 S, Q8 Q& n
  91.                            ((MODE) == ADC_TripleMode_AlterTrig))
    2 {& l- E$ v* n! Q" a8 L
  92. /**. R& y; C% M# N- x
  93.   * @}; i, o: K3 l. ]% T* D( Y, ^- C
  94.   */ ! W( T9 c# J$ ]& Q5 ?$ t5 O
  95. 0 Y/ T3 o. [$ o. S* i& Q# e
  96. - m9 w4 n, m/ p% N
  97. /** @defgroup ADC_Prescaler ) S2 Q% k* R$ o
  98.   * @{$ u: K& ~- S8 R6 Y
  99.   */
    # i* B( W/ X" B2 F6 c- O- G& ?) v
  100. #define ADC_Prescaler_Div2                         ((uint32_t)0x00000000): `" r: Z9 ?* O6 C/ S, K
  101. #define ADC_Prescaler_Div4                         ((uint32_t)0x00010000)
    5 i: {. ^. V( \+ L; m- n  p5 K( b
  102. #define ADC_Prescaler_Div6                         ((uint32_t)0x00020000)$ K+ l! H% A& Q* O& Y/ N  T; H+ W
  103. #define ADC_Prescaler_Div8                         ((uint32_t)0x00030000)
    0 `0 D8 S. E+ H- b  W( U; ]
  104. #define IS_ADC_PRESCALER(PRESCALER) (((PRESCALER) == ADC_Prescaler_Div2) || \
    6 p9 K) g! p. V' l6 L
  105.                                      ((PRESCALER) == ADC_Prescaler_Div4) || \
    9 x2 A, m/ E% c' t8 D
  106.                                      ((PRESCALER) == ADC_Prescaler_Div6) || \
    4 X3 y7 ~/ [( M& ]* [+ ?) k
  107.                                      ((PRESCALER) == ADC_Prescaler_Div8))
    + e% q' ~4 K0 M4 v/ B2 {
  108. /**
    9 w/ N: N0 U3 ]; n+ ?; w  v  f: \
  109.   * @}1 }& B& h1 S+ W$ x
  110.   */
      F& G+ N2 N2 B! N  V

  111. 5 q% D8 @2 j& a6 u. B  \5 C3 p
  112. 4 i4 j# U) n5 G) Y
  113. /** @defgroup ADC_Direct_memory_access_mode_for_multi_mode
    + K  |9 A# Z# t! S
  114.   * @{
    $ X7 n  M) M8 e" z+ _7 H- o
  115.   */ ! `) L) R" r0 P( D+ i  P
  116. #define ADC_DMAAccessMode_Disabled      ((uint32_t)0x00000000)     /* DMA mode disabled */
    7 S. p* J1 p6 g6 J
  117. #define ADC_DMAAccessMode_1             ((uint32_t)0x00004000)     /* DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)*/
    * e( X4 D, R2 d- G* f
  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)*/
    " W& i& E( x# s' C
  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) */$ G# X& U( n9 E1 C
  120. #define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAAccessMode_Disabled) || \, f* t/ O# a! t& b1 d
  121.                                       ((MODE) == ADC_DMAAccessMode_1) || \9 K$ v3 ^6 \* A0 \- {+ C3 a4 e
  122.                                       ((MODE) == ADC_DMAAccessMode_2) || \& r3 O/ w& [% @; p  x
  123.                                       ((MODE) == ADC_DMAAccessMode_3))) ~# N1 T; i4 C

  124. " l/ @( B1 c; y7 t& t( f8 u/ W
  125. /**
    0 m8 ^' x1 ?0 O3 j: ]3 K, u
  126.   * @}
    ( g: l" `# a# M7 g5 h- @) s7 \
  127.   */ 4 g$ [# d  d. a6 U; e1 S
  128. 3 v( i& {' Y  Y1 M) w% u. I
  129. % V6 H2 K" T8 x: M
  130. /** @defgroup ADC_delay_between_2_sampling_phases
    # s& j' Y( b1 [
  131.   * @{5 X) h5 k4 Q, c2 o7 B9 R; R
  132.   */
    / H9 g5 K" X( }+ g, [) V8 {  t
  133. #define ADC_TwoSamplingDelay_5Cycles               ((uint32_t)0x00000000)
    ' z2 S$ w6 @3 }2 I8 @
  134. #define ADC_TwoSamplingDelay_6Cycles               ((uint32_t)0x00000100)2 h9 R9 a; [/ X6 k% C- n: G
  135. #define ADC_TwoSamplingDelay_7Cycles               ((uint32_t)0x00000200)
    % k; ]  I+ l6 a: G! _9 ]: r5 W
  136. #define ADC_TwoSamplingDelay_8Cycles               ((uint32_t)0x00000300)
    & h  ]8 r3 P; [8 m/ `" B+ S
  137. #define ADC_TwoSamplingDelay_9Cycles               ((uint32_t)0x00000400)
    5 c% B& r# s/ F8 n( R# o
  138. #define ADC_TwoSamplingDelay_10Cycles              ((uint32_t)0x00000500)
    3 I. g; {; b# ?6 t* C
  139. #define ADC_TwoSamplingDelay_11Cycles              ((uint32_t)0x00000600)
    3 Z1 [6 o0 O; O+ {% a5 Y) f
  140. #define ADC_TwoSamplingDelay_12Cycles              ((uint32_t)0x00000700), X* _' H: K9 H8 j/ E8 D: m
  141. #define ADC_TwoSamplingDelay_13Cycles              ((uint32_t)0x00000800)6 W- \: a8 T* Z' z) \7 w3 ?4 m
  142. #define ADC_TwoSamplingDelay_14Cycles              ((uint32_t)0x00000900)- r. h6 K* G1 p7 x! U0 Y* Y
  143. #define ADC_TwoSamplingDelay_15Cycles              ((uint32_t)0x00000A00)9 i* m! m. P3 L8 E
  144. #define ADC_TwoSamplingDelay_16Cycles              ((uint32_t)0x00000B00)
    " k) r6 f5 ~1 k2 }
  145. #define ADC_TwoSamplingDelay_17Cycles              ((uint32_t)0x00000C00)
    / v; P. V( {* v; V# E9 O
  146. #define ADC_TwoSamplingDelay_18Cycles              ((uint32_t)0x00000D00)
    ) c9 Z8 }9 m( X; k
  147. #define ADC_TwoSamplingDelay_19Cycles              ((uint32_t)0x00000E00)
    : K8 Y1 \& Q9 c5 d
  148. #define ADC_TwoSamplingDelay_20Cycles              ((uint32_t)0x00000F00)& r  _  W, Y8 c
  149. #define IS_ADC_SAMPLING_DELAY(DELAY) (((DELAY) == ADC_TwoSamplingDelay_5Cycles) || \. ^7 b1 P9 ~: C3 `1 `
  150.                                       ((DELAY) == ADC_TwoSamplingDelay_6Cycles) || \
    ) y6 ^; A* F8 h# A
  151.                                       ((DELAY) == ADC_TwoSamplingDelay_7Cycles) || \. E4 H* l' E9 J+ `
  152.                                       ((DELAY) == ADC_TwoSamplingDelay_8Cycles) || \
    - G" y& i) X0 j$ N6 H3 X0 D& b" a5 i
  153.                                       ((DELAY) == ADC_TwoSamplingDelay_9Cycles) || \: c( r" P3 @9 ]8 ^# D! ?
  154.                                       ((DELAY) == ADC_TwoSamplingDelay_10Cycles) || \
    & ^+ h* o3 I. c: c
  155.                                       ((DELAY) == ADC_TwoSamplingDelay_11Cycles) || \0 j' ~- q' x+ A, R$ \
  156.                                       ((DELAY) == ADC_TwoSamplingDelay_12Cycles) || \
    , U/ J6 {( G1 b: p9 \, L; W! z
  157.                                       ((DELAY) == ADC_TwoSamplingDelay_13Cycles) || \
    : U3 Y' O$ l! p
  158.                                       ((DELAY) == ADC_TwoSamplingDelay_14Cycles) || \# r! |& t$ @7 g, g8 P7 |
  159.                                       ((DELAY) == ADC_TwoSamplingDelay_15Cycles) || \
    ( D$ ]( V! d* ^, H. D$ A
  160.                                       ((DELAY) == ADC_TwoSamplingDelay_16Cycles) || \
      S4 N4 x+ r* H1 }- k5 s- ]
  161.                                       ((DELAY) == ADC_TwoSamplingDelay_17Cycles) || \
    ) `" j  v) K( P- k6 O7 @6 F; p- L1 q
  162.                                       ((DELAY) == ADC_TwoSamplingDelay_18Cycles) || \
    " t1 S* R" Y+ ~
  163.                                       ((DELAY) == ADC_TwoSamplingDelay_19Cycles) || \) i6 k* m' i3 A8 R
  164.                                       ((DELAY) == ADC_TwoSamplingDelay_20Cycles))0 d" w  q& u8 V0 K9 \! b3 z
  165. * S; b6 j$ F* `; ?9 {$ ]
  166. /**5 L4 ?" _! L$ d
  167.   * @}6 G6 Q- i+ L3 @, H& s
  168.   */
    5 j5 F% L# k5 V' s
  169. / f' w8 Z" v) [6 r7 _* Z
  170. " Q9 v' b5 l) ]3 B& ?4 [8 P2 e2 c
  171. /** @defgroup ADC_resolution
    6 `& P: `- j/ l/ I4 h+ ^7 P4 U* ~
  172.   * @{
    , C- k7 V9 A& `( z4 c
  173.   */
    / R& z; H. o% j1 @  h
  174. #define ADC_Resolution_12b                         ((uint32_t)0x00000000)
    ) x* z2 I$ F1 K, G# Q
  175. #define ADC_Resolution_10b                         ((uint32_t)0x01000000)
    & M0 i  p) ^! J# R! q, P6 K
  176. #define ADC_Resolution_8b                          ((uint32_t)0x02000000)
      i) @+ l1 A6 l: W, S, T; y
  177. #define ADC_Resolution_6b                          ((uint32_t)0x03000000)! h, N; T; n( Q; z0 T
  178. #define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_Resolution_12b) || \
    7 K/ A% j! t) {: i7 C- Y
  179.                                        ((RESOLUTION) == ADC_Resolution_10b) || \: g* r* G) H6 R& A5 Q3 N3 }
  180.                                        ((RESOLUTION) == ADC_Resolution_8b) || \
    6 c9 J. V4 g; ], }% J: _6 E* Z& O
  181.                                        ((RESOLUTION) == ADC_Resolution_6b))1 T% n) M( R' B

  182. % B' n: Y. S  _, A8 G6 O% t
  183. /**
    8 h" a& w8 y' c5 ]: X4 r
  184.   * @}( c9 z2 |8 p0 ]2 u2 w- X, ^
  185.   */
    3 G/ K% R% R% k

  186. ) E9 V: p2 o* `8 ^2 z
  187. * T2 ~" b3 J* n  l$ S* B
  188. /** @defgroup ADC_external_trigger_edge_for_regular_channels_conversion
    4 w' Z8 T( ^, g  M
  189.   * @{
    & \5 }$ s6 |2 S$ N
  190.   */
    / U4 F  G0 d  x) c" H
  191. #define ADC_ExternalTrigConvEdge_None          ((uint32_t)0x00000000)& F; r1 m& _1 j
  192. #define ADC_ExternalTrigConvEdge_Rising        ((uint32_t)0x10000000)
    . I% I. ?* k  h0 ]
  193. #define ADC_ExternalTrigConvEdge_Falling       ((uint32_t)0x20000000)
    9 c* g! H1 o1 L" u) c. M
  194. #define ADC_ExternalTrigConvEdge_RisingFalling ((uint32_t)0x30000000)
      q6 c9 i9 x$ t
  195. #define IS_ADC_EXT_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigConvEdge_None) || \
    . w& L, g: Z9 x3 F% ^
  196.                              ((EDGE) == ADC_ExternalTrigConvEdge_Rising) || \
    8 \" F$ y: N5 {: ~2 i) O1 n& i& o
  197.                              ((EDGE) == ADC_ExternalTrigConvEdge_Falling) || \/ X6 A) b( n  Z
  198.                              ((EDGE) == ADC_ExternalTrigConvEdge_RisingFalling))
    1 V1 Y0 G" R0 Y) W2 r1 y: O9 ?
  199. /**
    8 |- O# t7 U" g0 r( w
  200.   * @}
    3 r. j1 `, y4 S$ O3 i
  201.   */
    $ d5 h* L, k1 S
  202. " x, x" ?/ I$ d: U" M

  203.   p/ c, `+ \* p. v
  204. /** @defgroup ADC_extrenal_trigger_sources_for_regular_channels_conversion 2 N, E* F# j9 `3 _- ?
  205.   * @{
    . F9 l* C' R+ k/ \  B/ T" Z
  206.   */
    , n6 M$ Y/ W1 g
  207. #define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000). A/ |$ P1 n6 M+ g, g
  208. #define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x01000000)* K  o; y+ z" A! G- z+ y: a
  209. #define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x02000000)
    % A! w3 V. _* q4 g. {* S0 o
  210. #define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x03000000)' Y6 [3 X6 \5 y$ g! w% N
  211. #define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x04000000)
    . W* |; s/ i/ m
  212. #define ADC_ExternalTrigConv_T2_CC4                ((uint32_t)0x05000000)
    ' q' _6 |1 J/ D! h8 L
  213. #define ADC_ExternalTrigConv_T2_TRGO               ((uint32_t)0x06000000)6 S* s) \+ Z* n$ r8 d
  214. #define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x07000000)
    - g1 t8 }* e6 `) T" w, n' \# |
  215. #define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x08000000)0 t  V( P7 W' V6 F+ P8 t' G
  216. #define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x09000000)9 p( ]# d; k9 P( m$ l. C: z! X; R
  217. #define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x0A000000)
    $ l+ l+ _( x8 h2 R7 `7 u. ~" _- B( z2 ^
  218. #define ADC_ExternalTrigConv_T5_CC2                ((uint32_t)0x0B000000)' h! U, A# q) r! {- e8 i
  219. #define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x0C000000)
    ; V6 x9 F( I+ \5 v) ^  k5 F
  220. #define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x0D000000)
    % K5 `! J! h/ H& F. R0 `4 ]& T4 _
  221. #define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x0E000000)
    3 w# q0 k! R" G! j
  222. #define ADC_ExternalTrigConv_Ext_IT11              ((uint32_t)0x0F000000)0 K* o, _& P& n! C: b  S  k
  223. #define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_ExternalTrigConv_T1_CC1) || \0 Y9 w0 J! v1 U0 o% @7 }0 V4 i, A
  224.                                   ((REGTRIG) == ADC_ExternalTrigConv_T1_CC2) || \
    ; j3 l0 ]" D! x1 J" O( a
  225.                                   ((REGTRIG) == ADC_ExternalTrigConv_T1_CC3) || \
    % D; X! b1 X6 t7 `4 P. w0 T
  226.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC2) || \
    + B& D  J1 L: \' ]! j: T
  227.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC3) || \
    3 \* i) V0 _7 O2 ]
  228.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC4) || \# B! x; q6 R) C. n  @
  229.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_TRGO) || \. {9 l3 S4 a* o4 r
  230.                                   ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \
    , S8 P! A+ Y4 ~( q* I
  231.                                   ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \
    & d# p, V5 G' d
  232.                                   ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \! o( ]  G1 ?7 t* n8 R& a' Y" N) _
  233.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \6 r8 {: V4 y' J# g* J7 x, g  ~
  234.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC2) || \
    ! R$ {, D+ n. w1 _; V- y
  235.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3) || \0 g4 W! I* `4 a
  236.                                   ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \1 C8 h1 G* `+ Y; Z
  237.                                   ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \, s% r* L4 l6 R& w/ Y3 W
  238.                                   ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11))' k& d7 J8 e. ]
  239. /**: C/ j! h8 {3 t1 p" a% ^/ x, G( _
  240.   * @}! b  u5 P& V/ P9 R& }4 i+ e
  241.   */
      r9 S+ ~6 y7 W2 N) ^

  242. $ a4 L- W  Q! d
  243. 9 C6 l7 l+ `) k' s7 [8 |) s+ V
  244. /** @defgroup ADC_data_align 2 R7 B9 {2 W9 U2 D1 P2 [$ C
  245.   * @{
    2 u) \, y( T, ?  R- ?
  246.   */ 1 H; y0 ~  h/ q1 u! T
  247. #define ADC_DataAlign_Right                        ((uint32_t)0x00000000)/ }1 T5 R9 u5 L
  248. #define ADC_DataAlign_Left                         ((uint32_t)0x00000800)
      w, E7 B; K5 k& V7 t3 Z' r; S+ g
  249. #define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DataAlign_Right) || \! X9 k" e5 |& ?- F' T/ Z; }4 a7 `
  250.                                   ((ALIGN) == ADC_DataAlign_Left))
    % O! z% l. e- S! A9 I
  251. /**2 h7 @' a1 _+ B/ w" n1 v3 \4 o6 ^
  252.   * @}+ c# h1 \5 X$ U
  253.   */
    % w8 K6 B) Q5 q4 a2 W
  254. - A& ?2 T' t4 C& @9 C! V. `

  255. # M7 V' |+ [/ ~+ ^. E# _& @( c- ^
  256. /** @defgroup ADC_channels & S# i% c1 m$ `& E, m6 a$ b
  257.   * @{
    : f% w3 q3 l; L+ t/ m" s: I7 k
  258.   */ - }& }" {) {5 Y- \
  259. #define ADC_Channel_0                               ((uint8_t)0x00)3 p# w; U7 v# ^$ {5 Q4 U. `
  260. #define ADC_Channel_1                               ((uint8_t)0x01)  p! X4 c% {! u7 j1 O  D0 l, n' U
  261. #define ADC_Channel_2                               ((uint8_t)0x02)
      K" e/ {0 e/ h" b/ ^
  262. #define ADC_Channel_3                               ((uint8_t)0x03): J' M! r  n- B$ W5 F# X
  263. #define ADC_Channel_4                               ((uint8_t)0x04); g; A, B9 d. q  g3 b3 p# \% P& ]
  264. #define ADC_Channel_5                               ((uint8_t)0x05)  C% s4 ]7 J# H5 G/ g
  265. #define ADC_Channel_6                               ((uint8_t)0x06)
    9 P: a+ C# P7 C- D. w
  266. #define ADC_Channel_7                               ((uint8_t)0x07)
    ' ^- D8 Q; o  d0 ]6 J3 w" L
  267. #define ADC_Channel_8                               ((uint8_t)0x08)
    ( g* }6 {1 u* w0 S6 K
  268. #define ADC_Channel_9                               ((uint8_t)0x09)% c; ~* f( S. Y2 h3 c
  269. #define ADC_Channel_10                              ((uint8_t)0x0A)" V& W& L1 F4 l7 r1 _, W
  270. #define ADC_Channel_11                              ((uint8_t)0x0B)
    0 b' }( m: K" {2 ~
  271. #define ADC_Channel_12                              ((uint8_t)0x0C)
    " t$ D# W) _0 ?/ x( f) v
  272. #define ADC_Channel_13                              ((uint8_t)0x0D)
    # O' s3 N8 B: q2 J- V0 u, z7 Q
  273. #define ADC_Channel_14                              ((uint8_t)0x0E)
    ; m8 z+ w1 v2 y/ _
  274. #define ADC_Channel_15                              ((uint8_t)0x0F)8 q; u, s+ y$ u. Y% _$ n% j
  275. #define ADC_Channel_16                              ((uint8_t)0x10)+ P! G9 s4 T( K8 X6 X7 P2 I
  276. #define ADC_Channel_17                              ((uint8_t)0x11)
    + l0 X7 P2 r) F" \# r
  277. #define ADC_Channel_18                              ((uint8_t)0x12)
    7 ^# V3 ~5 f% C: ~/ R
  278. / F. u0 U- Z5 C9 k( \/ @' y
  279. #if defined (STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)4 }" x, r6 y7 Q: v9 |* O9 K2 d
  280. #define ADC_Channel_TempSensor                      ((uint8_t)ADC_Channel_16)
    & p* j) L( O! E2 Z/ N+ @
  281. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */
    * u3 H4 \+ `2 b3 i" A

  282. : D( m/ }, y" J6 e: {4 N: X. }
  283. #if defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) || defined (STM32F410xx) || defined (STM32F411xE)
    + O! ~! H4 @: I# t2 f( I  u
  284. #define ADC_Channel_TempSensor                      ((uint8_t)ADC_Channel_18)
    8 w5 ?$ ~; j2 n
  285. #endif /* STM32F427_437xx || STM32F429_439xx || STM32F401xx || STM32F410xx || STM32F411xE */
    ) h: L# F6 n+ U+ R) F( A

  286. 5 f! H2 W+ R8 [# y% A+ Q. W0 ?
  287. #define ADC_Channel_Vrefint                         ((uint8_t)ADC_Channel_17)' K; q' t/ U2 ^' D
  288. #define ADC_Channel_Vbat                            ((uint8_t)ADC_Channel_18)) e2 K- j% |5 P, ?% e8 f+ Y
  289. ' |2 T& y: x" e8 h: ]
  290. #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_Channel_0) || \
    0 `4 u, @6 \9 q8 q( E+ u- e% @; |
  291.                                  ((CHANNEL) == ADC_Channel_1) || \
    6 {- T* I: H0 v$ Q( t
  292.                                  ((CHANNEL) == ADC_Channel_2) || \
    3 o( E$ }4 b5 u. x# a
  293.                                  ((CHANNEL) == ADC_Channel_3) || \
    , S# @7 L& Y% U+ T! i7 v. Z+ v
  294.                                  ((CHANNEL) == ADC_Channel_4) || \
    8 X3 j; X! A/ @
  295.                                  ((CHANNEL) == ADC_Channel_5) || \
    , G+ ~# X( s& C2 V# j( x: y
  296.                                  ((CHANNEL) == ADC_Channel_6) || \
    # g6 Q  o  S& G: O. w
  297.                                  ((CHANNEL) == ADC_Channel_7) || \
    5 |: y1 i) s2 R! r
  298.                                  ((CHANNEL) == ADC_Channel_8) || \
    : J$ K% S9 V1 l0 V
  299.                                  ((CHANNEL) == ADC_Channel_9) || \% w/ l% I0 M( L% {7 J! K1 F
  300.                                  ((CHANNEL) == ADC_Channel_10) || \
    % v' G4 |: Z6 z, h5 M! F: L
  301.                                  ((CHANNEL) == ADC_Channel_11) || \
    9 u  s# e+ _/ E$ e% D
  302.                                  ((CHANNEL) == ADC_Channel_12) || \) _8 [; g  R% g. S
  303.                                  ((CHANNEL) == ADC_Channel_13) || \- [3 k+ I1 }9 h7 `
  304.                                  ((CHANNEL) == ADC_Channel_14) || \
    1 p) d" k8 [0 x
  305.                                  ((CHANNEL) == ADC_Channel_15) || \: ]+ M. v9 D: Z0 s
  306.                                  ((CHANNEL) == ADC_Channel_16) || \! I- m4 M7 a8 p7 A
  307.                                  ((CHANNEL) == ADC_Channel_17) || \
    & E  X1 ]: \; [: d+ \0 X
  308.                                  ((CHANNEL) == ADC_Channel_18))
    1 O. o- Z0 K3 {: e$ Q3 J; n
  309. /**
    & Y7 K! {/ \0 F7 y3 v- z' o1 j  l# ]5 g
  310.   * @}
    / O# ~% p, o3 }8 ^3 H
  311.   */ ! `7 f2 p) A1 q; U! u

  312. 0 J* \, F% j" ~6 h3 v4 d- {. A

  313. 2 \" w; p1 P4 T5 t* m
  314. /** @defgroup ADC_sampling_times
    6 N$ `( X: s% t
  315.   * @{
    $ O0 c- t7 s7 |  S
  316.   */ & L# n0 k' t' p3 C) w% I+ u
  317. #define ADC_SampleTime_3Cycles                    ((uint8_t)0x00)
    6 ~2 n2 \* T" g6 v
  318. #define ADC_SampleTime_15Cycles                   ((uint8_t)0x01)
    ) y5 a5 `+ q# H& k$ V* g' }# X, U
  319. #define ADC_SampleTime_28Cycles                   ((uint8_t)0x02). ?: u3 ?' }1 b& x
  320. #define ADC_SampleTime_56Cycles                   ((uint8_t)0x03)+ s4 |% [, o" ]. g  w
  321. #define ADC_SampleTime_84Cycles                   ((uint8_t)0x04)3 a  i" I- ?* Y, s! S
  322. #define ADC_SampleTime_112Cycles                  ((uint8_t)0x05)
    ) _0 k/ Y4 D% i) G5 P6 A) G  N
  323. #define ADC_SampleTime_144Cycles                  ((uint8_t)0x06). A7 ?* k% q# t' s. l
  324. #define ADC_SampleTime_480Cycles                  ((uint8_t)0x07)0 u( {( R' `& F* K8 t5 L
  325. #define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_3Cycles) || \
    0 O8 d  n& W- X# G2 n/ [' e
  326.                                   ((TIME) == ADC_SampleTime_15Cycles) || \
    " {  A+ j/ F, j2 R) a
  327.                                   ((TIME) == ADC_SampleTime_28Cycles) || \/ o4 P' y( D: D  B! W7 M/ B8 U
  328.                                   ((TIME) == ADC_SampleTime_56Cycles) || \2 y0 N( q7 v* b0 F0 ?8 c: i: F! |7 U
  329.                                   ((TIME) == ADC_SampleTime_84Cycles) || \  u& B. W" L4 x; c' W9 X; f
  330.                                   ((TIME) == ADC_SampleTime_112Cycles) || \0 Q8 N% j1 F$ f& X/ A; @" Z! h
  331.                                   ((TIME) == ADC_SampleTime_144Cycles) || \7 ]8 R5 i9 {* s; K# C
  332.                                   ((TIME) == ADC_SampleTime_480Cycles))
    ' t; s7 S4 y+ h7 R0 {! [
  333. /**/ B' \% a& b& m' W* c' k
  334.   * @}6 C3 @1 L& n: c% O. y" c$ S5 B
  335.   */
      L1 V7 M" l* g! G% P7 c/ v

  336. # B" v8 O+ E0 L. c- a5 ~$ x
  337. + T5 Y, h; Q6 c8 ~
  338. /** @defgroup ADC_external_trigger_edge_for_injected_channels_conversion
    4 e. D8 M. y0 s0 b2 b, g
  339.   * @{
    ) e0 B; ], n8 g% ?% y, ]3 I6 {. S
  340.   */
    5 I# Q$ n4 J1 B. j7 Y
  341. #define ADC_ExternalTrigInjecConvEdge_None          ((uint32_t)0x00000000)) s: @. g) w3 R1 k$ r
  342. #define ADC_ExternalTrigInjecConvEdge_Rising        ((uint32_t)0x00100000)
    7 F. b$ o  S1 E- y! i4 J
  343. #define ADC_ExternalTrigInjecConvEdge_Falling       ((uint32_t)0x00200000)- o6 k* x5 u' J8 E; E
  344. #define ADC_ExternalTrigInjecConvEdge_RisingFalling ((uint32_t)0x00300000)1 u' @  S, U% {8 B
  345. #define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigInjecConvEdge_None) || \5 ^+ M. f) x- }. K- d
  346.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_Rising) || \5 ^3 Y, G3 b% h
  347.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_Falling) || \* L$ |% Q, ~# x
  348.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_RisingFalling))
    7 Q; z# }/ [0 l
  349. : [) t" A) J, ^$ U2 G+ n7 d- q) s
  350. /**
    3 O. T8 Q5 X5 V  V, S
  351.   * @}
    + W" v( K' S$ C, I
  352.   */ # u  J% E) C: t3 d

  353. % _' g$ w  R- B$ q3 U

  354. 4 {' @, y) U- O- \' h: S& j
  355. /** @defgroup ADC_extrenal_trigger_sources_for_injected_channels_conversion
    8 k( F: O( M0 N; u2 H/ ^- W) W
  356.   * @{
    9 x9 v" e8 E6 ~: {( {  i
  357.   */
    9 J8 i* C5 N$ ]  v$ l# j
  358. #define ADC_ExternalTrigInjecConv_T1_CC4            ((uint32_t)0x00000000)7 g7 U3 _: P" y1 k/ e
  359. #define ADC_ExternalTrigInjecConv_T1_TRGO           ((uint32_t)0x00010000)) }! [0 n/ x$ }$ K' G7 `) [/ e6 y
  360. #define ADC_ExternalTrigInjecConv_T2_CC1            ((uint32_t)0x00020000)
    ! J) g5 G% V3 C7 x6 K
  361. #define ADC_ExternalTrigInjecConv_T2_TRGO           ((uint32_t)0x00030000)0 i' z, Y6 C' Y
  362. #define ADC_ExternalTrigInjecConv_T3_CC2            ((uint32_t)0x00040000)
    ! O, D- N. h3 Y: b2 X9 ]3 H
  363. #define ADC_ExternalTrigInjecConv_T3_CC4            ((uint32_t)0x00050000)& t( J7 ?- l5 i  d
  364. #define ADC_ExternalTrigInjecConv_T4_CC1            ((uint32_t)0x00060000): r. H' t2 Q3 Z! S* x3 t. D8 ~
  365. #define ADC_ExternalTrigInjecConv_T4_CC2            ((uint32_t)0x00070000)" n7 c# J# Q0 b
  366. #define ADC_ExternalTrigInjecConv_T4_CC3            ((uint32_t)0x00080000)
    8 X6 ]. j+ `4 [
  367. #define ADC_ExternalTrigInjecConv_T4_TRGO           ((uint32_t)0x00090000)/ h, h7 n* C% O2 I5 i$ W
  368. #define ADC_ExternalTrigInjecConv_T5_CC4            ((uint32_t)0x000A0000)+ {, V' b  ]/ U& W- s  p2 {# o
  369. #define ADC_ExternalTrigInjecConv_T5_TRGO           ((uint32_t)0x000B0000)
    " v. z# @  Y$ b4 L
  370. #define ADC_ExternalTrigInjecConv_T8_CC2            ((uint32_t)0x000C0000)
    # c3 S9 w/ A2 E5 g  M3 R0 ?
  371. #define ADC_ExternalTrigInjecConv_T8_CC3            ((uint32_t)0x000D0000)
    + `% K# ~* e0 v, j% Z. |4 v
  372. #define ADC_ExternalTrigInjecConv_T8_CC4            ((uint32_t)0x000E0000)6 }: B8 G5 T( L! d& `6 o, C# I% e6 S8 M
  373. #define ADC_ExternalTrigInjecConv_Ext_IT15          ((uint32_t)0x000F0000): ]) `+ m8 J% E, F, Z: H) y9 ?" A
  374. #define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \
    3 K/ o% M( J; o* Q( @9 a
  375.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \6 N2 Y" B7 |5 c
  376.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \! I+ V- ?( }( K/ B
  377.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \
    % b$ X& V) f. ^/ X+ N) Q& Y# U
  378.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC2) || \2 A; A3 n) j$ \& x7 \8 M4 N
  379.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \
    ' G3 g0 z8 D- b$ ~/ y5 e. \3 Q
  380.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC1) || \$ D5 d7 s4 L8 n2 Z; c
  381.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC2) || \* w- @& H9 U" p3 e9 \
  382.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \
    8 k& c/ i0 E9 E: `! Q4 H6 I0 K
  383.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \
    : _- o+ V! {0 N# n
  384.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4) || \, q, X2 w7 U( r) Y
  385.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \
    , ]7 e9 F  V# u
  386.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \
    % W- h' T" \3 P. c" N( P- N8 [1 s* [# y
  387.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC3) || \' y4 V, S9 J" l4 x
  388.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \: p0 P3 n$ v1 u. Y* p
  389.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15))* R/ q  }5 f' `& T' K, n2 M" r' j
  390. /*** H: I1 [4 i" B( T9 v
  391.   * @}
    $ q; M; V1 w0 ?' ]
  392.   */ 9 \2 Z; K$ c* V- Y. Q8 R
  393. 0 C  X& a0 m/ A3 t& l2 d
  394. + T2 @0 x, l2 J3 ~
  395. /** @defgroup ADC_injected_channel_selection : @5 y; r: p. ^. O! r, \0 r
  396.   * @{( e. S2 b1 h3 K: I& k( @7 P- {
  397.   */
    ! N& T+ F2 M; n! U# h* G* W0 q
  398. #define ADC_InjectedChannel_1                       ((uint8_t)0x14)! t5 {; Z& s' y' B7 h+ y# o3 u
  399. #define ADC_InjectedChannel_2                       ((uint8_t)0x18)
    2 ?2 J6 H, u" ]# M; T# o( ~
  400. #define ADC_InjectedChannel_3                       ((uint8_t)0x1C)
    ' G1 k/ b& W( u* G$ e
  401. #define ADC_InjectedChannel_4                       ((uint8_t)0x20)
    ! N3 U" a$ X$ u' s7 q, }
  402. #define IS_ADC_INJECTED_CHANNEL(CHANNEL) (((CHANNEL) == ADC_InjectedChannel_1) || \
    5 E4 l% U# b2 O
  403.                                           ((CHANNEL) == ADC_InjectedChannel_2) || \
    ' }2 M& o( \8 Z7 l6 N( C
  404.                                           ((CHANNEL) == ADC_InjectedChannel_3) || \3 j' J8 ]3 [% W1 o1 h
  405.                                           ((CHANNEL) == ADC_InjectedChannel_4))
    ' r6 J2 \3 O) {" h4 E3 g
  406. /**. b% t- D0 O7 B: g+ Q
  407.   * @}+ u& ?, r6 m* i# j, h4 d
  408.   */ 5 T3 I, c4 _4 a! ]; ]4 V" M

  409. 6 F% s7 p* W2 J' Q1 }

  410. * `0 M  X1 k5 D* U* t  N
  411. /** @defgroup ADC_analog_watchdog_selection
    ( G3 c& v! D* q, k4 u. x3 p
  412.   * @{' S: D% q2 n' \
  413.   */
    5 t/ h) q1 }# [# X: Y3 I
  414. #define ADC_AnalogWatchdog_SingleRegEnable         ((uint32_t)0x00800200)
    ! e9 r# D# `1 _  f5 o& v
  415. #define ADC_AnalogWatchdog_SingleInjecEnable       ((uint32_t)0x00400200)% h" q) r% O0 M: ]" H% ]
  416. #define ADC_AnalogWatchdog_SingleRegOrInjecEnable  ((uint32_t)0x00C00200)
    6 @# ~1 P6 p" Y! f
  417. #define ADC_AnalogWatchdog_AllRegEnable            ((uint32_t)0x00800000)4 g3 [7 D* M3 m
  418. #define ADC_AnalogWatchdog_AllInjecEnable          ((uint32_t)0x00400000), T6 S3 c% }+ x" P7 q
  419. #define ADC_AnalogWatchdog_AllRegAllInjecEnable    ((uint32_t)0x00C00000)9 d$ h) ]+ T% U- {$ G, d( r, B# T
  420. #define ADC_AnalogWatchdog_None                    ((uint32_t)0x00000000)
    7 e( l5 T4 {$ Y5 Q) }4 d& h/ Q
  421. #define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_AnalogWatchdog_SingleRegEnable) || \# [5 l7 G' ^- f
  422.                                           ((WATCHDOG) == ADC_AnalogWatchdog_SingleInjecEnable) || \. \' B  a* T+ N0 {
  423.                                           ((WATCHDOG) == ADC_AnalogWatchdog_SingleRegOrInjecEnable) || \
    + a0 ]7 k$ S7 g* g9 O; X
  424.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllRegEnable) || \9 `3 @8 o+ {# n  r) G" y/ s
  425.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllInjecEnable) || \& T! B' Q% d6 }( w: U
  426.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllRegAllInjecEnable) || \
    , Y0 Q% ~) u8 {! P: m$ z  f
  427.                                           ((WATCHDOG) == ADC_AnalogWatchdog_None))% Q9 s& N  I$ F, B# ~
  428. /**
    $ [# h4 M) E  W: [/ u
  429.   * @}
    : M" \2 H6 N2 l3 n% y
  430.   */
    7 P' Z: V7 Z- T9 [
  431. / J& f2 I* E: x' f: V
  432. + T* ]% l6 O* R% L" V! G5 D" ^
  433. /** @defgroup ADC_interrupts_definition
    5 `1 W& H, ?2 f+ b  s3 V0 D5 F) |
  434.   * @{. [4 i3 ]; b# h$ G6 I' c; x. a
  435.   */ ' f$ b. c& o8 z+ P
  436. #define ADC_IT_EOC                                 ((uint16_t)0x0205)  
    5 g% `& |3 C$ O. z2 v& }( r
  437. #define ADC_IT_AWD                                 ((uint16_t)0x0106)  & B# R, W! ^+ u5 E& F3 R
  438. #define ADC_IT_JEOC                                ((uint16_t)0x0407)  7 L$ Z5 m( E- V
  439. #define ADC_IT_OVR                                 ((uint16_t)0x201A)  
    4 E& m' P2 b6 p3 |! p
  440. #define IS_ADC_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \
    * r% X. f- v2 z- @
  441.                        ((IT) == ADC_IT_JEOC)|| ((IT) == ADC_IT_OVR))
    % U, D) K; J, e; R/ l
  442. /**' \; R" h7 k8 [) d& A
  443.   * @}
    8 O1 X. Q2 @7 {5 T, y5 D4 j7 h
  444.   */ ) i- t7 b) T) E$ X

  445. # _) N5 g2 r0 l; O5 O

  446. 5 Q2 I- m* s0 ^/ u
  447. /** @defgroup ADC_flags_definition ( \7 ^! S6 C1 x9 v3 B2 c5 w) l
  448.   * @{
    ) w$ t) b& d; b+ |  f
  449.   */
    8 J8 X; P; B0 w& o
  450. #define ADC_FLAG_AWD                               ((uint8_t)0x01)
    . [3 I/ c/ q9 j: C5 w* Q0 R
  451. #define ADC_FLAG_EOC                               ((uint8_t)0x02)
    3 F% S1 B8 a: J  L  n
  452. #define ADC_FLAG_JEOC                              ((uint8_t)0x04)
    2 @# `- ~, s) P" U: s  O+ ~( t" x
  453. #define ADC_FLAG_JSTRT                             ((uint8_t)0x08)
    9 U  w& w) K6 s4 \' L2 V
  454. #define ADC_FLAG_STRT                              ((uint8_t)0x10)
      V' Y" X. y) b8 i# F8 B
  455. #define ADC_FLAG_OVR                               ((uint8_t)0x20)   $ F0 i+ D( @* ?* R& Z+ o% f: t
  456. . E9 D5 o0 j. \! A. u
  457. #define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xC0) == 0x00) && ((FLAG) != 0x00))   
    7 ^9 X* a: `2 }' C: R- K
  458. #define IS_ADC_GET_FLAG(FLAG) (((FLAG) == ADC_FLAG_AWD) || \/ F# J4 x) z2 q5 E% i+ s
  459.                                ((FLAG) == ADC_FLAG_EOC) || \
    6 j' I- ~& w1 q: b' _
  460.                                ((FLAG) == ADC_FLAG_JEOC) || \
    9 ]% q6 G# q& ~
  461.                                ((FLAG)== ADC_FLAG_JSTRT) || \
    / f# p7 A9 d% H, P2 `
  462.                                ((FLAG) == ADC_FLAG_STRT) || \$ S7 k8 \# M, A0 {2 ]6 b, _
  463.                                ((FLAG)== ADC_FLAG_OVR))     
    7 _- r9 f; _: i7 C8 p5 v
  464. /**
    ' Q1 [7 r' H2 X3 [. e" t* R
  465.   * @}
    - \$ m! Q2 y& M. `, f
  466.   */ # x9 E% ]+ a  R) i. w

  467. 2 t4 Y: R7 _' Q" l4 h9 }9 o. Z

  468. ; f! z: d( H# n. G5 {/ e* [: }( |7 P
  469. /** @defgroup ADC_thresholds
    5 Q1 i6 K3 ~' L& Z
  470.   * @{; }+ w4 r% z% G. I8 V: n
  471.   */   C' W  L  _* S5 Z
  472. #define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFF)  G: M" P' U' ?, q' G8 P7 x% F7 g
  473. /**
    ; \- e/ I; k- c
  474.   * @}8 d3 }4 u" K3 ~4 j: K0 \6 F
  475.   */ ( I3 x" Z; N7 T0 r  A! t: W) n8 M

  476. 3 C& z: b* I4 W" g

  477. $ ]8 E8 N* `$ [) G8 Y! W/ I
  478. /** @defgroup ADC_injected_offset   @( L# H; d3 v3 [( a
  479.   * @{4 X- h  s+ D8 \& b! Z
  480.   */ : S3 _- A, m+ ?
  481. #define IS_ADC_OFFSET(OFFSET) ((OFFSET) <= 0xFFF)
    " h9 e& E( {! I  J4 P
  482. /**( u; l; x1 }" D& _
  483.   * @}
    ! S$ Q/ D9 q" V
  484.   */
    + M5 H2 O' r2 h0 H' P% K

  485. 5 W; ~! z0 b+ j2 ~7 K
  486. * g1 p4 Z/ e* A$ G) U
  487. /** @defgroup ADC_injected_length
    9 C. h! b0 m. |) s* @1 c8 ]
  488.   * @{9 M& q- D, F! \0 d0 F/ D) U7 D
  489.   */
    * D  U+ M9 A! F& w3 |0 N
  490. #define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x4))% X* m- N. R2 W' B8 `* o" b
  491. /**
    ' t2 N" v, u, A8 _5 v) b/ @
  492.   * @}
    3 W9 D; Z- W4 N! t2 w  o
  493.   */
    7 h4 O4 D9 r  f5 S7 K5 T( Q7 B9 h

  494. - X" c  A1 Z8 F" @* S

  495. 1 v: x2 B! Z$ P1 {. b6 B% r5 `' r
  496. /** @defgroup ADC_injected_rank - `. P: G/ N5 D$ l4 O
  497.   * @{
    4 e$ l8 x9 b$ O
  498.   */
    ( i0 m( g! x: J% D
  499. #define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x4))
    ' R2 N% G) R6 p' w0 G6 ^) J3 s
  500. /**  D; D) u3 A) w. s$ `
  501.   * @}' b6 l" k( w4 V% |0 _: u: H3 i' n4 K
  502.   */
    , q6 V5 H4 U- ^& k% o4 f
  503. " T3 [1 q; [, {8 G0 D
  504. $ d: s& b6 m' u) o- K1 ]
  505. /** @defgroup ADC_regular_length
    : C/ E% o- e- ~6 c5 L6 P
  506.   * @{
    & b: q- y1 Z+ {' x- k1 S
  507.   */
    " y, Y7 b+ ~4 v; T
  508. #define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x10))
    3 H. c0 o. x2 y- s  T
  509. /**+ @4 [$ P" L) }9 Z2 I
  510.   * @}/ X. D. a9 X* q$ p
  511.   */ # s9 x0 ]1 T3 f

  512.   p4 P6 C+ G9 Q5 f9 n6 O
  513. - |9 z* h4 q  H$ G
  514. /** @defgroup ADC_regular_rank
    8 @8 H  u2 u3 Z! p6 T+ m
  515.   * @{% I. R! o& ^! N( _  k5 }
  516.   */ % @. |6 |' s' ?. k# d0 N8 L: \
  517. #define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x10))
    - W( ^5 C" r: X  p2 L  U1 h' Z
  518. /**4 k4 d' N7 l, \4 }
  519.   * @}) ~. X" J; W; o  a& T! S
  520.   */ ; `* ?$ K3 m( X& H, i

  521. ' E. D: y; p* N  _6 l# w7 h; b

  522. 0 U& L. N2 B: I2 y& A
  523. /** @defgroup ADC_regular_discontinuous_mode_number + [! h- u' b/ s/ [5 I  e
  524.   * @{0 d" U2 h( x5 }% o4 M0 i
  525.   */ / U" I: P7 ~# i& G+ @2 V: _9 v
  526. #define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 0x1) && ((NUMBER) <= 0x8))
    & F: @3 W0 Q; ~! V1 h; U
  527. /**7 U' T  L. h% i( K0 p  Q
  528.   * @}
    - j; ?9 _8 j: L  R" C
  529.   */
复制代码

. W* L  _+ F9 p% J: }* l" E03. 相关函数# p0 e6 l+ w+ ^0 Z9 k; Z# J& \9 I
  1. /*  Function used to set the ADC configuration to the default reset state *****/  
    6 c* H7 F3 L$ s5 b9 J- g' G& z
  2. void ADC_DeInit(void);
    , ]7 P4 V4 a( L" p9 p3 K2 c' Y

  3. - y+ P, R" h+ G0 p
  4. /* Initialization and Configuration functions *********************************/
    0 H6 }2 w) \' Y; S
  5. void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
    5 k% q7 D5 b/ T, h9 S
  6. void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
    % s9 {+ ]  F; S4 e
  7. void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
    4 x: ^6 q. U1 Q1 _; G& ^. o
  8. void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);3 ?9 g  y% e2 P! O  r7 v
  9. void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);' {- V$ |; o6 i& j/ ?" a/ \- F

  10. " Q3 f! ~# {  P4 H
  11. /* Analog Watchdog configuration functions ************************************/  l1 x+ Q- k4 @6 K. K9 D
  12. void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);, o4 K1 L- q6 M, H
  13. void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold);
    . J; Q- S( C% h* P6 U
  14. void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);
    : ]! A$ I, ?2 Y0 N

  15. 6 M- S0 ~, Y1 f' _4 h
  16. /* Temperature Sensor, Vrefint and VBAT management functions ******************/3 X0 v/ S' N; E5 _8 k- J8 {$ g. ]
  17. void ADC_TempSensorVrefintCmd(FunctionalState NewState);
    3 h, i# v: D* j+ M
  18. void ADC_VBATCmd(FunctionalState NewState);
    - Z$ c! \- C- N. r4 Z5 R

  19. 8 n7 E! Q% h% p* v
  20. /* Regular Channels Configuration functions ***********************************/
    " H* u  v( Y2 t$ t/ U. v+ e
  21. void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);" O/ F: ]! A- k$ c
  22. void ADC_SoftwareStartConv(ADC_TypeDef* ADCx);
    ( v: y: Y$ q. E1 w7 K6 x1 \
  23. FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);
      o. l1 v5 r% p+ p' j: ]" T
  24. void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    ' e2 [6 U& |3 h; g$ I' W
  25. void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);- z, |1 Q( n( Z2 G' l2 p0 G
  26. void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);1 N: T% I+ ~' f1 j
  27. void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);' H; r" _/ O% _8 O/ r1 w
  28. uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);+ |5 y) n8 m, j/ S" D# N0 |( z* U
  29. uint32_t ADC_GetMultiModeConversionValue(void);7 e- y' R2 ]2 Z% S. K8 f- ^

  30. & n& B* i. r( e( f! Y4 r
  31. /* Regular Channels DMA Configuration functions *******************************/
    2 D, }/ `$ T4 f/ _8 T
  32. void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    % Y/ S0 O  T0 n6 W) N$ _$ x
  33. void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState);3 }5 u3 M( E2 Q& S8 S+ x
  34. void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState);. A# M3 g0 m/ e

  35. * D# W# e: u, v4 Y
  36. /* Injected channels Configuration functions **********************************/$ @2 N/ M) n- N/ s9 G$ _% j8 e* c
  37. void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
    + Y( e8 H1 u# X  G6 @$ j- Y
  38. void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);  W3 F( n. `# r6 ]7 ?
  39. void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);
    # P; J, f) \1 S4 e
  40. void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);( X. {( W" I  `9 c3 b
  41. void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge);0 N8 f9 z" G, E4 l) R: a( N  k
  42. void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx);
    $ S1 \" K! D- G5 c! Z8 i4 |6 h
  43. FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
    % l3 n9 x, N( z. R0 W- }/ _" H
  44. void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);( m! A2 S9 K+ Y' _2 v( n
  45. void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);% ^2 j' [1 J) A
  46. uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);5 R$ _+ C, Y6 D" C' H
  47. ' ~+ |5 f+ ~3 ]# e  T. n
  48. /* Interrupts and flags management functions **********************************/; F. f$ V  y2 q
  49. void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);8 b2 G' `: M* E/ f- }
  50. FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
    0 P# C" `- {9 ^/ f
  51. void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);8 a; \* \; H3 x5 b3 R% o6 ]2 L
  52. ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);
    ; t0 F3 O, U+ g, p
  53. void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);
复制代码
: C9 y0 Q( |2 V2 L+ ^5 g
04. 结构体封装/ [; ^2 H- T5 A: F; b/ ~
  1. /**
    # z( [6 a( L) F* A5 O' f
  2.   * @brief Analog to Digital Converter  ! [% X* y/ i! m
  3.   */
    $ \* L0 y* l( v5 ~
  4. / R, O' n8 k! z1 w( S" A. ]
  5. typedef struct
    ) t; E8 w9 D% j0 j; {' h/ v- z
  6. {* a4 u$ j9 \: W4 c. p, H8 ~
  7.   __IO uint32_t SR;     /*!< ADC status register,                         Address offset: 0x00 */
    " F9 H1 ^# `8 x1 `. k
  8.   __IO uint32_t CR1;    /*!< ADC control register 1,                      Address offset: 0x04 */      3 [$ X) F7 q4 H9 [8 R2 _
  9.   __IO uint32_t CR2;    /*!< ADC control register 2,                      Address offset: 0x08 */
    " ]6 u9 }  |0 C7 W( t4 p0 f
  10.   __IO uint32_t SMPR1;  /*!< ADC sample time register 1,                  Address offset: 0x0C */
    # E. B/ Q& E% m; B$ `( d& b
  11.   __IO uint32_t SMPR2;  /*!< ADC sample time register 2,                  Address offset: 0x10 */: d# p/ w; Y4 ^7 r6 B! K: Q
  12.   __IO uint32_t JOFR1;  /*!< ADC injected channel data offset register 1, Address offset: 0x14 */9 c6 |! U6 N  r# v8 l1 `
  13.   __IO uint32_t JOFR2;  /*!< ADC injected channel data offset register 2, Address offset: 0x18 */
    4 @& r7 t, a$ z: G9 g0 \( B
  14.   __IO uint32_t JOFR3;  /*!< ADC injected channel data offset register 3, Address offset: 0x1C */6 ^; b, [( y% W) M+ I+ o
  15.   __IO uint32_t JOFR4;  /*!< ADC injected channel data offset register 4, Address offset: 0x20 *// i2 M1 r) I" o( @8 g
  16.   __IO uint32_t HTR;    /*!< ADC watchdog higher threshold register,      Address offset: 0x24 */: M5 c7 a) ~! Y8 _+ y5 j1 e
  17.   __IO uint32_t LTR;    /*!< ADC watchdog lower threshold register,       Address offset: 0x28 */
    0 h0 ^0 f& b) F7 n# w
  18.   __IO uint32_t SQR1;   /*!< ADC regular sequence register 1,             Address offset: 0x2C */; r1 M) |9 G% x- O8 W9 {, s) K
  19.   __IO uint32_t SQR2;   /*!< ADC regular sequence register 2,             Address offset: 0x30 */
    5 A  P, U7 c4 K- h+ L( ^: V
  20.   __IO uint32_t SQR3;   /*!< ADC regular sequence register 3,             Address offset: 0x34 */3 G1 G6 m* c- l! g1 h  `
  21.   __IO uint32_t JSQR;   /*!< ADC injected sequence register,              Address offset: 0x38 */( Z# U: n9 |; R0 K
  22.   __IO uint32_t JDR1;   /*!< ADC injected data register 1,                Address offset: 0x3C */4 q" i$ a" L; J* x  L) i
  23.   __IO uint32_t JDR2;   /*!< ADC injected data register 2,                Address offset: 0x40 */
    7 e3 B9 v8 Z8 G% p: I$ c
  24.   __IO uint32_t JDR3;   /*!< ADC injected data register 3,                Address offset: 0x44 */
    " S. S% l( v' f* c4 v0 w7 ^- z
  25.   __IO uint32_t JDR4;   /*!< ADC injected data register 4,                Address offset: 0x48 */
    4 B8 L# T1 O8 J4 J: i
  26.   __IO uint32_t DR;     /*!< ADC regular data register,                   Address offset: 0x4C *// F7 ^5 W, K+ _6 ~( ?  f
  27. } ADC_TypeDef;9 d$ ~6 O0 W# M# Z& o+ U

  28. 8 `$ f. W0 P. @: t; i# Y: b! F
复制代码
  H4 n- F, l; o
赞 收藏 评论0 发布时间:2022-6-14 17:06

举报

0个回答

所属标签

相似技术帖

官网相关资源

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