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

【经验分享】STM32 ADC详解

[复制链接]
STMCU小助手 发布时间:2022-3-30 11:00
01. ADC简介
7 B' |) G! \( v) l12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 V BAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。
7 l: b; T. z' F. c. A8 {* a3 E6 g) V8 H; J9 I2 V& U
02. ADC主要特性# d! I+ b- ^8 ~5 j
● 可配置 12 位、10 位、8 位或 6 位分辨率: b" |. {; T5 }& t6 T) M
● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断- N, W  e) \( c/ k
● 单次和连续转换模式
% B4 u9 o+ [/ k. z% Y6 l● 用于自动将通道 0 转换为通道“n”的扫描模式, ?+ i8 e7 {8 H8 o) F7 V' u1 k
● 数据对齐以保持内置数据一致性
+ R, v; ?& E& A! ^● 可独立设置各通道采样时间. v8 F: G7 Y2 \5 c  y# Y. h
● 外部触发器选项,可为规则转换和注入转换配置极性, @3 I$ ?- X5 C. _8 S6 X* }
● 不连续采样模式* s1 [4 A, r* |/ i
● 双重/三重模式(具有 2 个或更多 ADC 的器件提供)0 ?: r/ m" {! B/ h+ j
● 双重/三重 ADC 模式下可配置的 DMA 数据存储
6 Y7 D/ g. V" {) D$ m. V● 双重/三重交替模式下可配置的转换间延迟' g9 o4 m# H& ?9 P, j  G! k" D# F
● ADC 转换类型(参见数据手册)8 l6 z# o: M' {
● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V$ q" ^# i/ N4 B9 ^! e+ X# W
● ADC 输入范围:V REF—  V IN  V REF+
5 a3 W, c6 U! U6 F0 e4 U* H+ k● 规则通道转换期间可产生 DMA 请求
+ q/ ?# o5 s. d, X/ F( d- x
0 y1 @3 z* E! {) u注意: V REF— 如果可用(取决于封装),则必须将其连接到 V SSA 。( g7 y& m4 P7 q) z& ~9 Y$ D0 i
, n8 y7 m0 {& O: a- r
03. ADC功能说明3 R9 x  k, |* ~) Y  k
框图
. k0 V* ~. i3 \& v9 r6 ?
0 ^5 J, x- B4 _1 |$ n5 P 20200911174158569.png
* g3 n/ O+ u( r3 {- w) } 20200911174209875.png
' k; @; L8 B9 H. d, K; {
4 G# d" C0 {/ c! K- e3 J: d04. ADC开关控制6 C% k3 k+ R6 E8 a
可通过将 ADC_CR2 寄存器中的 ADON 位置 1 来为 ADC 供电。首次将 ADON 位置 1 时,会将 ADC 从掉电模式中唤醒。* F0 h/ z+ {" j* A+ {' C) i2 B% `
6 p- R- P& b7 q' X. c* M
SWSTART 或 JSWSTART 位置 1 时,启动 AD 转换。/ J! h1 C% e8 `% j
' H  o7 ^" q" e+ n2 G0 A
可通过将 ADON 位清零来停止转换并使 ADC 进入掉电模式。在此模式下,ADC 几乎不耗电(只有几 μA)
8 E7 I; l0 Y6 C8 g. H
4 R: I! Z9 k  `! w5 q; R05. ADC时钟/ w  S* ?! O% Y  `0 E' l: e- Z
ADC 具有两个时钟方案:+ a4 A# x$ n+ A; ^6 z4 q- U* d
● 用于模拟电路的时钟:ADCCLK,所有 ADC 共用0 h! ^+ @1 w; a( s- x
此时钟来自于经可编程预分频器分频的 APB2 时钟,该预分频器允许 ADC 在 f PCLK2 /2、/4、/6 或 /8 下工作。有关 ADCCLK 的最大值,请参见数据手册。
3 w# D# p! |( P; U9 c/ [● 用于数字接口的时钟(用于寄存器读/写访问)& K7 S; W" {- l+ P0 i- c* q. W
此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能寄存器 (RCC_APB2ENR)分别为每个 ADC 使能/禁止数字接口时钟。" e; C& ]/ K$ t

, F" [- ~; `- b06. 通道选择) D; X( I: H/ \. L" F
有 16 条复用通道。可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。5 r) P( ]3 Z6 f- F1 G2 x, ^) `$ ?
% j' V' E+ J2 w5 C1 [
● 一个 规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。
5 u5 e% a* Q, j9 G6 b) U● 一个 注入转换组最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位4 N5 w/ z% e, D+ Y0 T& [

- `4 p! `( R$ b8 p" w7 p" \如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向 ADC 发送一个新的启动脉冲,以转换新选择的组。
  }; P# V; H, p4 I1 \8 }. ^0 D( X9 S, V! E( w
温度传感器、V REFINT 和 V BAT 内部通道
8 c. c  Y% @) M8 f3 R" j) b4 P  e) z5 b3 D
● 对于 STM32F40x 和 STM32F41x 器件,温度传感器内部连接到通道 ADC1_IN16。内部参考电压 VREFINT 连接到 ADC1_IN17。0 n" ?- H$ n  N8 _9 n
● 对于 STM23F42x 和 STM32F43x 器件,温度传感器内部连接到与 VBAT 共用的通道ADC1_IN18。一次只能选择一个转换(温度传感器或 VBAT)。同时设置了温度传感器和 VBAT 转换时,将只进行 VBAT 转换。
: G0 W& A" \2 K3 ?
$ }- ?0 ~1 F" u+ m) M, j# V内部参考电压 VREFINT 连接到 ADC1_IN17。% o1 |6 ~; ]2 L! V
V BAT 通道连接到通道 ADC1_IN18。该通道也可转换为注入通道或规则通道。
: x9 S* m3 s4 ]4 Q注意: 温度传感器、 V REFINT 和 V BAT 通道只在主 ADC1 外设上可用。, Z& B. W# v6 B' S; q
3 b2 i% i7 ?: l- C) M) N* P
07. 转换模式
; U, Y7 ?7 J8 W2 ]7 i# \. t) d) |& U单次转换模式
1 e4 c5 n8 t" y* {  w

) K8 E+ a5 Z, @. O) E% A- e在单次转换模式下,ADC 执行一次转换。CONT 位为 0 时,可通过以下方式启动此模式:1 `3 c/ t, b0 h6 R
● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道)9 Y. L7 C6 e3 G# D
● 将 JSWSTART 位置 1(适用于注入通道)
+ l1 n9 ?: M0 D7 h  _! Z$ m; d● 外部触发(适用于规则通道或注入通道)& \, A" j$ i1 G3 e* x1 X

