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

【经验分享】STM32 ADC详解

[复制链接]
STMCU小助手 发布时间:2022-6-14 14:52
01. ADC简介
5 |: Q: s/ Z/ x12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 V BAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。, a, A% Q1 Q4 b5 K: i

6 N8 k) Q1 W$ J8 I% V) r3 [02. ADC主要特性, Y2 ?9 Q1 h# O1 R/ P
● 可配置 12 位、10 位、8 位或 6 位分辨率) \! S: b7 Q9 M, @9 E8 e6 M' u+ f
● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断- `5 f3 G+ @+ ?) |( Y$ B; I- C
● 单次和连续转换模式
; q! v( [% c! W) F● 用于自动将通道 0 转换为通道“n”的扫描模式
& q5 z" D% Z4 i! f● 数据对齐以保持内置数据一致性
2 Z6 [* k4 P3 y$ V5 w- _; G● 可独立设置各通道采样时间
( Y7 v( c: G9 s, J; D. \0 c4 K2 W& S● 外部触发器选项,可为规则转换和注入转换配置极性
. y) N& }& Z/ ^1 W( O7 H- o● 不连续采样模式
6 M1 H) {# z: z) L( p/ p1 o, f● 双重/三重模式(具有 2 个或更多 ADC 的器件提供)9 w+ v/ o# U9 B* `& ?
● 双重/三重 ADC 模式下可配置的 DMA 数据存储% p. S. p! p% M( m2 P
● 双重/三重交替模式下可配置的转换间延迟2 A' p. j! |" S8 r+ K9 R
● ADC 转换类型(参见数据手册)
) w5 {  ]3 e. i8 D3 s6 N) ^0 y7 k3 c● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V
. p# s$ U# R( c* t( A- U● ADC 输入范围:V REF—  V IN  V REF+) V8 \, A1 K& f( m$ t& ]4 n7 J; i
● 规则通道转换期间可产生 DMA 请求
  k- y, d/ O! ~" N5 e; f+ Z2 D
