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

【经验分享】STM32 ADC详解

[复制链接]
STMCU小助手 发布时间:2022-6-14 14:52
01. ADC简介
% D) G+ K" P2 W( n  w12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 V BAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。
2 S+ R3 V: |# _5 N0 z* j( _  ]/ n; Y2 w7 Z5 j; K$ K
02. ADC主要特性! v2 i4 r- Q5 @
● 可配置 12 位、10 位、8 位或 6 位分辨率! x! t2 Z8 Y1 P  o
● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断
$ N- {. o3 T6 o) _9 {● 单次和连续转换模式" s5 s% k' D3 [, y. w# }8 \3 K% m
● 用于自动将通道 0 转换为通道“n”的扫描模式
1 k7 r  V/ K+ o0 Y. |  Q● 数据对齐以保持内置数据一致性# [! e  V) C8 U
● 可独立设置各通道采样时间+ h$ q) }) y1 I0 g. p; P
● 外部触发器选项,可为规则转换和注入转换配置极性
( y% {9 T) V  D2 ^( x● 不连续采样模式
" E  d8 ?, m1 A8 Y● 双重/三重模式(具有 2 个或更多 ADC 的器件提供)
' ^/ }% d" H! ]● 双重/三重 ADC 模式下可配置的 DMA 数据存储7 [4 }$ |5 [; k* l) J( }
● 双重/三重交替模式下可配置的转换间延迟
8 t* s5 F3 \0 ~6 `2 K● ADC 转换类型(参见数据手册)
8 c. E) I" I7 e● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V
, n$ _4 c/ ]* |7 U) J● ADC 输入范围:V REF—  V IN  V REF+
, b! z5 {/ C" T$ x% @; _● 规则通道转换期间可产生 DMA 请求, P, A& ^$ X9 ~$ F: _

! Q2 v4 `8 U) a  x) }" P8 a注意: V REF— 如果可用(取决于封装),则必须将其连接到 V SSA 。# l$ ^/ b! `7 A9 f9 |$ X
. \  A6 ~; r: r* I5 X
03. ADC功能说明! s; B6 W% X5 @  A. n8 q
框图/ ?* ?: U4 }+ V  ?4 M7 k0 X* G' ]- [
2 |2 @2 S% C/ x& Q
UKV3YY`MKV)A6BMUOU`)Y53.png / v3 r4 g" l8 v% B  y' `
5BR_]HTDOCDA~CLS9RXR.png # b" z  j5 M3 T  W; o# F
: z( q$ J+ N/ i
04. ADC开关控制4 a! N; A% p, r+ f, i0 Y9 ]6 b( j6 U
可通过将 ADC_CR2 寄存器中的 ADON 位置 1 来为 ADC 供电。首次将 ADON 位置 1 时,会将 ADC 从掉电模式中唤醒。# F% w) i# }7 \3 ^. d
; @$ _; E: g9 g  |
SWSTART 或 JSWSTART 位置 1 时,启动 AD 转换。! \5 g/ o' J& K+ m( ]+ `9 E7 x; H
1 V5 H1 {% n' `1 d6 g  J( u$ X
可通过将 ADON 位清零来停止转换并使 ADC 进入掉电模式。在此模式下,ADC 几乎不耗电(只有几 μA)
3 c5 l3 j8 R+ d1 O- }1 b# M0 u
05. ADC时钟+ A- j( j4 n  m2 I9 {. ~9 l& ?
ADC 具有两个时钟方案:
) y! {0 N* c0 o' |' A6 t7 j7 Y● 用于模拟电路的时钟:ADCCLK,所有 ADC 共用/ F' ]/ \1 C" U- Q& j- T( R
此时钟来自于经可编程预分频器分频的 APB2 时钟,该预分频器允许 ADC 在 f PCLK2 /2、/4、/6 或 /8 下工作。有关 ADCCLK 的最大值,请参见数据手册。
3 ]$ w  c# _3 y● 用于数字接口的时钟(用于寄存器读/写访问)
* @& m$ D/ J  m- ]  M此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能寄存器 (RCC_APB2ENR)分别为每个 ADC 使能/禁止数字接口时钟。4 S0 r' u+ ]% ]9 X, Q0 t8 R2 n( B
$ A3 a5 _' F; o$ S! L1 C0 O
06. 通道选择
0 O) a* |# B7 [$ c7 A有 16 条复用通道。可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。  Z2 \+ o8 G3 F# E, Z
4 C' o  B& W& C' [
● 一个 规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。5 Y4 G- U) g9 H# J8 t
● 一个 注入转换组最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位
+ ]; z% C& M" m; W5 y# }6 E& c/ N* l
如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向 ADC 发送一个新的启动脉冲,以转换新选择的组。2 U! F9 Q8 J9 Y