" k! _( Y& }2 }; T! o' g5 ~2 ?完成所选通道的转换之后:
# J+ E; @: L% K' ?; n● 如果转换了规则通道:& Z2 R! ~* G/ ^( p& s
— 转换数据存储在 16 位 ADC_DR 寄存器中& V8 Z, O4 V" `$ T
— EOC(转换结束)标志置 1
5 C; i( h: h1 S- _— EOCIE 位置 1 时将产生中断+ Y" W: U$ T1 L, J: X6 Y
● 如果转换了注入通道:
& P; e. f9 w0 g+ v" X- @! N. ?% p— 转换数据存储在 16 位 ADC_JDR1 寄存器中
" T% g( z6 v' m8 e' q0 G0 y— JEOC(注入转换结束)标志置 1
! o# U$ q0 @' F/ H. ^: A! [— JEOCIE 位置 1 时将产生中断
" C5 m  X& D* }8 Y% {/ q  g然后,ADC 停止。: s" X8 }1 V3 w

4 S/ e* a' n! y( [4 m连续转换模式
: B' `9 ^/ A3 l3 Q

) S/ Q# Q2 ^: _7 \) L" q在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换。CONT 位为 1 时,可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位置 1 来启动此模式(仅适用于规则通道)。( |7 w# P, F' x$ Z; s" x0 i# ?( C3 I* b
- e, a. `/ G! d( V/ `7 o8 c
每次转换之后:
* P* W- `. J7 j- Z! i9 _● 如果转换了规则通道组:
  X# a0 ]' _; n5 `— 上次转换的数据存储在 16 位 ADC_DR 寄存器中2 C& b/ Y8 `: m% H. U3 j! ?
— EOC(转换结束)标志置 1) Y7 r5 |! k; H/ X% I
— EOCIE 位置 1 时将产生中断, ~" n  h, w( q5 _

# H1 [- c8 |: W5 H: U, r温馨提示
& e% O: N  m# P2 D% O5 C  F
; ~9 M, R& z3 @) h8 _# g5 ~无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用 JAUTO 位),请参见自动注入一节
, z+ F: ^+ b% h6 B
5 t4 [* H  V; v7 T9 T+ I2 c2 n/ k08. 时序图
. A  C5 k. J9 M/ n" |7 r
% A# A8 ?4 N2 k# t' X- J 20200911174224425.png
  O; @. Y$ z1 K/ [+ [# j
4 \* O" [4 ]' F, Z09. 扫描模式/ \  R9 z* x" Y6 b: x/ R! S
此模式用于扫描一组模拟通道。
) ]8 [3 I0 d' b8 j4 k1 l通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。将此位置 1 后,ADC 会扫描在 ADC_SQRx 寄存器(对于规则通道)或 ADC_JSQR 寄存器(对于注入通道)中选择的所有通道。为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。* N7 Y/ v0 v- c/ {

2 e& r% z  H2 t) W如果将 DMA 位置 1,则在每次规则通道转换之后,均使用直接存储器访问 (DMA) 控制器将转换自规则通道组的数据(存储在 ADC_DR 寄存器中)传输到 SRAM。
/ e* O2 V+ n& ^$ w4 k* m& f
7 v. P* ?8 q3 C! e8 O在以下情况下,ADC_SR 寄存器中的 EOC 位置 1:
& z. [. {  x. X+ R- B' c● 如果 EOCS 位清零,在每个规则组序列转换结束时
" m' d5 ^& e) V; Y9 H' k  N● 如果 EOCS 位置 1,在每个规则通道转换结束时5 N5 T9 J. K* |& `
从注入通道转换的数据始终存储在 ADC_JDRx 寄存器中。
2 b" c4 s" T% d5 s
* Y. y1 {' O/ a" Z& i# z6 L- u# W. w0 U& L10. 数据对齐
- j8 @" N. E  U- k0 i2 }2 a
ADC_CR2 寄存器中的 ALIGN 位用于选择转换后存储的数据的对齐方式。可选择左对齐和右对齐两种方式,如 图 38 和 图 39 所示5 W) ~! }" z7 d3 |* F/ z9 ~
: x# X/ {+ g+ j9 L% F+ P8 b
注入通道组的转换数据将减去 ADC_JOFRx 寄存器中写入的用户自定义偏移量,因此结果可以是一个负值。SEXT 位表示扩展的符号值。
, @: U* J- W- P
+ _0 v  P8 {) e: B- i  I' n1 c对于规则组中的通道,不会减去任何偏移量,因此只有十二个位有效。
" M, W* w1 {0 R$ v% O: ?0 R" ]1 \0 j0 ?* m, }
20200911174239812.png
3 s( f$ e$ t  J4 q- [0 f; ?3 Q5 }4 |- B) [  G
11. 寄存器8 W5 Y* N# Y. k. }- D/ n$ |
11.1ADC 状态寄存器 (ADC_SR)

  R0 V+ w: P) t4 |+ Z9 L) w4 c7 XADC status register( d" N) @$ [1 d$ ~" o
偏移地址:0x001 c& Q3 q6 `! w
复位值:0x0000 00002 K/ e, Z; r4 ~. @! A" b

" j2 `$ y5 d! c% u 20200911174251874.png
8 I1 a$ [1 P! A! g4 _7 n. H, R! d& o& r% V% Y% O
11.2 ADC 控制寄存器 1 (ADC_CR1)) w$ |  B+ D& U0 A! r
ADC control register 10 U6 j$ I9 I* Y. I( I
偏移地址:0x04/ l  N3 P1 ~* F3 G! J
复位值:0x0000 0000( m/ X, P" V7 E$ d
' l( Z6 r* ]% i& D- E
20200911174301609.png
$ z2 [7 G5 P' f* Y6 u! O7 Q
; S0 v5 M( r2 F11.3 ADC 控制寄存器 2 (ADC_CR2)
) P- J6 o0 c9 h) WADC control register 2  R8 I, Q' ~9 Q
偏移地址:0x08& E6 W5 E6 `9 w! h; T  z2 I1 G7 m
复位值:0x0000 0000
2 f4 T' o5 q2 p8 k# G% x
' }( v/ k0 G3 T* q 2020091117430997.png
: ^: {/ b# F5 q2 m: x! j1 b1 s' M  U4 _+ \' x) X
11.4 ADC 采样时间寄存器 1 (ADC_SMPR1)6 H" u5 K/ x0 O, f3 k9 |* [
ADC sample time register 1
4 \# D1 H: \) `* U+ u8 }) S9 l偏移地址:0x0C
/ d' H1 \0 Y. i复位值:0x0000 0000
: b) q, k! L4 I: T
3 T% x/ O' l; q- v8 W* V 20200911174317631.png $ m, M9 E! g0 s8 y/ Q

