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

【经验分享】STM32 ADC详解

[复制链接]
STMCU小助手 发布时间:2022-3-30 11:00
01. ADC简介
2 N! |; l' ~4 s. h- t12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 V BAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。
! y; [) z% T& V, p2 I- o9 E
" A: a* O1 j+ \7 u2 @# k02. ADC主要特性3 C, y' b( Q, n
● 可配置 12 位、10 位、8 位或 6 位分辨率
& g6 b9 A" x) y1 d5 m( E) I● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断
& i( O4 S& Y9 b5 V, s& d● 单次和连续转换模式
( ^( G, M. k6 Z4 ^/ _0 z6 \+ V0 \3 e● 用于自动将通道 0 转换为通道“n”的扫描模式
  h9 w: K$ l+ N+ T6 x  m) Z4 @& _; L● 数据对齐以保持内置数据一致性
  W* `5 ~8 x. B$ e; |- j; H. c● 可独立设置各通道采样时间. D" J* }2 y4 r) B! [5 k
● 外部触发器选项,可为规则转换和注入转换配置极性
' ]6 b- {' o! U● 不连续采样模式
0 n- W+ m6 j: \7 P3 e( _6 t; `● 双重/三重模式(具有 2 个或更多 ADC 的器件提供)7 Q2 e6 [5 @0 d1 w) E. X8 f
● 双重/三重 ADC 模式下可配置的 DMA 数据存储7 d& _6 i( a2 G2 d
● 双重/三重交替模式下可配置的转换间延迟
" k% O# g, G5 ^  m/ X) D# @7 R& V1 p● ADC 转换类型(参见数据手册)
' z) V8 w) j7 E● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V5 p/ ?( X. @8 [# Z, S- ~
● ADC 输入范围:V REF—  V IN  V REF+- G$ q* z' y: e0 [( ]. q0 v
● 规则通道转换期间可产生 DMA 请求
) ^  d2 W- J, |- l# q4 D4 {; o
! J4 J- G9 e5 U$ j2 d% C2 [注意: V REF— 如果可用(取决于封装),则必须将其连接到 V SSA 。
8 e! w7 a, ~& E* E8 j" {% {+ y
7 F$ C7 ]9 A/ \9 L03. ADC功能说明' N% e& n$ e) K
框图
4 D& Z( h! X4 {- _5 O8 N: l5 D/ B2 W
20200911174158569.png % K3 `7 P: K  y* R7 f3 j7 d
20200911174209875.png
" Q. y  R+ A, G8 Q$ Q# K: f6 H; @8 y2 `- h
04. ADC开关控制/ P& w8 E$ F0 `: E' |5 I( a7 X
可通过将 ADC_CR2 寄存器中的 ADON 位置 1 来为 ADC 供电。首次将 ADON 位置 1 时,会将 ADC 从掉电模式中唤醒。+ [! `9 a4 q( S* H, E( o& C: i

- ^, p, u! |' k- W/ Q! v6 r7 @% n9 xSWSTART 或 JSWSTART 位置 1 时,启动 AD 转换。3 [9 Z9 a& Z+ N- [* h8 `* m: s

3 H, N2 d- k, x5 @! J可通过将 ADON 位清零来停止转换并使 ADC 进入掉电模式。在此模式下,ADC 几乎不耗电(只有几 μA)  R/ K% _# ^* J% o$ }  Z6 R

2 J5 `& Y% j  k3 h2 e05. ADC时钟
' y' N* {3 u  K" ^5 P# m2 f6 wADC 具有两个时钟方案:; P2 T" I7 C6 X9 b' l# _' w* k- N
● 用于模拟电路的时钟:ADCCLK,所有 ADC 共用8 J2 V# x/ T; N& v
此时钟来自于经可编程预分频器分频的 APB2 时钟,该预分频器允许 ADC 在 f PCLK2 /2、/4、/6 或 /8 下工作。有关 ADCCLK 的最大值,请参见数据手册。
$ M$ ~2 G& }( H● 用于数字接口的时钟(用于寄存器读/写访问)5 k' k0 u, }* c8 \0 c; r! T% ?
此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能寄存器 (RCC_APB2ENR)分别为每个 ADC 使能/禁止数字接口时钟。9 X% F# ^( s+ |2 }7 ~
. ?% ^5 P4 G- o9 U0 M
06. 通道选择
1 R" }/ B7 O6 O% p. V; m$ p4 O# m1 f有 16 条复用通道。可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。
3 _( c" s5 Q6 u: _4 }! ^7 K
$ H6 Z/ U6 t9 i% G- |● 一个 规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。4 `1 t! P: t5 @2 T: }* f
● 一个 注入转换组最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位% B5 j4 k6 Q3 a$ W, u) j$ F

! I. I' ~' _0 U# e7 V如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向 ADC 发送一个新的启动脉冲,以转换新选择的组。; g. {! n, d3 J) M
! n3 b- Q$ |: d' s. L9 A
温度传感器、V REFINT 和 V BAT 内部通道
; j0 J) S5 o  g& }7 T( h/ a' K" G3 Q7 j$ m
● 对于 STM32F40x 和 STM32F41x 器件,温度传感器内部连接到通道 ADC1_IN16。内部参考电压 VREFINT 连接到 ADC1_IN17。/ {; ^( }" _7 w
● 对于 STM23F42x 和 STM32F43x 器件,温度传感器内部连接到与 VBAT 共用的通道ADC1_IN18。一次只能选择一个转换(温度传感器或 VBAT)。同时设置了温度传感器和 VBAT 转换时,将只进行 VBAT 转换。& _' W/ c& r: @4 g% L

/ l* m" b1 G/ k1 E: s内部参考电压 VREFINT 连接到 ADC1_IN17。5 e  H; G3 O& x$ {* H( h* D9 G! K
V BAT 通道连接到通道 ADC1_IN18。该通道也可转换为注入通道或规则通道。
& w5 ^: E. ?, o: c( q6 O注意: 温度传感器、 V REFINT 和 V BAT 通道只在主 ADC1 外设上可用。9 \5 H7 G3 Q6 U- \; X) v0 ^

7 {1 q( L  v$ s( W5 |. d07. 转换模式
9 G. Y# d6 r+ D单次转换模式

# f  l& f& s/ i6 |
) P1 N5 e: Z# k1 Y在单次转换模式下,ADC 执行一次转换。CONT 位为 0 时,可通过以下方式启动此模式:
" c' e7 a; u1 C2 C( v" G" H● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道)4 T; ^/ I: S6 w: g* u
● 将 JSWSTART 位置 1(适用于注入通道)
5 u; b. t! O" j7 G. H, A) ^● 外部触发(适用于规则通道或注入通道)2 p0 G# u: \6 ?  X5 o- V
2 ?; }/ e2 r9 n) W  x
完成所选通道的转换之后:9 L7 D( D4 C+ F9 N! |2 A+ F0 k! S
● 如果转换了规则通道:
4 v- ~7 }# H( j! d( t: x— 转换数据存储在 16 位 ADC_DR 寄存器中5 V. b0 p" R. Y$ t- H8 L/ A
— EOC(转换结束)标志置 1
3 |5 X2 x" _- x— EOCIE 位置 1 时将产生中断6 L/ a+ B) o" O2 m7 ]1 x
● 如果转换了注入通道:
' `( G7 R8 A0 X& o7 y— 转换数据存储在 16 位 ADC_JDR1 寄存器中/ P* w0 i" s2 A' h0 C* ^
— JEOC(注入转换结束)标志置 1
3 v- T! q9 @/ _! B— JEOCIE 位置 1 时将产生中断
, A% W$ B" |9 Y+ N然后,ADC 停止。
9 w0 C% ]/ D5 F
: o: ?4 n: z' ^& w连续转换模式
5 W. U8 X( X  ~* P, S3 q! O
( }& X: C$ k+ U* d* l) P
在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换。CONT 位为 1 时,可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位置 1 来启动此模式(仅适用于规则通道)。
! z0 E- s4 [8 M! }- Q7 a6 N, [# y  z! d- K) ]
每次转换之后:
5 v& ?0 [9 H! J7 P/ D  X. D● 如果转换了规则通道组:( F! S- O  p: t7 x: l# K. ~6 ^
— 上次转换的数据存储在 16 位 ADC_DR 寄存器中% c  y5 m* `, t5 ^  F
— EOC(转换结束)标志置 1; |: ~8 p: v' l0 I2 u
— EOCIE 位置 1 时将产生中断
/ `) h" o1 [, |7 {1 V2 a( h- Y5 e
6 p% Y: W1 \0 Q; c温馨提示
( I) R& P4 P: }' O5 K/ _. G4 T
# C* l9 E% F  Q/ O5 j+ T3 S无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用 JAUTO 位),请参见自动注入一节" O, G0 S  S+ U; \* k
0 H+ i0 D5 r0 J
08. 时序图
3 Q! Q! D. K/ Y! @: B  A) F
6 q1 a( [& Z  y/ H+ Q- U 20200911174224425.png 2 P; N* G+ W: ~1 b; v

6 J( [% I+ b) R" i09. 扫描模式% U0 m) W% E6 h: ^
此模式用于扫描一组模拟通道。; p0 j) }: l/ z$ D. U+ Y
通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。将此位置 1 后,ADC 会扫描在 ADC_SQRx 寄存器(对于规则通道)或 ADC_JSQR 寄存器(对于注入通道)中选择的所有通道。为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。$ Z  w2 M) L8 Q! l

. K3 c& J1 H9 V# N- q4 N4 _( [如果将 DMA 位置 1,则在每次规则通道转换之后,均使用直接存储器访问 (DMA) 控制器将转换自规则通道组的数据(存储在 ADC_DR 寄存器中)传输到 SRAM。
& x( f# I6 c% ]0 F2 t# Y* b0 E8 }1 \) z* M7 l
在以下情况下,ADC_SR 寄存器中的 EOC 位置 1:
6 T0 @4 i, ]( ^5 O" O) F' n● 如果 EOCS 位清零,在每个规则组序列转换结束时4 S3 ^7 k, F; v, a
● 如果 EOCS 位置 1,在每个规则通道转换结束时% C- x8 e$ M" U, C, B" ^
从注入通道转换的数据始终存储在 ADC_JDRx 寄存器中。
! |5 b1 U: z! x% B& i) b( v1 ?
/ W1 v9 g/ G2 v: e0 N10. 数据对齐

( d1 I9 z. \9 DADC_CR2 寄存器中的 ALIGN 位用于选择转换后存储的数据的对齐方式。可选择左对齐和右对齐两种方式,如 图 38 和 图 39 所示
0 d; [! ~. z) T3 w& T: z1 L7 y4 ^% C& i. H/ A. Z/ z
注入通道组的转换数据将减去 ADC_JOFRx 寄存器中写入的用户自定义偏移量,因此结果可以是一个负值。SEXT 位表示扩展的符号值。7 j+ N- t: b: c$ ]. m0 L

5 T2 Q7 m( A* D/ D' q% |" i对于规则组中的通道,不会减去任何偏移量,因此只有十二个位有效。) ~* \( O$ y7 c# f5 T
4 ^- R: [5 h. h% X0 @6 b, `
20200911174239812.png 4 s% V. z# Z; q1 ~' h

% `5 [% o) ?* j2 i- k" ?- M. `11. 寄存器
( L4 ^/ |% N$ Q. s' ?2 E+ R4 Y11.1ADC 状态寄存器 (ADC_SR)
: j! u2 D; E3 @- I
ADC status register
2 j' I) Y! o$ j2 E5 j偏移地址:0x00
( v  N: ^7 x- h6 T8 E复位值:0x0000 0000
7 \8 d& |' }! e3 y" R8 f$ o
: J; u* ?0 ]  E7 ^6 P2 T- m1 G 20200911174251874.png ' K/ B1 o# y9 z) L2 f5 w

# ?; _, a0 q9 `' s  y: G11.2 ADC 控制寄存器 1 (ADC_CR1)
3 z6 M, ]! B# Z- k4 CADC control register 1  c8 O8 u- U5 i  u: w8 i
偏移地址:0x04
6 n8 h. p  \9 _& V* f/ {  N; \7 ^复位值:0x0000 0000! l! ?1 i7 z  I  g  q4 `  z

- O% H. G0 s3 |9 c 20200911174301609.png 6 v) j1 q+ v9 Q+ }. r* @

% L2 j  x1 e1 o# v6 e11.3 ADC 控制寄存器 2 (ADC_CR2)* M: V& w. `- I3 p; Z
ADC control register 2* e/ j9 s" I: `; r+ `" b
偏移地址:0x08; G# C: ?% ^) [9 R  {
复位值:0x0000 0000
3 ]% C9 Y8 C# R3 G% H- E, S
0 Y1 H' C& N: L* f+ b 2020091117430997.png 7 A( \, k2 z: J" m& s
/ }7 F) A9 @6 b2 n0 l5 ]
11.4 ADC 采样时间寄存器 1 (ADC_SMPR1)& @8 }7 X) v% f4 Q
ADC sample time register 11 m3 X" P. Y8 L
偏移地址:0x0C! p  |% h' H$ r" u& i2 c7 ~
复位值:0x0000 00008 p" W! l( H  z' C, U  l4 s4 n