* [( V( I2 B: b' @  _2 n注意: V REF— 如果可用(取决于封装),则必须将其连接到 V SSA 。& A: G3 R% {1 ^/ @' }4 K" d

6 J& ~- f" I3 b2 W& L. F2 U+ }0 l03. ADC功能说明' z8 G; s6 S) k% j  u% j
框图
$ K7 ~1 }. l; {7 O' @9 [( T2 m! Q4 t9 m& E
UKV3YY`MKV)A6BMUOU`)Y53.png
3 Y! e( E" ]4 w9 R' r, [' q. }) K 5BR_]HTDOCDA~CLS9RXR.png 1 m* z/ |' L' B
% ~! {! R* L( g( }" R
04. ADC开关控制/ c) W2 |3 d. q" J
可通过将 ADC_CR2 寄存器中的 ADON 位置 1 来为 ADC 供电。首次将 ADON 位置 1 时,会将 ADC 从掉电模式中唤醒。/ _. {) z4 h- c( A( }9 L
' Z8 x* f3 G, z" o5 M5 _: n
SWSTART 或 JSWSTART 位置 1 时,启动 AD 转换。
1 y* A+ q/ ^5 L" R
* V3 Q+ z" F+ j( Z/ }可通过将 ADON 位清零来停止转换并使 ADC 进入掉电模式。在此模式下,ADC 几乎不耗电(只有几 μA)* [" Q9 p/ ~' x9 b
* m3 A. h& S1 E! w, G
05. ADC时钟
0 P  M5 Y" y9 v4 l. p4 T& DADC 具有两个时钟方案:
+ [+ y7 G3 ~- B% h( r● 用于模拟电路的时钟:ADCCLK,所有 ADC 共用
" p' I; m' Y7 D* t- D* i- |此时钟来自于经可编程预分频器分频的 APB2 时钟,该预分频器允许 ADC 在 f PCLK2 /2、/4、/6 或 /8 下工作。有关 ADCCLK 的最大值,请参见数据手册。) p$ ]5 u( S# Y) [. [
● 用于数字接口的时钟(用于寄存器读/写访问), Y$ _4 K$ Z' p( y% X3 l4 K- ~
此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能寄存器 (RCC_APB2ENR)分别为每个 ADC 使能/禁止数字接口时钟。
& V  z( P# \  ~$ g- ?  B3 p" ~* Z/ j$ k3 @
06. 通道选择
) ~/ O0 B% z9 i) r  [5 o- c有 16 条复用通道。可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。
' ?% P1 G# _+ P: E& K# o) R9 v  Y6 |  [% ~. o* U
● 一个 规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。" j8 h3 H# W/ I" {2 ?6 W. c
● 一个 注入转换组最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位
7 _+ `+ Q4 C7 R: N% u" S
7 J5 X- h9 Z# F5 D5 b# c如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向 ADC 发送一个新的启动脉冲,以转换新选择的组。
9 C& V) f8 N- P  N. r& r1 Z! S/ Z! d& Y
温度传感器、V REFINT 和 V BAT 内部通道
$ R3 e, G6 H" Z7 F+ u6 a
1 s: }- v. z( n$ t+ A/ ~# W7 J* x● 对于 STM32F40x 和 STM32F41x 器件,温度传感器内部连接到通道 ADC1_IN16。内部参考电压 VREFINT 连接到 ADC1_IN17。
9 l7 ?4 l6 N* e+ A9 w6 f5 t● 对于 STM23F42x 和 STM32F43x 器件,温度传感器内部连接到与 VBAT 共用的通道ADC1_IN18。一次只能选择一个转换(温度传感器或 VBAT)。同时设置了温度传感器和 VBAT 转换时,将只进行 VBAT 转换。
! y; ], [! {2 [8 j# \- I5 A2 G1 y( S6 `4 w8 X$ R
内部参考电压 VREFINT 连接到 ADC1_IN17。5 ~! l0 ]4 w' q
V BAT 通道连接到通道 ADC1_IN18。该通道也可转换为注入通道或规则通道。: a+ Y7 h& p6 v
注意: 温度传感器、 V REFINT 和 V BAT 通道只在主 ADC1 外设上可用。- c# k: F, w3 {+ p
2 {8 u, n9 q" T' a4 X) [4 _# X
07. 转换模式5 a/ l1 F3 E7 }
单次转换模式
/ P5 i1 N& N& a& }# f; p2 ^" f: I" s  w
在单次转换模式下,ADC 执行一次转换。CONT 位为 0 时,可通过以下方式启动此模式:
# M$ |# A5 `/ V0 l1 |● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道)) X' r! e, K; T
● 将 JSWSTART 位置 1(适用于注入通道)
) d4 P% _2 l1 K/ p● 外部触发(适用于规则通道或注入通道)2 m% T, W& y8 m7 @* q0 C" @% W! b
! j) Q8 N6 w5 t/ Z$ E! M
完成所选通道的转换之后:4 o- Z2 T1 a+ o3 T5 e6 @
● 如果转换了规则通道:! `) b+ s9 M- e: |
— 转换数据存储在 16 位 ADC_DR 寄存器中
5 f/ R6 [3 a; R: d) M" S& N— EOC(转换结束)标志置 1
; @8 D- ?4 m7 f1 t7 w— EOCIE 位置 1 时将产生中断
, [* B& p5 J) f' L5 Q● 如果转换了注入通道:: h. g- d0 u( z. T( [7 Z+ m& |
— 转换数据存储在 16 位 ADC_JDR1 寄存器中2 I2 _' @4 F1 w
— JEOC(注入转换结束)标志置 10 B* z; G$ @+ y/ U( d5 W' t- M9 z
— JEOCIE 位置 1 时将产生中断
) ]) N) u% c8 E# y: y, A/ Z然后,ADC 停止。7 q/ ]" G, ^# d

) O1 z: M5 l9 I) ^连续转换模式" _! ~0 U4 k- P

* D: m( b# Z7 i$ ~% L$ `+ S在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换。CONT 位为 1 时,可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位置 1 来启动此模式(仅适用于规则通道)。# i. o( u; C: [% e) H) I  S
' N* i/ G; s, G6 ]+ X& L7 K
每次转换之后:
5 m! W" Y5 w  V" o$ Y● 如果转换了规则通道组:! c3 t% W6 o$ g- q$ P
— 上次转换的数据存储在 16 位 ADC_DR 寄存器中
. b- i  M. Y0 W* q& C0 ?* n— EOC(转换结束)标志置 1
8 {- l/ G( Z3 g, T$ b— EOCIE 位置 1 时将产生中断
9 k7 m" S0 h$ W! ^2 L6 q  }5 Q
2 m% L8 ~; X, B$ ~' Z* R温馨提示" D; h8 [2 d( u% i, a
% Z4 v% X6 f9 f7 n5 ]2 r
无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用 JAUTO 位),请参见自动注入一节* ~9 n$ p0 y1 A" m$ x- L
6 F3 I- ^, p& s" t
08. 时序图
& S* b% R' i: g' l% l0 b
  d" _- T- M& P+ g# {: L3 r4 i
EMK5LWHRZ3]VT_6H0[D{]}2.png
4 I% N! i& N8 g$ `7 `* e& ^, ?
6 K: ], J  [2 S. H; y5 M6 ^, n09. 扫描模式
; U5 R+ ~4 w* i8 t; c- l  g' s
此模式用于扫描一组模拟通道。
% }3 I4 T9 p' J9 v; s通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。将此位置 1 后,ADC 会扫描在 ADC_SQRx 寄存器(对于规则通道)或 ADC_JSQR 寄存器(对于注入通道)中选择的所有通道。为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。
/ g" c; ], V4 ?: o8 L% ~+ H) A" s) \) z; t; a
如果将 DMA 位置 1,则在每次规则通道转换之后,均使用直接存储器访问 (DMA) 控制器将转换自规则通道组的数据(存储在 ADC_DR 寄存器中)传输到 SRAM。
! U; \% y. W# \1 u8 i
" S. W. j! d6 e" ~在以下情况下,ADC_SR 寄存器中的 EOC 位置 1:
! Y& k6 w7 X6 u& r7 F● 如果 EOCS 位清零,在每个规则组序列转换结束时
) S; F# U; S+ J2 j9 L● 如果 EOCS 位置 1,在每个规则通道转换结束时* y; A# ?( p2 p  {" L8 l
从注入通道转换的数据始终存储在 ADC_JDRx 寄存器中。8 k; M) p; N9 H5 H
& T7 J8 n9 k. X% \' o& D! [1 s: t
10. 数据对齐
1 T1 Z# y1 P7 yADC_CR2 寄存器中的 ALIGN 位用于选择转换后存储的数据的对齐方式。可选择左对齐和右对齐两种方式,如 图 38 和 图 39 所示) C& U4 `. B. ?) R; c! I" u% u
, [4 j( a. k- `+ U1 y+ h
注入通道组的转换数据将减去 ADC_JOFRx 寄存器中写入的用户自定义偏移量,因此结果可以是一个负值。SEXT 位表示扩展的符号值。
, N: f! E8 i8 I7 G: t6 e. z
/ m& ^! y2 g& V对于规则组中的通道,不会减去任何偏移量,因此只有十二个位有效。" r! L" |: q4 H' [, D
2 P! w, r& R6 X5 _
OCUXBJ9Me(89QUT4Q]GBR.png
! d2 ?* X4 p  E! L+ H! l! f
  Q, P8 [5 e7 k/ S3 @11. 寄存器
: v: ^& ^9 S8 n: g' I+ J- g# X$ k7 h11.1ADC 状态寄存器 (ADC_SR)

* I) E/ v) M" T( X' X  [/ b9 [3 XADC status register7 Q  j( s  d2 F( X# W
偏移地址:0x00& ]/ F" K5 W$ y2 Z" W6 N6 t
复位值:0x0000 0000  A' ?6 C5 `! p  x" |7 v5 O: S- A

; s+ e7 W6 P1 |' y 20200911174251874.png
6 T# a0 ]" K& ?8 M- D* G
: }% \, w( D* m; U4 ]$ m9 x7 h11.2 ADC 控制寄存器 1 (ADC_CR1)
* P; |$ J$ W; @9 z1 Y0 L4 q8 KADC control register 1
8 E# P  J) y, p- X+ p$ n7 s  M偏移地址:0x04
) D3 b. T# o, h/ t: O6 ^4 y3 N  U复位值:0x0000 0000
7 X; U6 O' K/ _- V9 }
2 z0 p$ Z$ ^8 A, z7 S! v$ Y# `7 x 20200911174301609.png
( ^, i) _1 G* V# G5 L0 F; i$ W
. ~  ]  h7 E2 X8 ~0 p! X11.3 ADC 控制寄存器 2 (ADC_CR2)
4 |; m; W0 M: R! U( o. v7 R; xADC control register 2
' s8 ^6 m! @9 Q: I" R% l8 E) U' K偏移地址:0x085 J! n: U: r2 D
复位值:0x0000 0000
, u) K. z6 F7 I3 y0 u- `1 }* N' g# q' p7 v% r3 U) X7 i# ]; L/ j! G
3{$BIXFI2(V2T97K[09O(Z8.png 8 B, ?- }- a0 l6 ^
7 x* C! v. B6 I. z0 n
11.4 ADC 采样时间寄存器 1 (ADC_SMPR1)
( ^& Z  ^0 A+ q& t4 AADC sample time register 1) }* W% W0 S, p( H, g
偏移地址:0x0C" N+ P! p' [0 L6 [( Y, o
复位值:0x0000 0000
* V3 a: Z! ?% q% N1 P' p2 f8 _2 w& G4 C
20200911174317631.png 6 z  ^' }) ]1 K$ t9 E4 Y3 b

$ H$ g% P! O& t8 }  p11.5 ADC 采样时间寄存器 2 (ADC_SMPR2)
& E3 r7 Z' [, Z% fADC sample time register 2
9 q+ E1 N0 @0 y* P5 X! ]偏移地址:0x104 i7 l/ A) N; @( ]7 i
复位值:0x0000 0000) _9 ^/ J% A' r3 l0 g

5 x1 ~; b: d  {! d( W) _ SKV`G_[PR4$$]794GP[X.png
+ o" }, O, C+ }/ J4 M2 J. j
; s6 P! j7 e( Q; v" @8 Y11.6 ADC 注入通道数据偏移寄存器 X (ADC_JOFRx)(x=1…4). |& Q1 L% |, J7 g0 l
ADC injected channel data offset register x  d: S( r2 B7 T/ C0 V: u% C" W
偏移地址:0x14-0x20
; u7 V4 F4 e# E1 y- O  ~; F复位值:0x0000 0000
& l7 q' R. N% ?2 y/ D3 d6 J5 i% J( o7 f( S& g$ ~, @/ ?! ~; ~8 @3 g
20200911174332649.png
( N+ ^9 b- Q, r4 O/ [+ f) r! X
) l4 w# t8 Y) |( r1 g1 Z7 F11.7 ADC 看门狗高阈值寄存器 (ADC_HTR)% h7 M+ c- s$ P' N% r. c/ t
ADC watchdog higher threshold register+ }1 a" a  U! H2 w
偏移地址:0x24/ x/ I2 ]6 m1 R3 h: f+ K. b
复位值:0x0000 0FFF
: P/ N& d2 i. ~9 Y) K0 b- A2 r( C  z5 C3 G# P9 C) V' v* D. l
20200911174347934.png
2 Y. ~' \! g; N3 D
+ q+ \4 Z8 ~& U6 j, k$ n, T11.8 ADC 看门狗低阈值寄存器 (ADC_LTR)  c+ ]  `% I& S$ F
ADC watchdog lower threshold register8 L6 l* W, W3 `, C8 x: [
偏移地址:0x28+ h: I( R. [2 E# B. j9 b; `4 ]
复位值:0x0000 0000
* f% c* [0 X( C, _: \* ?* m3 O+ C; o) C
20200911174341113.png
5 e* n# i. ^& C- @) w3 e( y) p0 P; ~4 k  t) y6 h$ }  M
11.9 ADC 规则序列寄存器 1 (ADC_SQR1)
% e+ {7 Q" y/ a+ O
ADC regular sequence register 1: c; h% x  ^: l2 L
偏移地址:0x2C) m! n; H  F/ I# _
复位值:0x0000 0000
, B4 ?/ ]5 d% _; I$ {& K8 N/ {5 \, t1 }5 o
5 n0 W9 U+ Z, J3 [* z; o% ^
& U% U- R4 A8 |0 g1 J% [
11.10 ADC 规则序列寄存器 2 (ADC_SQR2)8 X' M( W3 O; N/ o4 Z+ h
ADC regular sequence register 22 Q+ h- Z: C0 D, A: Z2 @
偏移地址:0x30$ C0 m$ m* ]0 Y3 M9 N, K
复位值:0x0000 0000' a" x1 U* A2 o

$ E5 m) [. q) X: L. _% a 20200911174407621.png / ?1 Z( S+ D, b' g2 ]

) ~' d2 \' X& R9 W4 L11.11 ADC 规则序列寄存器 3 (ADC_SQR3)
$ @  ~8 t" M2 e& Z) U' c/ G! bADC regular sequence register 3
& b2 j$ I: z8 y: f% p偏移地址:0x34
6 D  U5 A  T# x* V/ K; M复位值:0x0000 0000
/ u/ `  U! c) g* a  p; f
" G# E4 |' b. A& l* }  Q 20200911174414882.png , h$ t1 T. C" Q' s
& a2 J. R* @' ~+ [) Y. `6 a
11.12 ADC 注入序列寄存器 (ADC_JSQR)
9 @& ?: i% H# Q4 b+ UADC injected sequence register( v' b& v6 `: |! x8 d5 e4 J
偏移地址:0x38' K* p  e. `' P& d4 l' j" r
复位值:0x0000 00002 {( q' F. c8 Y" m- J
; e. S9 h/ z7 S
20200911174423509.png
) Q. a% Y/ O- x5 v) p8 [
/ L6 d, Y* K0 e/ T/ L/ p11.13 ADC 注入数据寄存器 x (ADC_JDRx) (x= 1…4)  h" S- @* x( N3 j
ADC injected data register x* b' V, s, l8 q
偏移地址:0x3C - 0x487 u7 p) H' J! W4 O
复位值:0x0000 0000: f& g3 e: J  H

* A" X3 {+ @! L* h3 i4 O$ i 20200911174429707.png
/ z  Z$ m/ |9 A1 F, d
5 ~) [$ d. ^8 f- y0 f( F* Z4 g11.14 ADC 规则数据寄存器 (ADC_DR)
+ }# a! P( K: V: O  `, dADC regular data register/ m8 e+ r2 Y; F) A3 F8 B
偏移地址:0x4C1 ]! }6 ^: w+ H
复位值:0x0000 0000
0 U/ v3 X* _( }, n
  u, D1 ]0 w6 I 20200911174436506.png
, u/ \; J0 t0 ]0 e: L( ?9 [* G, @6 M* ]
11.15 ADC 通用状态寄存器 (ADC_CSR)
7 \7 K+ p: R/ q- e! ~6 s- f' aADC Common status register' R$ J+ t0 ~( I) `3 Q
偏移地址:0x00(该偏移地址与 ADC1 基地址 + 0x300 相关)6 H9 L6 D! r7 X; E% R8 z
复位值:0x0000 00000 q! e# A# g. }- V) ?6 `3 z/ V* D
该寄存器可提供不同 ADC 的状态位图像。但是,它为只读形式且不允许将不同的状态位清零。必须在对应的 ADC_SR 寄存器中将其写为 0,才能将各个状态位清零。
. r2 h: J: C, k% l5 N/ L7 ]) F( p
& A4 i: _0 Z$ S* }. p9 R- v _0TDH%1I7LMR2I9IYZ2G0F0.png 7 R# o* j3 u% l) L& _+ {5 i

