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

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

[复制链接]
STMCU小助手 发布时间:2022-3-30 11:00
01. ADC概述
, G' L! E9 x% G7 P- C5 g2 {0 ~STM32F4xx 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32F4 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 19 个通道,可测量 16 个外部源、2 个内部源和 Vbat 通道的信号。这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。" E% U" F0 M7 |1 i( s

' l" [5 l" [7 w相关文件为 stm32f4xx_adc.h和 stm32f4xx_adc.c。9 d, W8 P7 F0 I; y9 A
: ^# j3 {/ V0 R  P
02. 相关类型
( j$ [: y7 Q  z0 R' l/ f% d2 P
  1. /** 2 `) H8 ^2 n3 U! ^
  2.   * @brief   ADC Init structure definition  
    ( |/ ?3 l. o0 Q* u/ p$ l) C! H
  3.   */ / l' j9 J) d& g9 \( I  v0 R/ c
  4. typedef struct! H" `  M8 R+ e; ^
  5. {
    " x& U# A2 g  n3 ~" Y7 {4 B1 Y
  6.   uint32_t ADC_Resolution;                /*!< Configures the ADC resolution dual mode.
      J, O/ B, x) v
  7.                                                This parameter can be a value of @ref ADC_resolution */                                   
    + M2 t/ T. A; w  F: z1 t$ N/ q& q
  8.   FunctionalState ADC_ScanConvMode;       /*!< Specifies whether the conversion
    & ~& ^, n1 }5 s, r" S0 l0 x, h6 X& p
  9.                                                is performed in Scan (multichannels)
    % _% z! V# @, m* j
  10.                                                or Single (one channel) mode.
    5 B0 ]8 Z( U- v" I8 t: e
  11.                                                This parameter can be set to ENABLE or DISABLE */ ' F( `7 H! _- e7 q  f- \) v
  12.   FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion . _+ w9 C. e5 c
  13.                                                is performed in Continuous or Single mode.$ U* @5 w% {  T4 s
  14.                                                This parameter can be set to ENABLE or DISABLE. */: z+ c3 f- ~, s0 f* B
  15.   uint32_t ADC_ExternalTrigConvEdge;      /*!< Select the external trigger edge and
    + m8 |/ P: L) q9 I' G' _1 d5 ?
  16.                                                enable the trigger of a regular group. , O5 I" u& ?% Q2 m$ S! t
  17.                                                This parameter can be a value of
    % T6 k# Z& Z4 i& j
  18.                                                @ref ADC_external_trigger_edge_for_regular_channels_conversion */
    : g. G2 J' V! b. ~( H0 z, k
  19.   uint32_t ADC_ExternalTrigConv;          /*!< Select the external event used to trigger
    ( |" j0 j: r% `5 _* B, M, x
  20.                                                the start of conversion of a regular group.
    - ]9 b  h& h- L! q# Z
  21.                                                This parameter can be a value of . u# Y" _6 i) X- o' i& u& J
  22.                                                @ref ADC_extrenal_trigger_sources_for_regular_channels_conversion */
    6 o) b/ S9 l, }+ A
  23.   uint32_t ADC_DataAlign;                 /*!< Specifies whether the ADC data  alignment
    ! g( e$ o- S5 }9 L- K
  24.                                                is left or right. This parameter can be
    ; \$ c5 l: w+ L+ O8 p& }
  25.                                                a value of @ref ADC_data_align */, [% Y8 D" D# }! S
  26.   uint8_t  ADC_NbrOfConversion;           /*!< Specifies the number of ADC conversions
      }! H/ Q' O9 V9 g& Q5 u
  27.                                                that will be done using the sequencer for
    # A' ^6 @) l0 ^4 Q) V* y& w
  28.                                                regular channel group.
    ) d1 K3 U, H8 ~/ n1 D4 ?% B4 q
  29.                                                This parameter must range from 1 to 16. */
    6 i0 w5 b' k6 P$ P) M
  30. }ADC_InitTypeDef;0 l6 l! o8 C, w# O' J/ R9 o9 q
  31. # c! x+ d( Y' ^1 j5 E
  32. /**
    # K6 J/ y. M2 Y4 }( s
  33.   * @brief   ADC Common Init structure definition  . e! R3 x8 X) a
  34.   */
    $ a  V  Q; C. j! b+ d
  35. typedef struct + _" \: I5 X6 H1 c
  36. {
    # y# V" a+ ?/ j- T% n
  37.   uint32_t ADC_Mode;                      /*!< Configures the ADC to operate in
    3 y) q8 z0 `; I
  38.                                                independent or multi mode. 1 Z7 Q( s  V, w+ h4 z0 U: H
  39.                                                This parameter can be a value of @ref ADC_Common_mode */                                             
    0 h: b8 [1 b" {/ H
  40.   uint32_t ADC_Prescaler;                 /*!< Select the frequency of the clock   o; b. R5 {6 k. y" B# C+ F
  41.                                                to the ADC. The clock is common for all the ADCs.
      T) w! p7 G+ ~3 T( p
  42.                                                This parameter can be a value of @ref ADC_Prescaler */
    ! p2 Z: s% p6 H: E* Z* k+ f+ L
  43.   uint32_t ADC_DMAAccessMode;             /*!< Configures the Direct memory access
    . |, G, h5 O  [# {: G$ s
  44.                                               mode for multi ADC mode.
    5 j- U  b, L: ?$ ]6 r6 F# j' [7 z
  45.                                                This parameter can be a value of , R" E8 C" p0 k* }9 d1 N* O9 h
  46.                                                @ref ADC_Direct_memory_access_mode_for_multi_mode */9 f$ E# g8 S2 z6 i% Q
  47.   uint32_t ADC_TwoSamplingDelay;          /*!< Configures the Delay between 2 sampling phases.
    # t* q* z7 @+ S3 n% L
  48.                                                This parameter can be a value of
    ' b! U4 Q3 b9 n
  49.                                                @ref ADC_delay_between_2_sampling_phases */
    3 U5 V' {$ E( ]1 A( D4 V
  50.   {- F* l" M6 P& ?
  51. }ADC_CommonInitTypeDef;
    . Y  d: k% {( w( G3 e0 W% ~

  52. ! r5 C5 J0 C0 U% f" v% v% w
  53. ' y1 B8 I9 T+ H/ p% `. z
  54. /* Exported constants --------------------------------------------------------*/
    ) e$ i4 s8 R4 Z7 K5 l; c8 k
  55.   W% Z4 X' ~- v4 O% o* B
  56. /** @defgroup ADC_Exported_Constants
    3 L$ C  M+ ?( P  a0 S7 d3 I
  57.   * @{
    ; ~  L; T4 O; C; G  w
  58.   */
    ; W, u$ c2 P/ g
  59. #define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \
    3 F8 w1 Q, S4 v8 ]3 {( Y/ G& B& D
  60.                                    ((PERIPH) == ADC2) || \% ^/ D" T4 p  R7 |- \- ^3 Y4 e, O
  61.                                    ((PERIPH) == ADC3))  
    # J. i7 }" ]. |9 K. ^
  62. $ H' ]7 `/ g- B7 _- |1 z& }2 [
  63. /** @defgroup ADC_Common_mode & k% S% J4 Z) g8 I2 r1 }
  64.   * @{+ |6 H% |/ k1 B7 q
  65.   */ 0 \; d" G5 y: \7 z* b- g
  66. #define ADC_Mode_Independent                       ((uint32_t)0x00000000)      
    ! A; U/ b' _( U% ^. e
  67. #define ADC_DualMode_RegSimult_InjecSimult         ((uint32_t)0x00000001)
    2 C' `8 u0 C" ^
  68. #define ADC_DualMode_RegSimult_AlterTrig           ((uint32_t)0x00000002)) r, `5 b; T6 u
  69. #define ADC_DualMode_InjecSimult                   ((uint32_t)0x00000005)
    - g+ F# N: N4 h& R& s8 z" ]( v
  70. #define ADC_DualMode_RegSimult                     ((uint32_t)0x00000006)
    2 I* x# M# o8 B6 P& s) G; T1 y
  71. #define ADC_DualMode_Interl                        ((uint32_t)0x00000007); w# a! o) _. Y" ?) k$ E
  72. #define ADC_DualMode_AlterTrig                     ((uint32_t)0x00000009)
    5 f/ o" r8 w1 N" \
  73. #define ADC_TripleMode_RegSimult_InjecSimult       ((uint32_t)0x00000011); q& L9 v5 @* z' b- W2 {
  74. #define ADC_TripleMode_RegSimult_AlterTrig         ((uint32_t)0x00000012)
    " y) N8 D; @* @7 [
  75. #define ADC_TripleMode_InjecSimult                 ((uint32_t)0x00000015)
    8 ~' p6 u2 e+ j* l% n% P+ l
  76. #define ADC_TripleMode_RegSimult                   ((uint32_t)0x00000016)# k( p+ h& t  M. S  c
  77. #define ADC_TripleMode_Interl                      ((uint32_t)0x00000017); s: g" F# Q, F, T7 H
  78. #define ADC_TripleMode_AlterTrig                   ((uint32_t)0x00000019)
    ! L6 p) k" _* N0 W5 ^+ b" p% [
  79. #define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \
    & O6 ^2 p  g& |5 g4 S# Y( k
  80.                            ((MODE) == ADC_DualMode_RegSimult_InjecSimult) || \
    + y9 j4 P- l/ h5 r3 `
  81.                            ((MODE) == ADC_DualMode_RegSimult_AlterTrig) || \
      e' U% k* }% Z9 V' k% O3 G1 W) q
  82.                            ((MODE) == ADC_DualMode_InjecSimult) || \7 d2 D# |! N5 l2 z0 n" Q/ e
  83.                            ((MODE) == ADC_DualMode_RegSimult) || \. W9 f7 K6 q3 j0 B* q! ^  v7 `# G
  84.                            ((MODE) == ADC_DualMode_Interl) || \
    $ ^" F" i. h2 d6 i) O2 R9 Y+ k' J: g
  85.                            ((MODE) == ADC_DualMode_AlterTrig) || \- \* c+ x  F$ S" D' g
  86.                            ((MODE) == ADC_TripleMode_RegSimult_InjecSimult) || \
    ) p1 t8 _6 C; u% u
  87.                            ((MODE) == ADC_TripleMode_RegSimult_AlterTrig) || \
    , S# g1 c3 @9 `1 [
  88.                            ((MODE) == ADC_TripleMode_InjecSimult) || \6 G* _3 |- Z$ N1 `  ^  Z& T' @
  89.                            ((MODE) == ADC_TripleMode_RegSimult) || \8 `- ^7 ]6 [' W, S5 L: `, X
  90.                            ((MODE) == ADC_TripleMode_Interl) || \# U; d8 S" d* o. o: r3 T$ i
  91.                            ((MODE) == ADC_TripleMode_AlterTrig))
    * S: s' O& P! x5 l9 w! X" g% P9 B
  92. /**
    8 \- I& Z, C- K6 y
  93.   * @}
    ! N4 n2 L* A$ W0 V7 Z
  94.   */
    4 w* E* J& M4 V/ e% _. Z9 o2 k

  95. 3 @, r! E# S4 P# u# l( s8 ^
  96. / N0 ~% a9 v. v5 S2 Z$ {
  97. /** @defgroup ADC_Prescaler ) j0 x8 F) O* Q, j& c
  98.   * @{
    & O) ?% I. O6 |/ i
  99.   */ 7 P; C4 K2 x0 @% }
  100. #define ADC_Prescaler_Div2                         ((uint32_t)0x00000000)2 |& U# B5 h4 y) @2 E5 p
  101. #define ADC_Prescaler_Div4                         ((uint32_t)0x00010000)% ]3 Z, e( `2 D2 W: X- C8 H
  102. #define ADC_Prescaler_Div6                         ((uint32_t)0x00020000)
    & |- I+ v! k0 n' P4 V: w$ k7 O: J
  103. #define ADC_Prescaler_Div8                         ((uint32_t)0x00030000)* p9 Z& b* |. ~* p: R+ F% w
  104. #define IS_ADC_PRESCALER(PRESCALER) (((PRESCALER) == ADC_Prescaler_Div2) || \
    $ r8 k  P3 o4 M* E2 h! ?
  105.                                      ((PRESCALER) == ADC_Prescaler_Div4) || \
    & F* `- Q% N% \8 p3 e
  106.                                      ((PRESCALER) == ADC_Prescaler_Div6) || \
    1 ?" z# z0 A3 J) x. W( t/ n
  107.                                      ((PRESCALER) == ADC_Prescaler_Div8))% }5 K0 p4 \8 R" a
  108. /**1 ]) |* W- c6 p. [% A
  109.   * @}) F4 G" }. W; H
  110.   */
    % G, i4 F& }7 h& F+ y3 Q% G

  111. & ^& b& r6 j, z4 h

  112. " n7 ~4 u1 w. B, m- e
  113. /** @defgroup ADC_Direct_memory_access_mode_for_multi_mode ( R# B% C" z8 S
  114.   * @{- S" f$ Q6 O7 N6 ^
  115.   */
    6 U& o5 z/ G$ T0 c( e, O
  116. #define ADC_DMAAccessMode_Disabled      ((uint32_t)0x00000000)     /* DMA mode disabled */
    " c& p0 p/ L: o  S: i+ n
  117. #define ADC_DMAAccessMode_1             ((uint32_t)0x00004000)     /* DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)*/, I% h# g$ v% T
  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)*/
    , F& E5 Q  u7 q" W
  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) */6 ~' I3 ^' I! s9 \
  120. #define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAAccessMode_Disabled) || \
    ' }- o* ]& b; u; _
  121.                                       ((MODE) == ADC_DMAAccessMode_1) || \- j$ _$ J$ m' ~1 f5 E7 {
  122.                                       ((MODE) == ADC_DMAAccessMode_2) || \( ?, f% Y4 c0 l9 P2 C9 F- N
  123.                                       ((MODE) == ADC_DMAAccessMode_3))5 A# m' V% x' F  i& w% Z

  124. * x* ^9 Z! e! C% }7 E: E
  125. /**
      x7 G" P- j5 y+ e* G9 C% r3 I1 J
  126.   * @}; a9 ]* m6 E8 }3 t5 l
  127.   */
    - N# \6 e2 E. D1 B& r- D8 O6 ^- V

  128. 4 B6 l/ m. }: c! f' C( s9 k
  129. , K& b) h# s' t% u5 @0 K
  130. /** @defgroup ADC_delay_between_2_sampling_phases
    ! q8 s% @) @) P5 f3 y; @
  131.   * @{
    6 r4 F, ~4 O% w; L
  132.   */ 2 X; V! ?$ f" W5 P4 ]: O
  133. #define ADC_TwoSamplingDelay_5Cycles               ((uint32_t)0x00000000)# {* P: `3 T. e% C
  134. #define ADC_TwoSamplingDelay_6Cycles               ((uint32_t)0x00000100)
    5 i9 T3 {$ M; o% z
  135. #define ADC_TwoSamplingDelay_7Cycles               ((uint32_t)0x00000200)
    8 {# ?# m: x* E2 W" [- C0 F$ W
  136. #define ADC_TwoSamplingDelay_8Cycles               ((uint32_t)0x00000300)
    # t* X  t! ~2 c9 N1 U: B( y
  137. #define ADC_TwoSamplingDelay_9Cycles               ((uint32_t)0x00000400)
    5 Q3 N5 k( v$ O5 M, k6 o2 d% P# [
  138. #define ADC_TwoSamplingDelay_10Cycles              ((uint32_t)0x00000500)
    " g  g( u- }7 f/ A3 V
  139. #define ADC_TwoSamplingDelay_11Cycles              ((uint32_t)0x00000600)
      @! R% h  g7 p3 m' l! m  I
  140. #define ADC_TwoSamplingDelay_12Cycles              ((uint32_t)0x00000700)" k' W  T' L5 W' \
  141. #define ADC_TwoSamplingDelay_13Cycles              ((uint32_t)0x00000800). e" b2 ?7 C. W* W: {/ M; }
  142. #define ADC_TwoSamplingDelay_14Cycles              ((uint32_t)0x00000900)
    3 u2 T" ?$ C2 ]. j' L7 w
  143. #define ADC_TwoSamplingDelay_15Cycles              ((uint32_t)0x00000A00)3 h7 @# I3 b7 I, U* H6 w$ F
  144. #define ADC_TwoSamplingDelay_16Cycles              ((uint32_t)0x00000B00)
    3 Q/ O3 a& c) D5 ]
  145. #define ADC_TwoSamplingDelay_17Cycles              ((uint32_t)0x00000C00)( W6 Q& m4 e( ]
  146. #define ADC_TwoSamplingDelay_18Cycles              ((uint32_t)0x00000D00)
    % u8 y5 H0 q2 q9 C3 Q
  147. #define ADC_TwoSamplingDelay_19Cycles              ((uint32_t)0x00000E00). D% f; g& J3 V# f9 k: e* y2 `
  148. #define ADC_TwoSamplingDelay_20Cycles              ((uint32_t)0x00000F00)% S& m. n. m% i" b6 Z
  149. #define IS_ADC_SAMPLING_DELAY(DELAY) (((DELAY) == ADC_TwoSamplingDelay_5Cycles) || \
    3 t2 l. L7 f3 j) |/ ?. f
  150.                                       ((DELAY) == ADC_TwoSamplingDelay_6Cycles) || \
    6 z+ U5 Z0 D( V' ~( c3 T
  151.                                       ((DELAY) == ADC_TwoSamplingDelay_7Cycles) || \
    - A9 H! N' G# k' s  a( o
  152.                                       ((DELAY) == ADC_TwoSamplingDelay_8Cycles) || \% Q* l, E/ l' @! w- B+ [, o6 H
  153.                                       ((DELAY) == ADC_TwoSamplingDelay_9Cycles) || \  J. @) ]* B1 x8 Z+ n9 ~. D
  154.                                       ((DELAY) == ADC_TwoSamplingDelay_10Cycles) || \
    4 _0 Z' K* b4 Y+ v. ^
  155.                                       ((DELAY) == ADC_TwoSamplingDelay_11Cycles) || \
    4 r- \8 ]- {7 y
  156.                                       ((DELAY) == ADC_TwoSamplingDelay_12Cycles) || \! U: x% n& W. j5 Y* X$ l' z
  157.                                       ((DELAY) == ADC_TwoSamplingDelay_13Cycles) || \5 j! G1 S$ O) V
  158.                                       ((DELAY) == ADC_TwoSamplingDelay_14Cycles) || \& h7 |+ T" J8 N: E! w8 B9 H$ M
  159.                                       ((DELAY) == ADC_TwoSamplingDelay_15Cycles) || \& ^' s0 c* ?; a6 M# Y% ]+ h
  160.                                       ((DELAY) == ADC_TwoSamplingDelay_16Cycles) || \
    : |3 B( X% e/ P- [# e; u
  161.                                       ((DELAY) == ADC_TwoSamplingDelay_17Cycles) || \
    & Q! U8 f- @3 X6 Q# M
  162.                                       ((DELAY) == ADC_TwoSamplingDelay_18Cycles) || \  S, H, y$ [  r$ `& Y
  163.                                       ((DELAY) == ADC_TwoSamplingDelay_19Cycles) || \
    0 f4 F& H4 v/ X# y' R; j# ]2 k
  164.                                       ((DELAY) == ADC_TwoSamplingDelay_20Cycles))9 ]2 g: O! _9 x8 x3 Y

  165. ! r, f6 d3 e3 m1 n) U$ S
  166. /**
    2 J' ~: y8 F8 c
  167.   * @}0 }9 z" N4 h5 a" h
  168.   */ + r) _6 N! v( s6 x

  169. 1 Y! \' ]/ l2 I& h, _. f
  170.   o/ [4 z) @: n- I3 Z% B
  171. /** @defgroup ADC_resolution
    + x; I" b* r3 W
  172.   * @{
    2 p  ^5 }$ B6 G& K$ w
  173.   */ - z! }/ S9 L; j. v
  174. #define ADC_Resolution_12b                         ((uint32_t)0x00000000)" `! |# ]. Y4 F  t
  175. #define ADC_Resolution_10b                         ((uint32_t)0x01000000)' L/ F' Z7 [# }: x9 _4 Z
  176. #define ADC_Resolution_8b                          ((uint32_t)0x02000000); g$ E1 m" A; _9 i/ j- q
  177. #define ADC_Resolution_6b                          ((uint32_t)0x03000000)
    , e% i/ T5 S" I9 t0 l1 g! c3 h
  178. #define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_Resolution_12b) || \2 T8 z7 |4 K6 O. r
  179.                                        ((RESOLUTION) == ADC_Resolution_10b) || \
    - v5 U$ W) [2 k0 @7 z4 w
  180.                                        ((RESOLUTION) == ADC_Resolution_8b) || \
    ! S  ]) N# i5 d6 h& R# b, i
  181.                                        ((RESOLUTION) == ADC_Resolution_6b)). l* i" F' ^: H6 S$ Q6 g  C

  182. 1 G8 @7 m/ {1 _- u* t. y
  183. /**/ j4 T# r0 W( G) F
  184.   * @}
    ( A1 L3 c* K/ J( B2 M5 G8 v9 N$ V6 \
  185.   */
    $ l# D5 r: G1 i$ @( g" i( O& c
  186. ) a0 q* v$ Q3 C
  187. / T7 H/ j( ]' C
  188. /** @defgroup ADC_external_trigger_edge_for_regular_channels_conversion 3 y$ ^! u. X  B* Y
  189.   * @{
    $ B: B. I( p  H1 @
  190.   */ - Y' ~5 o  M9 I, a! ?
  191. #define ADC_ExternalTrigConvEdge_None          ((uint32_t)0x00000000)
    - B& g4 J5 T  t/ O( s  T
  192. #define ADC_ExternalTrigConvEdge_Rising        ((uint32_t)0x10000000)+ r+ D( {6 F6 Q1 [
  193. #define ADC_ExternalTrigConvEdge_Falling       ((uint32_t)0x20000000)
    9 H# f% y+ |( H- \# j" O# ^/ ?  G
  194. #define ADC_ExternalTrigConvEdge_RisingFalling ((uint32_t)0x30000000)/ ~9 {! ?1 l% d$ u% [( j/ ~! X- t
  195. #define IS_ADC_EXT_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigConvEdge_None) || \
    0 s" [1 P; ^9 x' `' T) C2 Z8 ?
  196.                              ((EDGE) == ADC_ExternalTrigConvEdge_Rising) || \
    5 G; p9 P/ X* m6 P
  197.                              ((EDGE) == ADC_ExternalTrigConvEdge_Falling) || \2 ^6 ]! s3 K. }1 s! u% X
  198.                              ((EDGE) == ADC_ExternalTrigConvEdge_RisingFalling))) i! n# @9 y- |
  199. /**
    - v% V9 ]/ Y/ `2 j. Q3 a
  200.   * @}
    ' P% n5 P( y4 m% U( n
  201.   */ ' `1 ]3 s4 X0 a& ]( ^7 w
  202. 3 K+ P( v* X( ^5 i
  203. 5 J' U* ]9 m3 |$ t' p
  204. /** @defgroup ADC_extrenal_trigger_sources_for_regular_channels_conversion
    0 @- D6 V' ^  x, m' H7 C& |
  205.   * @{
    0 F) f5 O0 H: x& R7 b
  206.   */
    ! D$ `7 T# }" K: `9 d/ I. k
  207. #define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000)4 @* K9 v+ X( I/ z, D0 e
  208. #define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x01000000)
      _# G8 s8 n) W0 ^% y
  209. #define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x02000000)& n7 R% a% Y& S  D  R
  210. #define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x03000000)
    ) y5 k# w+ ]6 r2 c
  211. #define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x04000000)4 c, H6 \; G0 V& K2 v2 i
  212. #define ADC_ExternalTrigConv_T2_CC4                ((uint32_t)0x05000000)* p# |4 y" {" ]- P/ q7 s# a& U
  213. #define ADC_ExternalTrigConv_T2_TRGO               ((uint32_t)0x06000000)$ V4 F, K8 T: M# B. H+ y
  214. #define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x07000000)# e: W  o. F! X* \; H
  215. #define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x08000000)  |& z& m3 h: k( V( _
  216. #define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x09000000)% d- y5 Y: e/ C$ g$ q+ n% x3 R
  217. #define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x0A000000)
    . v8 N, ?! I! J% x( H
  218. #define ADC_ExternalTrigConv_T5_CC2                ((uint32_t)0x0B000000)/ y9 ?- [8 x$ Q  A. Z3 Z
  219. #define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x0C000000)
    ) u; B& x$ O7 Y
  220. #define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x0D000000)
    # Z: p1 U% o$ R6 l  x* I. Y4 m8 z
  221. #define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x0E000000)' H3 ?% A  D% f4 K  R
  222. #define ADC_ExternalTrigConv_Ext_IT11              ((uint32_t)0x0F000000)! F. C0 ?2 s$ M3 Q
  223. #define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_ExternalTrigConv_T1_CC1) || \$ D8 P/ X" O4 [! i2 D0 {' U
  224.                                   ((REGTRIG) == ADC_ExternalTrigConv_T1_CC2) || \. \/ f8 h1 F- H# H
  225.                                   ((REGTRIG) == ADC_ExternalTrigConv_T1_CC3) || \5 \6 }( k2 W1 W+ M7 _8 k% w) D! s
  226.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC2) || \! m/ o, \0 O* R( A% T" m; D) I1 b
  227.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC3) || \
    9 |1 L4 Y, T% J4 l# m2 v" s, U
  228.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_CC4) || \( x: W5 ?5 G- X, E% A- a
  229.                                   ((REGTRIG) == ADC_ExternalTrigConv_T2_TRGO) || \
    1 n1 M5 a6 e- B3 t3 w2 w0 O: _3 j( ]
  230.                                   ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \" D" h$ H7 S3 `
  231.                                   ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \5 l+ y7 `- C0 W, m, C
  232.                                   ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \
    9 ?/ j. o% n! s4 S
  233.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \
    ( L. s/ {- G: _9 Q: _- N
  234.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC2) || \- F- w( H) U* n! s
  235.                                   ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3) || \- w& p) W$ D% c9 X" T" C
  236.                                   ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \9 J7 h' z% X/ f* L5 Z4 H
  237.                                   ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \
    7 y; V8 L2 N9 ~
  238.                                   ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11))7 x" c8 y. O! h8 o
  239. /**
    ( w; x  X1 n7 |  K4 a
  240.   * @}
    6 R( V$ J9 R/ E4 r* p
  241.   */
    9 q3 L; m4 ]* E7 Y# k  J

  242. 5 }" F$ q# L1 I
  243. % L1 V$ d" I/ {, p
  244. /** @defgroup ADC_data_align
    ! m+ l3 n* x+ P6 l- e  u- E
  245.   * @{
    8 g# h( }* H! X' w* j
  246.   */
    ' n9 I: H1 B% r: V9 P5 @; V# P
  247. #define ADC_DataAlign_Right                        ((uint32_t)0x00000000)" M' E6 k* }+ v4 \
  248. #define ADC_DataAlign_Left                         ((uint32_t)0x00000800)& r6 z3 l3 g- k7 y- Z, [9 B% H: S
  249. #define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DataAlign_Right) || \
      j( T$ e* n& `; _0 T- f: U
  250.                                   ((ALIGN) == ADC_DataAlign_Left))
    6 o6 B4 u. M; t+ G4 Y
  251. /**8 }3 c8 _9 X* D* s0 q/ P. {8 a2 O5 K# f
  252.   * @}
    / I# }" [, B/ {% z4 y$ G
  253.   */
    ! _' q. Z7 p3 \8 E) o3 @
  254. & Y6 S+ |% G" I9 b9 |9 Y
  255.   m) y. l9 Z) T. I
  256. /** @defgroup ADC_channels
    9 }% G" c" h4 `  b. L. y2 O( l
  257.   * @{! m' B4 f% z" r- d7 Q4 Y% W
  258.   */ $ I7 Y; p5 l- E, Q
  259. #define ADC_Channel_0                               ((uint8_t)0x00), \2 s  a8 W7 A# m, @. W
  260. #define ADC_Channel_1                               ((uint8_t)0x01), ?3 N; v) ~; o6 Y% K+ v- C: l
  261. #define ADC_Channel_2                               ((uint8_t)0x02)
    " D; ?; `" u7 \# n
  262. #define ADC_Channel_3                               ((uint8_t)0x03)
    ) F$ g$ z8 k: D3 \+ [. d; N
  263. #define ADC_Channel_4                               ((uint8_t)0x04)3 P  p" S) W1 K9 u$ t
  264. #define ADC_Channel_5                               ((uint8_t)0x05)/ }# q9 j  z# a' X* W
  265. #define ADC_Channel_6                               ((uint8_t)0x06)
    , m- Y! @& E% k5 V% Q
  266. #define ADC_Channel_7                               ((uint8_t)0x07)2 r/ \& {/ @+ ~
  267. #define ADC_Channel_8                               ((uint8_t)0x08)+ c* K" w: z: K9 W8 H8 k
  268. #define ADC_Channel_9                               ((uint8_t)0x09)
    ! k. I& Y7 h/ r' ~. W
  269. #define ADC_Channel_10                              ((uint8_t)0x0A)
    9 [' h+ R9 I8 [  {- j( e% K, {
  270. #define ADC_Channel_11                              ((uint8_t)0x0B)( I/ Q8 O* d& z! D2 S
  271. #define ADC_Channel_12                              ((uint8_t)0x0C)
    9 I: ?/ w" N3 P7 V
  272. #define ADC_Channel_13                              ((uint8_t)0x0D)
    # {& v3 z% T& j0 m5 T) n% z
  273. #define ADC_Channel_14                              ((uint8_t)0x0E)7 M; n6 C! S1 ?5 w( }0 l
  274. #define ADC_Channel_15                              ((uint8_t)0x0F)/ ]' R/ D, v0 O$ ^* L8 c# R
  275. #define ADC_Channel_16                              ((uint8_t)0x10)
    9 @# b, C. V2 D* G: c# _% ^
  276. #define ADC_Channel_17                              ((uint8_t)0x11)
    9 b, g, f5 p' I- M* k! {
  277. #define ADC_Channel_18                              ((uint8_t)0x12)
    : X; O" N5 [, A6 @
  278.   j" K9 S6 \0 Y3 {
  279. #if defined (STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)
    . o" p+ _' f  j
  280. #define ADC_Channel_TempSensor                      ((uint8_t)ADC_Channel_16)
      o# e1 J  Y; Z9 ~
  281. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */# G. P/ x  T- ~) [

  282. ! V* {; Z2 ]8 m  G9 d
  283. #if defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) || defined (STM32F410xx) || defined (STM32F411xE)
    & d- n; k6 t/ v0 a7 t+ X$ k7 N( q* X
  284. #define ADC_Channel_TempSensor                      ((uint8_t)ADC_Channel_18)4 H5 G% b# w" t8 c
  285. #endif /* STM32F427_437xx || STM32F429_439xx || STM32F401xx || STM32F410xx || STM32F411xE */* I( h% }  V' V+ k3 {, _
  286. * I$ c4 K6 q( `/ p. h
  287. #define ADC_Channel_Vrefint                         ((uint8_t)ADC_Channel_17)
    : x9 s; h9 p* a
  288. #define ADC_Channel_Vbat                            ((uint8_t)ADC_Channel_18)% s4 d4 w5 g. R3 W4 x
  289. / n  q! M0 b9 U+ t. Z$ [+ k* f. R9 K
  290. #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_Channel_0) || \8 {" S% J6 E7 |8 k( z' \0 j$ ^) X
  291.                                  ((CHANNEL) == ADC_Channel_1) || \* x. J' D" y6 d* V# R
  292.                                  ((CHANNEL) == ADC_Channel_2) || \
    ' B) }; Y6 w) {1 J/ z
  293.                                  ((CHANNEL) == ADC_Channel_3) || \( Z2 Y  z" o; B) j7 O" O& H! [% n9 C
  294.                                  ((CHANNEL) == ADC_Channel_4) || \
    ! P  J; ]9 M% a6 d, B
  295.                                  ((CHANNEL) == ADC_Channel_5) || \
    2 C  M' L9 z" O& ~
  296.                                  ((CHANNEL) == ADC_Channel_6) || \- k  ^, F* n  {8 v' w
  297.                                  ((CHANNEL) == ADC_Channel_7) || \
    5 A# J8 R# {- R0 ~+ ~+ ^
  298.                                  ((CHANNEL) == ADC_Channel_8) || \0 {, k6 h/ X3 A. F$ e& B
  299.                                  ((CHANNEL) == ADC_Channel_9) || \8 T) Q6 Z' a! w! Y; G4 A) `
  300.                                  ((CHANNEL) == ADC_Channel_10) || \
    " i7 ^5 i- W( Y: c
  301.                                  ((CHANNEL) == ADC_Channel_11) || \
    $ t" B: Q2 F8 [, `
  302.                                  ((CHANNEL) == ADC_Channel_12) || \
    . ~% E; D$ O8 f- l  @3 s. @: k. J
  303.                                  ((CHANNEL) == ADC_Channel_13) || \
    + X/ l2 u6 F, e% ?  b# N4 ^
  304.                                  ((CHANNEL) == ADC_Channel_14) || \# O' R3 ^% \# b/ d& h
  305.                                  ((CHANNEL) == ADC_Channel_15) || \
    : i) A+ L+ N$ T0 G
  306.                                  ((CHANNEL) == ADC_Channel_16) || \
    # a! G/ B* Y& e4 p" K7 J
  307.                                  ((CHANNEL) == ADC_Channel_17) || \6 T& V& k- n. d% Q' x, C
  308.                                  ((CHANNEL) == ADC_Channel_18))7 U# A* q* _- @3 N! G1 v
  309. /**
    ' G2 T' E8 l3 H: [: L
  310.   * @}, g; w% h) M( H0 I( \! U7 u: e2 J
  311.   */ + m$ g$ r6 R! \" W/ T, w
  312. ! c# H* Y4 q+ m+ s1 W

  313. " g! s" ?2 s0 C0 ~
  314. /** @defgroup ADC_sampling_times
    6 v  [* p! e2 o
  315.   * @{
    - |3 ]0 E4 {7 z& f. M
  316.   */ 2 m' m( A  s2 X- C: N
  317. #define ADC_SampleTime_3Cycles                    ((uint8_t)0x00): W3 ]' ]# d3 Q" E0 U8 O
  318. #define ADC_SampleTime_15Cycles                   ((uint8_t)0x01)
    6 M7 C6 o9 w" D  _
  319. #define ADC_SampleTime_28Cycles                   ((uint8_t)0x02)8 a, I1 p. s# N/ S, m
  320. #define ADC_SampleTime_56Cycles                   ((uint8_t)0x03)
    & {# _. f+ v& P# L1 _
  321. #define ADC_SampleTime_84Cycles                   ((uint8_t)0x04)$ h: Y3 K: r; n; D% V. A! I7 d
  322. #define ADC_SampleTime_112Cycles                  ((uint8_t)0x05)* U. `1 Z( O7 \' r( o
  323. #define ADC_SampleTime_144Cycles                  ((uint8_t)0x06)8 i7 r) @  k0 b1 P+ A+ ?- A
  324. #define ADC_SampleTime_480Cycles                  ((uint8_t)0x07)( Q. `8 M. ^6 b1 Z5 y+ G* K
  325. #define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_3Cycles) || \
    ! L. ?2 n9 V9 r' O& J/ k4 {! O/ y
  326.                                   ((TIME) == ADC_SampleTime_15Cycles) || \) `0 y+ t2 n! v) |- _9 i
  327.                                   ((TIME) == ADC_SampleTime_28Cycles) || \
    " Z0 Y5 X4 V6 F# w' _6 }. H
  328.                                   ((TIME) == ADC_SampleTime_56Cycles) || \
    ; e. N% E! F- D5 T2 Y
  329.                                   ((TIME) == ADC_SampleTime_84Cycles) || \- g. h: c! f5 i9 ]3 k
  330.                                   ((TIME) == ADC_SampleTime_112Cycles) || \
    & L8 O) M3 l0 H( L
  331.                                   ((TIME) == ADC_SampleTime_144Cycles) || \& U5 ]+ |9 h- P+ R
  332.                                   ((TIME) == ADC_SampleTime_480Cycles))# v( }, P9 @) T* o
  333. /**
    3 ~/ s, d5 Q, E  ~' v) f) ?
  334.   * @}: f8 V+ r" W; r: ?% l3 v
  335.   */
    ) r0 q$ s! p4 @. j' B
  336. & t' ]7 t% s+ w
  337. # M; g  A9 w0 \! s9 H" U: Q
  338. /** @defgroup ADC_external_trigger_edge_for_injected_channels_conversion ( P% W5 y2 x; |7 ~
  339.   * @{
    7 m/ Z# f1 t- a% f! L! p0 R$ E
  340.   */
      Q" w! C, h1 ]) }4 {
  341. #define ADC_ExternalTrigInjecConvEdge_None          ((uint32_t)0x00000000)8 H- Q. ]5 |1 S: d6 p& H8 M, r! O7 C
  342. #define ADC_ExternalTrigInjecConvEdge_Rising        ((uint32_t)0x00100000)
    ) F- D8 m  x+ T: q, v  H
  343. #define ADC_ExternalTrigInjecConvEdge_Falling       ((uint32_t)0x00200000)& |6 q. s5 p  B9 K1 j* g
  344. #define ADC_ExternalTrigInjecConvEdge_RisingFalling ((uint32_t)0x00300000): {6 L& G7 ^2 N: X3 O& C
  345. #define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_ExternalTrigInjecConvEdge_None) || \
    5 _# A3 M' b' _! U* B
  346.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_Rising) || \5 H$ y2 J( q/ d: K4 V1 y
  347.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_Falling) || \
    # C" }' }& B% Q: ^# x; y
  348.                                           ((EDGE) == ADC_ExternalTrigInjecConvEdge_RisingFalling))5 ?. C% Y( G) @9 V  W1 B+ T
  349. + O3 h$ H; \+ I: r
  350. /**
    * I' N1 a5 Q+ ^+ u" g
  351.   * @}
    8 o: X" Z! `: ~. e0 w
  352.   */
    - }/ D& {! a3 j1 J

  353. ; w; Y, g3 {* F9 y/ s# i

  354. 7 Y5 r% Q+ r# q" v2 ]" j: @
  355. /** @defgroup ADC_extrenal_trigger_sources_for_injected_channels_conversion 0 d, b7 T" C3 m; h& ]+ M5 n. W+ Z
  356.   * @{
    # k# t, B+ q1 C# I) _5 _
  357.   */ ( V* q7 [% c8 M/ R+ U1 K
  358. #define ADC_ExternalTrigInjecConv_T1_CC4            ((uint32_t)0x00000000)
    ' G  S- ~- O3 R* _7 s: f' y
  359. #define ADC_ExternalTrigInjecConv_T1_TRGO           ((uint32_t)0x00010000): U" ^* `) B# K& i- x3 ]. g
  360. #define ADC_ExternalTrigInjecConv_T2_CC1            ((uint32_t)0x00020000)
    7 S3 m' z+ D! E
  361. #define ADC_ExternalTrigInjecConv_T2_TRGO           ((uint32_t)0x00030000)
    $ q% x, t) ]) N4 U
  362. #define ADC_ExternalTrigInjecConv_T3_CC2            ((uint32_t)0x00040000), B6 M' `: S( V( X8 _
  363. #define ADC_ExternalTrigInjecConv_T3_CC4            ((uint32_t)0x00050000)
    ( {2 Y( ?  s% z% f( y; g' J; ^: \2 B
  364. #define ADC_ExternalTrigInjecConv_T4_CC1            ((uint32_t)0x00060000)
    : Q' }! F' F- z, t) c) U9 q
  365. #define ADC_ExternalTrigInjecConv_T4_CC2            ((uint32_t)0x00070000)0 o+ b' E1 H% a7 v" O  e4 D
  366. #define ADC_ExternalTrigInjecConv_T4_CC3            ((uint32_t)0x00080000)
    . F6 M/ m( v6 Q. w) {. D
  367. #define ADC_ExternalTrigInjecConv_T4_TRGO           ((uint32_t)0x00090000)
    ' U6 m, @$ W: Y7 S4 @
  368. #define ADC_ExternalTrigInjecConv_T5_CC4            ((uint32_t)0x000A0000)
    5 O3 R0 b2 d* N; x) R0 V0 R
  369. #define ADC_ExternalTrigInjecConv_T5_TRGO           ((uint32_t)0x000B0000)
    8 C" d3 s. C- ^
  370. #define ADC_ExternalTrigInjecConv_T8_CC2            ((uint32_t)0x000C0000)
    : [* o4 o* q( @
  371. #define ADC_ExternalTrigInjecConv_T8_CC3            ((uint32_t)0x000D0000)
    8 L6 Q8 ?1 j1 z! k; j6 }$ z/ }
  372. #define ADC_ExternalTrigInjecConv_T8_CC4            ((uint32_t)0x000E0000), {( W" O6 v7 c* H
  373. #define ADC_ExternalTrigInjecConv_Ext_IT15          ((uint32_t)0x000F0000)  _6 k; s' Q" Y7 O+ }6 r
  374. #define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \2 P' n9 d' {. I2 x! i
  375.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \5 ?0 g9 P. ?  Q( @2 n' N; o
  376.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \7 C, N. q- [4 h; ~  P1 D0 n9 f
  377.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \% M! k6 i5 L0 @' C3 B
  378.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC2) || \( A7 X* P3 [: @; m# u) ~* I8 m4 ?
  379.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \
    ; b, r6 V3 T* v- ^: a, N+ F$ u
  380.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC1) || \
    % ]$ }8 Y3 x1 q, M8 n1 f% E0 ?
  381.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC2) || \' p& W& X# F4 |, X" u+ X; Y
  382.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \% s* s+ R+ D, z" f( L% |
  383.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \: K* q/ F' F+ f6 P8 I" h
  384.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4) || \) ~% X  S, T/ G$ p4 D# ^+ c
  385.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \1 e+ y* }. A/ w4 S6 q+ U; _
  386.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \2 R5 G* Q( r0 b- [
  387.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC3) || \
      T, _+ b3 _9 Y' [( ~, i; {
  388.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \
    1 a+ e3 b+ G0 P
  389.                                         ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15))9 y% Y  B/ j4 c3 L8 _- q: |. s
  390. /**
    5 c6 h3 u9 R3 m
  391.   * @}
      _% K, N' r" ~6 i, C- Z, g
  392.   */
    8 u  \$ @! f( H* I8 h

  393. / q* _- K! D3 \
  394. $ x8 g5 O# {+ H
  395. /** @defgroup ADC_injected_channel_selection
    / K8 y/ Z4 t3 w; `
  396.   * @{
    ; F7 F5 h/ w+ o! C* H: ]% d" x
  397.   */ ! O) w' H0 d9 I7 ~$ Q
  398. #define ADC_InjectedChannel_1                       ((uint8_t)0x14)
    7 |9 J7 y8 M$ e
  399. #define ADC_InjectedChannel_2                       ((uint8_t)0x18)3 ?) T  z' B+ w7 ^
  400. #define ADC_InjectedChannel_3                       ((uint8_t)0x1C)* o2 b6 ^$ v) H- M/ O2 g9 F( D  x
  401. #define ADC_InjectedChannel_4                       ((uint8_t)0x20)8 X% s+ X2 |) V- n
  402. #define IS_ADC_INJECTED_CHANNEL(CHANNEL) (((CHANNEL) == ADC_InjectedChannel_1) || \3 O; ?& @* F  d+ K
  403.                                           ((CHANNEL) == ADC_InjectedChannel_2) || \
    - V2 Y. W& E# q0 w2 a) z
  404.                                           ((CHANNEL) == ADC_InjectedChannel_3) || \# n! `. l! T* r2 w& [, `  e
  405.                                           ((CHANNEL) == ADC_InjectedChannel_4))
    ; ]7 S3 z  X- S/ F& j0 y8 a: O" z
  406. /*** y4 c8 y! t7 Y6 H3 a
  407.   * @}1 }7 L2 M/ ?1 C( z2 ]2 \
  408.   */ % k* |/ R% w$ t6 a- ]6 R! O# v6 P( U
  409. 4 V+ M4 ?# E( W# c7 `8 F4 G* o

  410. - z  z6 W- k& I4 }* t
  411. /** @defgroup ADC_analog_watchdog_selection 7 U- `# r- h9 p" h/ |8 x
  412.   * @{
    + C# K& B+ A/ C( b
  413.   */
    4 R3 P( L8 ^  G/ N* u) W; i
  414. #define ADC_AnalogWatchdog_SingleRegEnable         ((uint32_t)0x00800200)" a$ z: q) E* X! y- E1 ?4 P2 g
  415. #define ADC_AnalogWatchdog_SingleInjecEnable       ((uint32_t)0x00400200)1 Z. V% P6 y2 |% U1 i8 @
  416. #define ADC_AnalogWatchdog_SingleRegOrInjecEnable  ((uint32_t)0x00C00200)
    / l1 a/ l" n7 C
  417. #define ADC_AnalogWatchdog_AllRegEnable            ((uint32_t)0x00800000)2 V4 c/ w/ }$ z0 l
  418. #define ADC_AnalogWatchdog_AllInjecEnable          ((uint32_t)0x00400000)
    # k) [; ]+ C5 ?9 {3 D5 Y+ U
  419. #define ADC_AnalogWatchdog_AllRegAllInjecEnable    ((uint32_t)0x00C00000)
    * I! h  E$ M7 _, {% ~4 f- `
  420. #define ADC_AnalogWatchdog_None                    ((uint32_t)0x00000000)7 n# K0 m7 ^* Y- g% X
  421. #define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_AnalogWatchdog_SingleRegEnable) || \) _, i& P  @; U! [- ]% x: m
  422.                                           ((WATCHDOG) == ADC_AnalogWatchdog_SingleInjecEnable) || \
    2 N- m! t" N; H* J: r; X2 j! R1 a
  423.                                           ((WATCHDOG) == ADC_AnalogWatchdog_SingleRegOrInjecEnable) || \- R; q1 [( ]4 J& w
  424.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllRegEnable) || \' @6 @% \# q& x/ d/ t
  425.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllInjecEnable) || \
    # F# U  S* N8 M- \- n# G* Y% X
  426.                                           ((WATCHDOG) == ADC_AnalogWatchdog_AllRegAllInjecEnable) || \; r$ Q5 U! q2 f* T) c) e. H6 J
  427.                                           ((WATCHDOG) == ADC_AnalogWatchdog_None))
    - B. e# L  h# @2 V2 Y
  428. /**
    8 E( n1 r# |& t& E) I$ g
  429.   * @}
    1 g8 K9 Z# g7 {+ @& p( W
  430.   */
    ! R! v( s# u' ~# n4 W1 l

  431. : y, e5 J& P2 j& S- O
  432. ! L& K$ q2 d$ C% Y
  433. /** @defgroup ADC_interrupts_definition $ L% Z+ V6 B" C& f* z' _+ [
  434.   * @{, o* P- r8 S! c5 i
  435.   */ 4 L' L" N0 m- b0 {) n3 S
  436. #define ADC_IT_EOC                                 ((uint16_t)0x0205)  5 n/ B) @' ~2 S/ j. O6 N. x
  437. #define ADC_IT_AWD                                 ((uint16_t)0x0106)  / ?+ G" l: Z" Y( E& F, Q
  438. #define ADC_IT_JEOC                                ((uint16_t)0x0407)  
    ! `: n- `5 v  y9 d
  439. #define ADC_IT_OVR                                 ((uint16_t)0x201A)  
    $ l% R2 l- o; P0 z3 x+ w& F) C% `
  440. #define IS_ADC_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \  q5 f1 w" X. R
  441.                        ((IT) == ADC_IT_JEOC)|| ((IT) == ADC_IT_OVR))
    ; g0 q9 a9 n1 ?# N4 D
  442. /**
    6 o# n9 w0 l4 g0 |7 W
  443.   * @}
    , j: |% J4 J0 ^+ S- N  v
  444.   */
    , S; r5 x6 B% z. l( t6 O
  445. 1 g* C$ `; O4 a# U( W
  446. / K) y) S/ T  I4 J2 l, b/ A" S
  447. /** @defgroup ADC_flags_definition 7 i4 t8 Y# b$ ^( H9 N4 h; v
  448.   * @{
    4 v3 `& u% f) T5 w" v% G
  449.   */ - Q1 Z: a8 q6 O5 V
  450. #define ADC_FLAG_AWD                               ((uint8_t)0x01)
    & _% E. x7 A% [" m; V! d
  451. #define ADC_FLAG_EOC                               ((uint8_t)0x02)
    % G! q& x7 f4 J4 W
  452. #define ADC_FLAG_JEOC                              ((uint8_t)0x04)
    5 L8 Z& q) w2 {/ J: @9 }
  453. #define ADC_FLAG_JSTRT                             ((uint8_t)0x08)( m0 q' e) u9 e6 w+ T& W; x
  454. #define ADC_FLAG_STRT                              ((uint8_t)0x10)
    / G( T+ `# U, W6 y- c# s
  455. #define ADC_FLAG_OVR                               ((uint8_t)0x20)   
    ! X! |; S6 G* n4 n

  456. 6 j2 t; g; v. Y) }
  457. #define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xC0) == 0x00) && ((FLAG) != 0x00))   ; C& s  M; ~1 ~' \% f7 v
  458. #define IS_ADC_GET_FLAG(FLAG) (((FLAG) == ADC_FLAG_AWD) || \
    + }$ d, Q) M5 ]6 C9 B9 g' k* H
  459.                                ((FLAG) == ADC_FLAG_EOC) || \; t2 F0 J: |& D) N4 ]" r/ O% m
  460.                                ((FLAG) == ADC_FLAG_JEOC) || \
    & H  Q4 A# y% v1 S- P
  461.                                ((FLAG)== ADC_FLAG_JSTRT) || \
    6 F/ |4 U" T; d8 j" d8 v
  462.                                ((FLAG) == ADC_FLAG_STRT) || \/ z# G0 F5 ]  S* J* M& R5 j3 z% r) n
  463.                                ((FLAG)== ADC_FLAG_OVR))     
    # y# M: j# s, v$ v( D- o4 Z
  464. /**2 y2 p% E4 W2 L1 \% x& j  d: D9 _
  465.   * @}* r' x! W- g& ^
  466.   */ 2 S& ]( a5 l$ l* X: C
  467. ) `+ a! X: Z8 A0 }1 ]6 W

  468. 2 G! b/ R% X1 p3 X! x& J9 C3 I
  469. /** @defgroup ADC_thresholds ( T2 x, {6 j' K1 _- Z
  470.   * @{* y4 |9 y, Y' [. T: o
  471.   */
    % }  ~, c, t& e7 A; ~! d
  472. #define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFF). @2 a" Q5 l! X* E1 x% O
  473. /**- g+ W. Y: X1 D, f7 ?" z1 R
  474.   * @}" ^0 [3 h* M) U5 B
  475.   */
    / N* P% @0 H# o- ^! z
  476. , }  G) @: ]) f4 e+ l# u' K
  477. ' `+ F/ S  k& b; A
  478. /** @defgroup ADC_injected_offset
    8 ^+ N" |0 `& i$ y. ~) G: M. W
  479.   * @{1 s  a( o+ o1 l7 s5 K- F! s7 P# F
  480.   */ " N+ c; b# y* f- Y0 k* H2 j
  481. #define IS_ADC_OFFSET(OFFSET) ((OFFSET) <= 0xFFF)
      h+ m; C1 c; @- _7 \
  482. /**
    . r- H! M! f9 T) U
  483.   * @}, N8 m( {8 K8 a" _
  484.   */
    7 c+ x2 T4 B  o" P, D+ M) M
  485. 7 a. W: K9 k6 a1 ]3 ^4 f* Y
  486. : e- |# z- q1 a' [9 A# p+ p
  487. /** @defgroup ADC_injected_length
    2 [$ T. A: ^8 N1 F! C! k9 T5 B
  488.   * @{: ^; z1 ~1 }+ e0 s
  489.   */
    8 d3 E# m; ], c% x$ T) c
  490. #define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x4))
    + F7 W. s0 c+ |
  491. /**
    4 K, ~; C* J0 @8 f) }. z2 S
  492.   * @}1 v, g# [; x4 C  _" T  C* l0 I; Y
  493.   */
    ! {8 y/ H6 G1 D% O/ {! h) H7 E$ z

  494. 6 N- r/ P6 x& m+ f

  495. & \" g1 I) [: r/ B2 R6 [' {
  496. /** @defgroup ADC_injected_rank
    5 o) A1 Z9 x+ [- D. i; K) t$ i
  497.   * @{# W6 ?: X( `; h: E3 E( F; z: o' D
  498.   */
    4 {% e" ~9 m1 ]' Q5 w* w- D. Y
  499. #define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x4))3 b8 b+ l$ V2 Z6 a7 F
  500. /**
    - M/ |6 d$ V1 G6 q6 R' n- H/ `. S
  501.   * @}
    . F% X7 k1 [  K! y( W
  502.   */ ) ~6 X1 d! t1 y; G& I. z

  503. ' E/ G. o  a/ b; m
  504. 9 {) N% s) n4 j9 [' ~& e3 W
  505. /** @defgroup ADC_regular_length 9 X& w2 o( p0 e8 |9 C$ g! s
  506.   * @{% |$ `# v% Y: E8 m1 R/ J
  507.   */ 1 n" F8 T5 s: d
  508. #define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x10))7 v6 P  \$ B2 F, M2 r; R* D; R3 ]# y
  509. /**" o, y; q( V$ L$ e, k7 D
  510.   * @}
    4 M5 ]4 z9 o9 |  b0 Y+ R, l/ i
  511.   */ % I% P) s: n- K
  512. 6 \* s' X; j" m/ j: g$ d
  513. ( ~' p6 H0 `. z* _7 C
  514. /** @defgroup ADC_regular_rank
    . X- d$ G1 i9 k' D  ?. J/ g
  515.   * @{, q# p  x' D9 w1 w4 {( x" {/ I: ]
  516.   */ 7 G: c. y7 [6 p* y) j  T5 B
  517. #define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x10))
    : s5 {/ V! F/ L; v, f# ?3 y8 q
  518. /**% B( E: ?+ m- u- W1 J1 g
  519.   * @}
    & L3 y+ N' @/ l3 `
  520.   */
    4 W/ c1 C5 U) n- L1 q9 `, \7 L" L. @
  521. 0 s7 f0 b. h  f: G* t9 @
  522. ) T' K5 v# ~% D. m' x6 `$ p2 o
  523. /** @defgroup ADC_regular_discontinuous_mode_number % ]7 v: ~# z' _+ {' j: L
  524.   * @{! ^  D! v9 D# ^1 ?
  525.   */ - K( @6 B) |1 j+ o- I* Y! s% y
  526. #define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 0x1) && ((NUMBER) <= 0x8))# e) i; I: b6 O
  527. /**% f& P: N5 J; F
  528.   * @}
    3 L3 H3 X6 k3 P9 J- M/ v& x
  529.   */
复制代码

) [9 D  g4 ?: D8 |; c$ u03. 相关函数" r  g8 Z, {6 Z7 P5 p
  1. /*  Function used to set the ADC configuration to the default reset state *****/  
    # C; l: y+ l, c' @, S7 l4 i
  2. void ADC_DeInit(void);
    + g* C; l- q$ ?3 ?& s; u
  3. * t3 j; K' V3 k& i
  4. /* Initialization and Configuration functions *********************************/
    ! N& X& }2 i, ]
  5. void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);, x8 n7 t2 ]- \. S1 o" j
  6. void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);5 H$ d" N# p( s6 v
  7. void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);' U7 m$ u0 L5 p6 J- P$ P
  8. void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
    : ]& Y; e' I) G. V& W4 H9 s% ?! o
  9. void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    2 t# f6 V" h9 E2 Q3 Y

  10. . @, X6 |. }2 A9 S( R( q
  11. /* Analog Watchdog configuration functions ************************************/5 V; ]9 x0 B1 s+ k7 X
  12. void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);
    , g4 l. Q' c9 p% L; c0 c1 w
  13. void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold);/ c" j8 E9 a. f' u2 s0 S; W! u+ \
  14. void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);
    : M1 d* a- I4 n9 m" w: B

  15. 3 p8 l; |; J1 U3 e) M5 |/ [
  16. /* Temperature Sensor, Vrefint and VBAT management functions ******************/
    7 n* {! m3 |2 h! h5 w& ^
  17. void ADC_TempSensorVrefintCmd(FunctionalState NewState);
    9 I- f. k+ [. [" d4 ^7 C% W& X
  18. void ADC_VBATCmd(FunctionalState NewState);
    " |) G5 o- C1 k! d
  19. 1 S- W. a0 e& C7 ]
  20. /* Regular Channels Configuration functions ***********************************/
    3 D" O; H* @7 B  O. x1 @. [
  21. void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);/ n+ c% |  w% s) g3 g: H& W5 @$ \
  22. void ADC_SoftwareStartConv(ADC_TypeDef* ADCx);2 `1 V6 w+ d9 u2 D: x4 P1 y* P) }- ^8 m
  23. FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);/ ~0 {9 B3 p" g( \) Y& G
  24. void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    & |1 f3 P  x- p" o
  25. void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    5 U. W7 X& l% b/ y
  26. void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);7 {# Y. W% I/ }, _) C
  27. void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);1 G/ u/ j& U8 [) c7 M
  28. uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
    9 F6 p' P) i) u* {8 B
  29. uint32_t ADC_GetMultiModeConversionValue(void);9 E1 {- F5 L/ x6 ?1 t( h' g
  30. + Q# ]* D7 r7 ]* l7 q" p4 n( T- x
  31. /* Regular Channels DMA Configuration functions *******************************/
    1 g" `8 \- K. e4 G% i; j; U% z+ s' E
  32. void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    5 F) M2 {2 n# J; F& ~/ x
  33. void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState);4 M) w9 m% W' Y5 H; I  N; [
  34. void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState);! r: E2 _' u! z. _3 Q
  35. % L0 n; x2 k, c9 F4 D& H% c
  36. /* Injected channels Configuration functions **********************************/
    . ?7 k: ?7 p; r1 M, _$ M" _' _
  37. void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);( M! K. v+ G; a6 J2 T. J" I
  38. void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);
    4 {4 O: X& x% Z0 ~2 V/ ~, u) O' R
  39. void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);
    9 ^9 i% b& ^1 k
  40. void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);
    : N7 t1 W( l8 z. ^. O; R
  41. void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge);
    * r- E( [# m( ^! v
  42. void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx);' H$ _, z* ?* g4 e' d; h; ?
  43. FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
    ( L/ k8 q9 N5 ^' g; y
  44. void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    0 t4 b, Y- X& {/ o( _' n2 d' a
  45. void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);* C4 `: _' |) E  u  X/ G
  46. uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);
    " W' W4 f6 L3 c, o7 @+ e& o6 E
  47. 8 i' U* G; ~2 W- G  W& N& M
  48. /* Interrupts and flags management functions **********************************/
    . J) Z+ r' a9 L, C
  49. void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);9 D% {; P, z3 H/ u" B, Z! K- i
  50. FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
    1 j( e9 w8 Z7 b) `
  51. void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);7 W2 N* Y; p4 Z* S# l% ]6 J
  52. ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);6 G: e. r$ I* V$ a1 t. u
  53. void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);