& d6 ]! p4 l( `6 x2 [3 T温度传感器、V REFINT 和 V BAT 内部通道
' h0 N7 |0 f2 q8 P8 J# ?  q0 l
, N# K/ E( a, r% ]● 对于 STM32F40x 和 STM32F41x 器件,温度传感器内部连接到通道 ADC1_IN16。内部参考电压 VREFINT 连接到 ADC1_IN17。/ O$ E* i- i$ t: w, Y# f* k  X6 x
● 对于 STM23F42x 和 STM32F43x 器件,温度传感器内部连接到与 VBAT 共用的通道ADC1_IN18。一次只能选择一个转换(温度传感器或 VBAT)。同时设置了温度传感器和 VBAT 转换时,将只进行 VBAT 转换。
6 I1 b( K( n! N4 Z- n
% w7 E- @& }' @8 `! E内部参考电压 VREFINT 连接到 ADC1_IN17。
+ @4 m1 S  [1 }0 @& fV BAT 通道连接到通道 ADC1_IN18。该通道也可转换为注入通道或规则通道。  i9 C8 n  D9 v' ~0 Z$ F
注意: 温度传感器、 V REFINT 和 V BAT 通道只在主 ADC1 外设上可用。
5 f' L- c) |, }, A1 `/ Z8 I
. A# R4 Z$ H* i: y/ v+ h' V07. 转换模式8 T, O( f+ X( C6 \1 h
单次转换模式8 v$ q  P# ^" H3 B1 ~

( B2 o; n! l( o在单次转换模式下,ADC 执行一次转换。CONT 位为 0 时,可通过以下方式启动此模式:* y) v9 q8 M2 B& \6 U
● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道)
9 Q& c( J# T& b; A● 将 JSWSTART 位置 1(适用于注入通道)
- c) J. c+ t& X! D: m/ U& h● 外部触发(适用于规则通道或注入通道)6 Y. y; Z, B: @/ D: e/ ^

) @8 G: J; l& @$ K5 k( g- [完成所选通道的转换之后:0 s6 @% ^. A6 v% M' e. K4 Z$ U
● 如果转换了规则通道:
. W' g2 y0 T  j7 b0 T) ^— 转换数据存储在 16 位 ADC_DR 寄存器中1 e: g! X8 \: w2 ^
— EOC(转换结束)标志置 1
8 W6 E7 S7 i& z— EOCIE 位置 1 时将产生中断4 d# ?+ c" M2 ^& I* p9 a- B7 p$ |
● 如果转换了注入通道:) D1 C5 Z) [# }( A' P$ \  Q
— 转换数据存储在 16 位 ADC_JDR1 寄存器中
" \: F8 z& x9 w8 |— JEOC(注入转换结束)标志置 11 z' H# j. c; a5 n
— JEOCIE 位置 1 时将产生中断6 f# p" k8 h* |; ?, E4 Q9 h
然后,ADC 停止。% ^/ e2 `/ F' w$ O0 v8 b

2 B2 c5 L0 M+ i+ X连续转换模式2 S1 f+ G# s4 W7 n! b! G
+ K+ U; @, S% b8 I/ I$ i: |0 ]
在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换。CONT 位为 1 时,可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位置 1 来启动此模式(仅适用于规则通道)。
* c: Y4 @# i* G6 s3 u
& E& ]& N+ E4 h- j  r0 c每次转换之后:/ M/ e$ w2 I' o
● 如果转换了规则通道组:- j( G1 `0 n5 b4 p9 V* E/ {0 H
— 上次转换的数据存储在 16 位 ADC_DR 寄存器中5 o7 k- `. ^6 {& P( Q1 n" i
— EOC(转换结束)标志置 12 ?6 T% `, P$ j7 G; O3 {
— EOCIE 位置 1 时将产生中断. C' C! h; U; ]5 g) r4 m. |( ~: ?2 l- |

2 ^' B$ b+ X% r& }3 I; ~3 x" [温馨提示# N# j* w; S; U

. u: v9 y, c* {无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用 JAUTO 位),请参见自动注入一节
! ^8 `$ ^- x- J3 B. o7 [
2 n2 i5 ]. S- b9 _; P08. 时序图
" o4 v9 [- _/ h4 L: }
; D" G! d: ^4 ~% `$ V
EMK5LWHRZ3]VT_6H0[D{]}2.png
, w+ i/ Q3 f/ b& f9 f3 Y3 J) _1 i) S6 ]! B  ?
09. 扫描模式