& n* o9 v; r; |* O. n11.16 ADC 通用控制寄存器 (ADC_CCR)

( n( @4 x" k; Z  s& X0 ]9 X2 X* DADC common control register
8 G4 U5 y0 l4 F( ^偏移地址:0x04(该偏移地址与 ADC1 基地址 + 0x300 相关)
" z9 H9 D" ]" @% M# P复位值:0x0000 0000
; F" h- H/ S: t8 t3 E2 m' k, B, v% t
20200911174451201.png 8 R9 C; ?, x) ]3 `7 D) x

. V7 u# e7 X: n11.17 适用于双重和三重模式的 ADC 通用规则数据寄存器(ADC_CDR)
5 W  Q0 `5 L; B7 ~! T( ?1 ~ADC common regular data register for dual and triple modes. S0 @* U3 s, X7 X3 b) e8 l# g
偏移地址:0x08(该偏移地址与 ADC1 基地址 + 0x300 相关)% q) J: {# W4 S6 |$ Z
复位值:0x0000 0000
) O1 N- z3 `/ q5 W7 v' V" A
4 ~# c1 w+ D9 B9 {3 c! O5 v 20200911174458593.png
- f4 R4 {. [% T. S& C" K( x, m$ u8 `, Z" J, E( Z3 a
+ I8 U0 b: A9 g! [& i
2020091117440048.png
收藏 评论0 发布时间:2022-6-14 14:52

举报

0个回答

所属标签

相似分享

官网相关资源

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