7 r3 e6 u0 s3 x3 J; K/ B11.5 ADC 采样时间寄存器 2 (ADC_SMPR2)
; U; Y5 W1 W0 N9 M: F* Z; L- WADC sample time register 2/ ]; F3 {+ z7 g2 T% t
偏移地址:0x10' ]; Q. k  g2 b/ N
复位值:0x0000 0000
) Z* u5 a2 N7 W) R9 Q9 K& U' E
20200911174324374.png
# h' v. [& r. X8 x) ^9 i
* i$ e8 B3 b) K; t1 M0 j6 r5 |* _+ [11.6 ADC 注入通道数据偏移寄存器 X (ADC_JOFRx)(x=1…4)) V4 t# o' |9 B* M4 [
ADC injected channel data offset register x
( f7 V1 \! t6 \6 y1 i偏移地址:0x14-0x20. y1 M5 ?/ C7 R' J( u
复位值:0x0000 0000
) S, v: B& V9 j% U" g; B+ N9 _* C8 U) T
20200911174332649.png
0 c* s+ o/ @7 Z. Q
. L) W4 _! A. M7 R4 s11.7 ADC 看门狗高阈值寄存器 (ADC_HTR)) {- H" A  ^3 R, g
ADC watchdog higher threshold register! f5 d% r0 t8 i, K% l  }" }
偏移地址:0x24
. S& @3 o. V. ~# z复位值:0x0000 0FFF
, l- |  k! v# R4 R/ |! e* J
+ R( p: ^+ N5 p: a# L# b1 J 20200911174341113.png + V  A8 d7 r! ]# T- s/ S

. N6 u$ D$ V% `& a7 f11.8 ADC 看门狗低阈值寄存器 (ADC_LTR)
. G8 y5 C( `( i% p" ?$ v: k: vADC watchdog lower threshold register% a$ }) R) P$ \& S3 L1 f" X. T
偏移地址:0x28* ]/ ^/ W3 v5 j7 x# P
复位值:0x0000 0000
" R. d; G. o' K- G
9 ?* T) i& n% U& I$ @/ [ 20200911174347934.png & Y! s! J( K& b! V. X' ]1 j

. F. b$ J" m; _; ]3 g0 v11.9 ADC 规则序列寄存器 1 (ADC_SQR1)$ ^% R" u7 O3 D- g0 o
ADC regular sequence register 1, A4 @# z3 b) G- \8 w) v
偏移地址:0x2C
) _; x, q' S" Z! V复位值:0x0000 0000$ H% I+ Y7 @- P9 M( [( ?
4 _; @; e9 S) }8 Y6 {
2020091117440048.png
+ s2 O  W1 F. ]- |$ f5 [6 F5 C$ j/ w8 v6 s$ }4 X- b
11.10 ADC 规则序列寄存器 2 (ADC_SQR2)