' n6 N- O( L) ]3 j/ P此模式用于扫描一组模拟通道。. h% _6 I6 K% D5 }# h% R; A
通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。将此位置 1 后,ADC 会扫描在 ADC_SQRx 寄存器(对于规则通道)或 ADC_JSQR 寄存器(对于注入通道)中选择的所有通道。为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。& X+ S  m( J6 f6 Y6 J* i- N
, y# O$ g0 o) s9 o6 l0 ^) Y
如果将 DMA 位置 1,则在每次规则通道转换之后,均使用直接存储器访问 (DMA) 控制器将转换自规则通道组的数据(存储在 ADC_DR 寄存器中)传输到 SRAM。
# ^: B9 z0 Y& m$ Y. j6 M+ p6 Z
0 M* T, N3 z1 R4 e) }4 v8 [在以下情况下,ADC_SR 寄存器中的 EOC 位置 1:/ u7 O2 `3 i$ _7 n, C6 q
● 如果 EOCS 位清零,在每个规则组序列转换结束时
9 m6 X( P  o/ L' G- x( Y● 如果 EOCS 位置 1,在每个规则通道转换结束时
4 y; D- _* g  E从注入通道转换的数据始终存储在 ADC_JDRx 寄存器中。- S" b9 z; |4 \! w3 _
$ _" I6 D: t3 A; t" p# g' n
10. 数据对齐
9 Q6 T" o" G4 eADC_CR2 寄存器中的 ALIGN 位用于选择转换后存储的数据的对齐方式。可选择左对齐和右对齐两种方式,如 图 38 和 图 39 所示
" x9 `7 D+ |% Z* `* y+ J' R' r7 J# e8 C' u1 }7 L) t+ U
注入通道组的转换数据将减去 ADC_JOFRx 寄存器中写入的用户自定义偏移量,因此结果可以是一个负值。SEXT 位表示扩展的符号值。
$ @' h+ G( A) o! ?- ^% _" c: z- L+ p& N, A' Z' ]1 X* \
对于规则组中的通道,不会减去任何偏移量,因此只有十二个位有效。( I# y/ G7 `# c5 L

8 t. ?% `- G3 g OCUXBJ9Me(89QUT4Q]GBR.png 7 t' Y- N; |1 G! @" B: k; b

6 t) p& `+ @$ o11. 寄存器
* n" I+ ~8 e6 b, F11.1ADC 状态寄存器 (ADC_SR)

  b% k- o  K% f0 nADC status register, _! V3 l; r# Q$ I' H$ |
偏移地址:0x00
% v" E1 E- ?  C  O; P- T8 m  g复位值:0x0000 0000
3 S- U6 k/ v" @* f& R, R5 q. l9 `2 o8 n
20200911174251874.png + p  ]1 Y( q  c0 w

6 {6 f; h5 w3 e7 c2 g* j11.2 ADC 控制寄存器 1 (ADC_CR1)  [( b# `* n$ M& H( Q( i' ?6 \
ADC control register 1
. z* J8 L* n  B+ K! _+ k偏移地址:0x04
* _4 u- F6 w) Q5 q  t- _8 _  w1 H复位值:0x0000 0000
9 F* S8 u* g" ?' z- P. `; s- |) Z& C7 r
/ v$ P) n! l* ]: Q2 m# ? 20200911174301609.png
0 E% y4 ?5 O, A5 g) b( h% w3 K( N* S+ V/ `/ O  G! m
11.3 ADC 控制寄存器 2 (ADC_CR2)
+ e" ?& H! e. O" B, ]0 I% x8 o& hADC control register 2$ }1 t9 @1 O% Y' `6 G1 d9 G0 A
偏移地址:0x08
! X- Z  e' s% s3 G9 i* v. B1 E复位值:0x0000 0000/ E2 T) X" v7 a3 Z

% Z! M9 i3 U7 ]- ?  t" A 3{$BIXFI2(V2T97K[09O(Z8.png
' r) H6 \7 |* ^, C7 \  x* F, P
, l) E( M- ~# p$ Z4 d8 L11.4 ADC 采样时间寄存器 1 (ADC_SMPR1)
5 s- t4 I6 Q" qADC sample time register 1
0 j; s# i# X& Z) A: r. t7 x: u偏移地址:0x0C
: ]. G: w3 Q, n' T  l% k5 a! c复位值:0x0000 0000, L% w6 F' F% p  a1 u7 c+ e
- |) [. p0 ]  O- K' M/ b  @& l! A
20200911174317631.png # ~# |8 {9 P% w