/ f) ^7 [, p8 x2 I+ x 20200911174317631.png
6 q+ _8 A, q6 s
' K" b; F( g# @& A& n- {2 C/ }' r11.5 ADC 采样时间寄存器 2 (ADC_SMPR2)7 L- `1 z8 j2 j  `" z+ G* \$ T$ S
ADC sample time register 2
& n8 q5 |* @# V2 `) F偏移地址:0x103 L$ Y# B7 A* g8 S6 H% ~
复位值:0x0000 0000
" E7 s3 i1 v* E1 F# b
, o) x0 G* t* ]7 y 20200911174324374.png + r/ C" U- E' P' x, x
" O9 Z, C7 K1 b0 n
11.6 ADC 注入通道数据偏移寄存器 X (ADC_JOFRx)(x=1…4)4 c: ]" J. ^  ~8 N+ }
ADC injected channel data offset register x$ f& z. I  E# W3 R* `% Y: c
偏移地址:0x14-0x20
2 X: a+ [3 p5 f  G7 |* j; l复位值:0x0000 00009 f; y" U2 R6 y4 `0 A+ Y: j

9 }) y) p5 B# V0 E% n, R 20200911174332649.png + A$ N) `9 {: n8 ]. P0 W0 p' L

& p% y7 Z( l- R; Q' {; {11.7 ADC 看门狗高阈值寄存器 (ADC_HTR)9 E' r+ k$ F- v
ADC watchdog higher threshold register
+ s1 X  b  w' x1 a* [9 L0 S; b( v偏移地址:0x24
8 ~' P7 e- U' V$ f( u8 T复位值:0x0000 0FFF
& [4 }6 d- b6 \8 J7 M7 [! U# |2 I( c+ r  m  T) I7 S) r
20200911174341113.png 8 `+ Q& {2 v! [# u/ y5 U6 _
' y5 J/ E+ \6 U1 O' H
11.8 ADC 看门狗低阈值寄存器 (ADC_LTR)$ o0 s' ~9 `9 m# g1 I
ADC watchdog lower threshold register
- Y% q% U$ G" S9 u" R: ~, j2 ^偏移地址:0x288 x7 |( a' f& ^- Y4 k0 D+ t
复位值:0x0000 0000
& O. u2 w9 a2 O. O
3 \. i3 r4 q: q! n 20200911174347934.png * q1 A+ @6 k, q( L; L- F) E
3 ^6 \) t! R  v9 ]: {
11.9 ADC 规则序列寄存器 1 (ADC_SQR1)
: n# y& P( {, ~% W7 ~# s$ rADC regular sequence register 19 e% x! e" s7 s7 y4 ?# f3 l3 ?
偏移地址:0x2C
1 G+ w8 p( V, x4 s: u: A# n6 v复位值:0x0000 0000; {8 x8 M! X" k2 j0 S. y! f

: n' S/ m# j. M7 B( w7 h 2020091117440048.png $ O' }0 [4 y0 {8 h9 y
; n, r3 l0 |+ t8 v7 H
11.10 ADC 规则序列寄存器 2 (ADC_SQR2)

! T# C- X) X! D8 F, kADC regular sequence register 2
% a: m1 C( i* T7 d' r偏移地址:0x30* S6 ?: r! ?1 b3 w
复位值:0x0000 0000
: a# D* P( P) h" a/ m" f/ x  B6 Q8 D7 x6 G, G; O9 K/ n: f
20200911174407621.png " K5 n" ?1 W7 D9 z
! u# k/ k# L$ D7 y( |; O8 w& q( {
11.11 ADC 规则序列寄存器 3 (ADC_SQR3)
5 s; G: C0 v4 F" q7 E3 ]: R# mADC regular sequence register 3
6 J: u$ E& r& i( ?偏移地址:0x34; b' y$ B9 {0 }4 r$ F) j  z3 E
复位值:0x0000 0000
. M1 a. @! A8 K! Z: k0 V$ D6 P5 ^8 @& P  W; X
20200911174414882.png
( ?+ v, L3 X! J' x1 g: I/ X* g' X( V4 t1 Z4 Z3 d0 a0 ?$ H
11.12 ADC 注入序列寄存器 (ADC_JSQR)
+ G+ B. h% [( b& {# n1 FADC injected sequence register
4 W. X  q+ x* k& Y5 G, |4 M" J7 f偏移地址:0x38, ?3 @. T% b1 |. M8 V
复位值:0x0000 0000
' E" D4 o: [% r; x) z$ E# S6 i7 ^2 h" w7 d9 m
20200911174423509.png
8 w) B' }8 \" T* E  C8 z) T7 u/ O% l$ d
11.13 ADC 注入数据寄存器 x (ADC_JDRx) (x= 1…4): y6 }$ C* ?% q
ADC injected data register x
8 X; r2 C, ?% `2 v% b偏移地址:0x3C - 0x48+ Q* K/ \* |$ ~9 n
复位值:0x0000 0000- ]$ l; P* K) N$ A
" Q4 r$ O% B+ Q' i, y
20200911174429707.png 6 {# L( x/ {% W, x+ d

9 x6 _0 ^6 g2 E, d6 n11.14 ADC 规则数据寄存器 (ADC_DR)
' M4 L# W; x5 {+ |7 H1 U# ]ADC regular data register7 \: P) l$ n4 M* v+ n5 P% y
偏移地址:0x4C/ ~1 L8 {8 Z7 U0 W4 n/ `8 b
复位值:0x0000 0000  s# e0 [, m! |) ?5 J  d# x

& q% W+ [% F! V; C* D- I 20200911174436506.png
! ?# W5 C9 [( v8 w
% S! h0 m3 c4 S$ [- B, t11.15 ADC 通用状态寄存器 (ADC_CSR)+ x4 E! Z' ~  f8 g( d8 M. Y
ADC Common status register8 @( s1 Q0 j1 a! U
偏移地址:0x00(该偏移地址与 ADC1 基地址 + 0x300 相关): D. t8 t: a) P& K
复位值:0x0000 0000
1 l3 u; d2 {5 ?3 K; T8 }- a1 _) p2 ~该寄存器可提供不同 ADC 的状态位图像。但是,它为只读形式且不允许将不同的状态位清零。必须在对应的 ADC_SR 寄存器中将其写为 0,才能将各个状态位清零。
3 v: b$ `# u% o4 U+ E, }! v' h, a3 A2 I* o+ |
20200911174444527.png ; ^# V# C  o' o5 W3 ]. P# P

* _3 I* B+ G& b- y3 W11.16 ADC 通用控制寄存器 (ADC_CCR)
3 z+ d7 W7 U! kADC common control register
6 W9 M" G5 t" L5 o) G6 o偏移地址:0x04(该偏移地址与 ADC1 基地址 + 0x300 相关)
6 K, V- Y) z3 N% t复位值:0x0000 0000) a  |% P% C; `
' Q7 G1 u6 @4 j3 ~6 P( {
20200911174451201.png , \# ?9 @4 q% r) w7 F+ r: B6 N, k

# N/ i" r* d3 l5 V; \- Q11.17 适用于双重和三重模式的 ADC 通用规则数据寄存器(ADC_CDR)' d/ P/ b0 n, w( \( E
ADC common regular data register for dual and triple modes
  B; o/ G3 ]8 |3 r( |  q2 R. v  r1 `偏移地址:0x08(该偏移地址与 ADC1 基地址 + 0x300 相关)  q0 q7 N) ]; i0 c" e# L- A
复位值:0x0000 0000
- g3 H4 Y8 W3 [8 d" e. z. Q9 N  e; h; P
20200911174458593.png
9 M4 ?: p' L# X6 ?9 S9 |- c8 }+ x3 k' i+ f$ H) l
+ `  n/ J' H+ s- B4 @
# }$ ?. ~4 m0 E8 ?+ z2 p; T
收藏 评论0 发布时间:2022-3-30 11:00

举报

0个回答

所属标签

相似分享

官网相关资源

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