. H, D! b1 U* {5 KADC regular sequence register 2- ?. B! j0 g4 i! |( T
偏移地址:0x30
$ @6 h! v4 K( U7 n复位值:0x0000 0000
: v- C0 D, B, n5 H: d
0 d$ V9 V2 G: U: l 20200911174407621.png ! B3 ~  N" K' h' j) [
( W9 @: k- S# z2 l8 P  o
11.11 ADC 规则序列寄存器 3 (ADC_SQR3). f+ T3 a( S' {$ E
ADC regular sequence register 3
6 J8 f" l6 v# o1 V偏移地址:0x341 ?1 O; i4 E% C
复位值:0x0000 00009 b+ }4 f, F) o. l

- r. s; o& c( u. _5 Z& d0 b 20200911174414882.png
, A& t3 X2 x  F
+ r( s  @( H# \9 z11.12 ADC 注入序列寄存器 (ADC_JSQR)
9 ^# E5 b$ f& EADC injected sequence register9 O* O9 V4 P8 m5 E. j6 G
偏移地址:0x389 s' Z0 |4 W2 B" `; w! S
复位值:0x0000 0000
2 S% k& N( R. v2 E% o# Y2 }: w1 y: `+ r- |. Y  I/ B; U
20200911174423509.png ! f* x& _" Z: H% H

' w1 h& m+ p0 t+ @+ V11.13 ADC 注入数据寄存器 x (ADC_JDRx) (x= 1…4)
* p% c% T) P  @( O' sADC injected data register x' @, W, T6 j5 s* j4 A
偏移地址:0x3C - 0x48/ T% P( A# u5 d) \8 [
复位值:0x0000 0000
, g0 B% y, H3 k% c" G( @, D/ l: p% V
20200911174429707.png
1 M* Z& D9 ]9 M& [  k( N# d7 w* b  z( t0 v* w
11.14 ADC 规则数据寄存器 (ADC_DR)4 Y5 {2 Z! ^+ c+ n
ADC regular data register1 k8 }9 B9 @6 p3 ^8 f1 P: O
偏移地址:0x4C/ w% C4 N8 `+ C9 m1 z
复位值:0x0000 0000
3 n- M( m) r* w& a
! Z* Y, U3 ^* w! i" d1 j 20200911174436506.png ) B5 v. y1 L0 w0 r# N- w( ~" \

! x6 P" p( u3 i9 v5 B4 A11.15 ADC 通用状态寄存器 (ADC_CSR)- Z( }8 \& w$ o
ADC Common status register) A$ [$ D" V0 s( f3 w8 X
偏移地址:0x00(该偏移地址与 ADC1 基地址 + 0x300 相关)
4 S$ W( Q* x7 v/ v3 M/ a2 n复位值:0x0000 00007 p% b( ?% q0 [+ I. c3 R" I3 `
该寄存器可提供不同 ADC 的状态位图像。但是,它为只读形式且不允许将不同的状态位清零。必须在对应的 ADC_SR 寄存器中将其写为 0,才能将各个状态位清零。7 P+ J& l& n: B' {% Z. F6 U
9 O, `  Z! a1 p9 r! {5 z
20200911174444527.png
, D" j. N6 C2 m4 C* I% }; h
. z4 M- R  J; F2 b11.16 ADC 通用控制寄存器 (ADC_CCR)& u8 ~0 i/ U4 j0 N& g
ADC common control register# d: Z+ b& R/ h
偏移地址:0x04(该偏移地址与 ADC1 基地址 + 0x300 相关)
5 W% ?+ T9 U# S# c; a复位值:0x0000 0000) d7 ?; z) x" A' x

" n. _% j! s# _! g) q0 [+ E/ P0 n, Z0 t 20200911174451201.png
1 {; O, b  c2 a% }+ d; K* J3 j
- e5 Y- g( Q& F/ W( x& r11.17 适用于双重和三重模式的 ADC 通用规则数据寄存器(ADC_CDR), X& L( {1 l* K! }( ^7 i
ADC common regular data register for dual and triple modes
: k2 y8 {% m: Q. t' L! i偏移地址:0x08(该偏移地址与 ADC1 基地址 + 0x300 相关)
  \' I6 U9 y, y复位值:0x0000 0000& s% Y! \* m2 J6 ^6 e8 w- h) @, O/ v+ z

; V: o6 R/ E4 T9 q" u8 c 20200911174458593.png   [% ]9 V$ Y3 L! [
% J) e2 w0 V  H" j4 f
- A  C" x; B8 G
* `/ ~6 W. S1 o6 P7 c7 M
赞 收藏 评论0 发布时间:2022-3-30 11:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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