/ J5 x5 M, b5 a; P+ U; l# ?11.5 ADC 采样时间寄存器 2 (ADC_SMPR2)
% S; ^. W8 b* _5 t, M; a+ N5 y/ CADC sample time register 2* k; c" c/ S: t4 z! J: {. \; k
偏移地址:0x102 _- y9 r) h) B  g7 R" |4 D- @" d$ o. z
复位值:0x0000 00005 w8 Q% o. ], N2 A7 `

" X8 d% ^/ s/ J' d4 y SKV`G_[PR4$$]794GP[X.png 0 \1 Y( c9 E: O" ^# u

5 P! k4 h4 s  ]11.6 ADC 注入通道数据偏移寄存器 X (ADC_JOFRx)(x=1…4)
! h4 G4 F4 r2 {ADC injected channel data offset register x& n/ c0 m* K0 [/ b7 K1 j
偏移地址:0x14-0x20
, s8 r/ p/ f1 X& w) u9 U8 j复位值:0x0000 0000
. d, l! O5 r9 s. Q/ i+ b5 O; m2 {9 {
20200911174332649.png . N3 k2 _) y  v! w

& e0 ^3 w9 Z' a3 A; q11.7 ADC 看门狗高阈值寄存器 (ADC_HTR)
5 ?9 D6 a' _# CADC watchdog higher threshold register
) Y& j. c! a+ f  _偏移地址:0x24) {: ^. v! @1 K$ f
复位值:0x0000 0FFF3 y" r) N5 L0 y9 e

! }0 {' i3 Q$ B& }/ u8 P7 i 20200911174347934.png & `8 c4 b! L7 ~( x

- i2 v+ ^0 D6 v. i11.8 ADC 看门狗低阈值寄存器 (ADC_LTR)
9 a# p2 y& g" r4 k; GADC watchdog lower threshold register2 I$ O; G0 F. g: C0 T% W* x
偏移地址:0x28$ K) H& q" F" e- H+ f. x
复位值:0x0000 00002 J0 m( A0 C' J  \

& W/ Z& ?8 Z: L# q 20200911174341113.png
! G9 P5 {' _$ m% z( }& \' \+ H9 E# r& d: R/ h  p" G; ?9 j2 y
11.9 ADC 规则序列寄存器 1 (ADC_SQR1)
! c# _* H# ^8 {+ M( z# }, q( B+ n" U
ADC regular sequence register 1
, d8 A7 ~! \! G9 ]6 M7 d) C5 r5 X偏移地址:0x2C
: C* C& ^8 c8 f7 Q% e复位值:0x0000 0000' n6 s6 o4 c2 |& b

) I4 L/ D; ~/ A' `7 i9 u; U, n7 P) ]' N, Z# b
5 l+ s6 _7 H5 X3 K0 D
11.10 ADC 规则序列寄存器 2 (ADC_SQR2)
& z$ u) U# c8 \+ }  mADC regular sequence register 2* n7 a* I6 |0 u7 O/ I+ E/ H1 a3 E7 c5 p
偏移地址:0x30
% ~" ^8 c8 j7 s3 w# ]/ O' C# o复位值:0x0000 0000
% ]3 {! }+ t5 ~% u5 d7 k! c+ \. i+ `+ m& `2 k! `; D
20200911174407621.png 4 L( v) b4 r2 o( w# T' _
8 Y/ k* ^% Y1 K  m0 x7 E! h. N( \( b9 t
11.11 ADC 规则序列寄存器 3 (ADC_SQR3)# J' a1 }% S3 |% Z3 K; O5 n
ADC regular sequence register 39 {6 S' `* w8 i' U# v5 d. o# t7 d
偏移地址:0x343 x* s( l! [. e- }# m: j: v3 R
复位值:0x0000 0000- i7 O* ^+ L0 m; k* `
% k  B3 I3 F3 v+ C+ a: x
20200911174414882.png # c; f4 D% j, J* ^" Z. Y: Z
8 u" ]2 m  [0 ]8 I
11.12 ADC 注入序列寄存器 (ADC_JSQR)  `$ [6 `0 ]! e; X4 t1 C
ADC injected sequence register
& w5 m( S3 ]$ M$ j( k0 Y5 q6 W/ p偏移地址:0x38& D" |7 z8 r  q& k  I( n
复位值:0x0000 0000
2 G1 h' x8 ~( J4 g) j  X" }
8 O! ^( t4 c9 a+ q1 c9 ^4 K 20200911174423509.png
$ w+ x! a; w5 c. i& W  T' E$ v  y6 I' M6 F0 i
11.13 ADC 注入数据寄存器 x (ADC_JDRx) (x= 1…4)+ |+ E/ H- s8 n! ^9 C: o" b
ADC injected data register x9 C, o" m8 b9 G! F2 n8 G5 |3 h
偏移地址:0x3C - 0x489 P) W' G6 s5 D8 l( n+ g: g; p
复位值:0x0000 0000
  t+ C! Z/ p6 D' c# H: l- l- c1 G
2 R$ J' u& [* {' r4 [( N8 m* O 20200911174429707.png
) s5 }5 t" i/ u8 S+ q- t1 u$ w
+ {( x6 e* r& |: j11.14 ADC 规则数据寄存器 (ADC_DR)0 T  y6 @6 ?, c* o" q) ~
ADC regular data register
, z3 l4 ?0 _0 C' Q/ {* v- z0 `偏移地址:0x4C
" b/ ?# e' I2 b: x复位值:0x0000 00002 F& ^7 @; r, v

3 ?' B3 a- x2 P5 a/ f2 y+ z 20200911174436506.png % F2 H: `2 R2 ^! R

8 N) b1 Q6 a3 D2 u- M( t, [+ K' T11.15 ADC 通用状态寄存器 (ADC_CSR)
1 d6 D6 W1 f# b; o* eADC Common status register
! Q3 a& N& b9 _2 ~; }( [6 X偏移地址:0x00(该偏移地址与 ADC1 基地址 + 0x300 相关)
9 q+ _; b. n% t% a复位值:0x0000 0000; Z: w4 P; _& J% X' `" c: K
该寄存器可提供不同 ADC 的状态位图像。但是,它为只读形式且不允许将不同的状态位清零。必须在对应的 ADC_SR 寄存器中将其写为 0,才能将各个状态位清零。
5 F4 m. y& _( u) h
! L3 t6 \0 y% B. ], ~* t _0TDH%1I7LMR2I9IYZ2G0F0.png . V7 {( a8 t- g% f9 b, Z9 n' _
; y; M0 H8 l2 d6 {4 D0 }7 i" C
11.16 ADC 通用控制寄存器 (ADC_CCR)

# A- _% o# r$ z$ DADC common control register, q9 K! [& }$ O7 q, a; v$ U
偏移地址:0x04(该偏移地址与 ADC1 基地址 + 0x300 相关)
; }5 [' P& a. ~& j8 n复位值:0x0000 0000' Q& r  S6 M" p+ M  ?

% G# I% G) O/ M) T 20200911174451201.png ( y2 m" _* r' M# y2 s8 t

! L: B, F1 [1 N! J+ P11.17 适用于双重和三重模式的 ADC 通用规则数据寄存器(ADC_CDR)
$ @2 P2 u1 I  VADC common regular data register for dual and triple modes
8 E, o% |5 ~. m5 x( \% v+ P$ O偏移地址:0x08(该偏移地址与 ADC1 基地址 + 0x300 相关)4 B4 I& S/ u/ b) V( k
复位值:0x0000 0000; J% @" m. i7 j9 q0 K& q8 K% h

/ Z9 A' p4 \7 j5 p: Q, o 20200911174458593.png
. [4 K+ c7 x7 K" I
' R' r/ X& O' K( B( \% c  X1 V/ E* e& V5 Y0 J% f
2020091117440048.png
收藏 评论0 发布时间:2022-6-14 14:52

举报

0个回答

所属标签

相似分享

官网相关资源

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