复制代码

1 b3 @5 V7 Q; d& U$ k04. 结构体封装
- h. k, e1 F+ @2 q8 F' U( h  J
  1. /** ' g1 J7 O, l( G, ^8 O0 D) F
  2.   * @brief Analog to Digital Converter  
    2 x5 B2 _, i" p5 B$ _. m) U
  3.   */. M* q4 W1 }; [5 ]- j, R  S( z% j7 `

  4. + e6 I' ]2 j+ t/ Q
  5. typedef struct# [" O2 u4 o& _; J
  6. {
    2 `5 R2 q, p& N! J  Q- P
  7.   __IO uint32_t SR;     /*!< ADC status register,                         Address offset: 0x00 */
    3 h( U4 f, [2 N/ S1 M1 ~
  8.   __IO uint32_t CR1;    /*!< ADC control register 1,                      Address offset: 0x04 */      
    ; L! d( t0 s/ V; y- j. x0 f
  9.   __IO uint32_t CR2;    /*!< ADC control register 2,                      Address offset: 0x08 */
    ' a0 W7 t" q! Y9 c5 p; o4 ^5 Q2 Z5 o
  10.   __IO uint32_t SMPR1;  /*!< ADC sample time register 1,                  Address offset: 0x0C *// b/ Y) q+ C, u: H, T
  11.   __IO uint32_t SMPR2;  /*!< ADC sample time register 2,                  Address offset: 0x10 */
    / o1 ?: I  O6 L9 {1 }: p' K
  12.   __IO uint32_t JOFR1;  /*!< ADC injected channel data offset register 1, Address offset: 0x14 */
    ) O: k# a  x( ?2 P
  13.   __IO uint32_t JOFR2;  /*!< ADC injected channel data offset register 2, Address offset: 0x18 */
    / u& a3 ^! {  k; \: M
  14.   __IO uint32_t JOFR3;  /*!< ADC injected channel data offset register 3, Address offset: 0x1C */
    $ t1 \% D, ]: V  B" _
  15.   __IO uint32_t JOFR4;  /*!< ADC injected channel data offset register 4, Address offset: 0x20 */3 S% h( r; r" A/ `: Y
  16.   __IO uint32_t HTR;    /*!< ADC watchdog higher threshold register,      Address offset: 0x24 */( C6 z# n  a$ i6 A+ t- o% [+ M. @4 W
  17.   __IO uint32_t LTR;    /*!< ADC watchdog lower threshold register,       Address offset: 0x28 */+ c  x6 I4 z2 b/ u4 O9 x
  18.   __IO uint32_t SQR1;   /*!< ADC regular sequence register 1,             Address offset: 0x2C */! x, R: @. P% L9 z, V7 W+ d$ i! k
  19.   __IO uint32_t SQR2;   /*!< ADC regular sequence register 2,             Address offset: 0x30 */
      k8 J, h* u7 p- j2 l& e
  20.   __IO uint32_t SQR3;   /*!< ADC regular sequence register 3,             Address offset: 0x34 */  P* M- U" u: P8 v
  21.   __IO uint32_t JSQR;   /*!< ADC injected sequence register,              Address offset: 0x38 */
    # h# y' b* E0 g9 G7 `
  22.   __IO uint32_t JDR1;   /*!< ADC injected data register 1,                Address offset: 0x3C */
    . S  T0 q5 C  o) l
  23.   __IO uint32_t JDR2;   /*!< ADC injected data register 2,                Address offset: 0x40 */" M( `2 c- _" V! d; j) r
  24.   __IO uint32_t JDR3;   /*!< ADC injected data register 3,                Address offset: 0x44 */
    - y* m: [8 {: O7 Y& v( I( v
  25.   __IO uint32_t JDR4;   /*!< ADC injected data register 4,                Address offset: 0x48 */
    1 q! o. h' B# b. b% H
  26.   __IO uint32_t DR;     /*!< ADC regular data register,                   Address offset: 0x4C */
    ; D- C' E7 D8 [1 b3 h2 p1 Z
  27. } ADC_TypeDef;* A. P5 _- f, u1 W2 }2 T! }4 x

  28. . s+ y2 Q' K* K9 \! K! j1 d' I
复制代码
; e' x' K" h) ^, Y
  m1 |3 w+ H1 t
收藏 评论0 发布时间:2022-3-30 11:00

举报

0个回答

所属标签

相似分享

官网相关资源

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