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

【经验分享】STM32 ADC详解

[复制链接]
STMCU小助手 发布时间:2022-3-30 11:00
01. ADC简介' \) D5 l& O8 s2 d4 |
12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 V BAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。
) I" p# G" Y3 k) o  E: z; o  r) A2 E( K+ v9 G, B/ i
02. ADC主要特性1 r5 S% j$ _, r( J# i$ x9 q
● 可配置 12 位、10 位、8 位或 6 位分辨率
6 o8 }9 h" }7 g6 k0 l% e● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断$ v( m7 d( P$ }" t% Z4 R$ u) m3 n
● 单次和连续转换模式
% o  W& l* F1 \● 用于自动将通道 0 转换为通道“n”的扫描模式
0 e9 q, o2 Y" \' W, K  Z" K' u+ g● 数据对齐以保持内置数据一致性
$ x# ]% n: l, ^8 ^9 Y4 Z2 \# h& ?● 可独立设置各通道采样时间
$ y# V; R/ C3 C) [1 C) f● 外部触发器选项,可为规则转换和注入转换配置极性0 a2 l( a! X9 z" m
● 不连续采样模式) M* }/ P6 o# }/ |, T5 \' L
● 双重/三重模式(具有 2 个或更多 ADC 的器件提供)# y" E5 H! t' X5 o
● 双重/三重 ADC 模式下可配置的 DMA 数据存储
" s- k& ^6 E' ^, l● 双重/三重交替模式下可配置的转换间延迟) [3 M! ~0 q& G3 j' z
● ADC 转换类型(参见数据手册)
( K1 S: H/ D+ \1 B● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V) _0 z5 o1 j3 V) b- N$ ^* j
● ADC 输入范围:V REF—  V IN  V REF+; B( t0 ?" S# u' q/ l: C5 F/ R
● 规则通道转换期间可产生 DMA 请求
8 w4 f& u3 L- `  b! G& w
+ U0 q- Y) K4 S# n注意: V REF— 如果可用(取决于封装),则必须将其连接到 V SSA 。8 m: b. q" \1 }& r

* b. L, s9 Q" s03. ADC功能说明
1 z7 C9 c1 ]9 E+ ~% c3 b框图2 v, {  w& T. N  H' x4 j4 W

3 m5 x6 L. U1 B" F  _: J 20200911174158569.png " G. H8 y, Z: n
20200911174209875.png
2 ]) E" T! m; v9 j; R9 s, G6 E2 E
+ @% [, N: Q& {/ Q04. ADC开关控制
% \) ]* r# R! G, `) M! B可通过将 ADC_CR2 寄存器中的 ADON 位置 1 来为 ADC 供电。首次将 ADON 位置 1 时,会将 ADC 从掉电模式中唤醒。$ K" i. e* Q+ P- t% w! v8 b& z" R4 ]" _

" t6 l4 R2 p! n& B: lSWSTART 或 JSWSTART 位置 1 时,启动 AD 转换。
$ g3 }6 P" b, _+ j3 a% G6 q0 U
8 j1 s: R, G; J; J. v. G. F7 }可通过将 ADON 位清零来停止转换并使 ADC 进入掉电模式。在此模式下,ADC 几乎不耗电(只有几 μA)& d9 k$ d6 [* O
, @" U2 X0 T* A1 [, T+ o
05. ADC时钟- Y1 v2 t( C- R0 q+ h
ADC 具有两个时钟方案:
  P2 D' }& s9 s. W" [' u● 用于模拟电路的时钟:ADCCLK,所有 ADC 共用3 {  R0 T* q% `. h" [3 y
此时钟来自于经可编程预分频器分频的 APB2 时钟,该预分频器允许 ADC 在 f PCLK2 /2、/4、/6 或 /8 下工作。有关 ADCCLK 的最大值,请参见数据手册。
& m) J8 g) O( f$ L6 j0 f● 用于数字接口的时钟(用于寄存器读/写访问)
$ O) `8 g$ d! q' C% M, ?此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能寄存器 (RCC_APB2ENR)分别为每个 ADC 使能/禁止数字接口时钟。
5 B* e5 X% B3 v- k
& P, N! g5 S( o3 M  M/ D: D/ G06. 通道选择
3 ~5 U- g; t4 D2 Z, A有 16 条复用通道。可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。+ ~# u$ ]1 q% h) A5 x
, v. w" L( R$ I/ R
● 一个 规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。
& K% H1 E8 S) L1 f, s4 h● 一个 注入转换组最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位
; d& i7 K0 f* S" K, G( g& l0 ^
: ?# z6 O/ w4 ~如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向 ADC 发送一个新的启动脉冲,以转换新选择的组。
* Q; ^) e- I& q# [  k+ R$ O4 u" I% f
温度传感器、V REFINT 和 V BAT 内部通道
5 r  Z  m6 O  U; W
# F7 q' m0 G$ |- ?( o5 \5 w● 对于 STM32F40x 和 STM32F41x 器件,温度传感器内部连接到通道 ADC1_IN16。内部参考电压 VREFINT 连接到 ADC1_IN17。
: m7 q1 f+ V! C) h● 对于 STM23F42x 和 STM32F43x 器件,温度传感器内部连接到与 VBAT 共用的通道ADC1_IN18。一次只能选择一个转换(温度传感器或 VBAT)。同时设置了温度传感器和 VBAT 转换时,将只进行 VBAT 转换。7 z1 m; m5 O2 z# z! M
; O: ~: q0 k+ Q1 W: q2 ]5 u# N
内部参考电压 VREFINT 连接到 ADC1_IN17。7 I+ |, Y3 _7 H0 n. `" X# a
V BAT 通道连接到通道 ADC1_IN18。该通道也可转换为注入通道或规则通道。
* b9 [$ K2 G( k( I2 w! [1 Q3 }注意: 温度传感器、 V REFINT 和 V BAT 通道只在主 ADC1 外设上可用。8 n: w( J: {7 s' i: G! y) J( p
8 m7 C7 O  n& ?; u1 x. d: }
07. 转换模式6 [7 K# ^3 E) }; ?$ [! A
单次转换模式

; r: S2 y4 ?9 o8 g' Z2 N  E) t/ F% u2 r) O5 n+ g# C" P
在单次转换模式下,ADC 执行一次转换。CONT 位为 0 时,可通过以下方式启动此模式:
1 \: o  q) y) U- n7 k1 ^, N● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道)
% v! U; {- p& w" r● 将 JSWSTART 位置 1(适用于注入通道)
( x# t, z7 [2 i8 _1 ?& _● 外部触发(适用于规则通道或注入通道)
  [8 A/ f( ?8 E6 O% P- i4 f' o: `7 y' E
完成所选通道的转换之后:
7 X2 W: p/ t/ T0 Q● 如果转换了规则通道:
; `! F! ?7 r4 Q3 \7 ?1 K— 转换数据存储在 16 位 ADC_DR 寄存器中
# G# O) D# r! O& @— EOC(转换结束)标志置 1
2 D' _+ @- S  p— EOCIE 位置 1 时将产生中断
# D6 I* K/ ]- B0 ?● 如果转换了注入通道:
' g. u6 j- w: q2 V— 转换数据存储在 16 位 ADC_JDR1 寄存器中. Z4 c" H: M" C2 x& I
— JEOC(注入转换结束)标志置 1
+ q. J. ~9 ~) x— JEOCIE 位置 1 时将产生中断
% Y: I0 t. t6 g6 Q; }然后,ADC 停止。
, Q9 T' {$ I  Y5 R1 E2 y
0 T4 \' ]* r8 B5 D2 m) \连续转换模式
. b+ R" B/ \, k& H; ^* @

4 o* s7 {# U; v2 j- X/ K在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换。CONT 位为 1 时,可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位置 1 来启动此模式(仅适用于规则通道)。7 H% D* Y; X' i  G
( J6 c$ l' D6 |/ v5 b+ F' c
每次转换之后:
% B: H# C; D6 o: h● 如果转换了规则通道组:6 {0 t2 D+ a% h) O& i2 ~
— 上次转换的数据存储在 16 位 ADC_DR 寄存器中5 B/ c0 o% m4 D
— EOC(转换结束)标志置 1+ p( w; E2 t0 r9 A! y1 ~
— EOCIE 位置 1 时将产生中断
1 o7 U3 e" L/ F1 T, [4 F; z! V7 {1 U+ t( N- `8 T
温馨提示  F% z' [" c! O" c8 p. p
! D0 j: V7 v- X. y- ]/ x9 _
无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用 JAUTO 位),请参见自动注入一节
! `8 G& _. Z- U1 v  ^6 A1 f: i0 Q# t, @& o
08. 时序图
! I/ ^: j# L( o% W+ r4 c: z! d, n% o( ^% a) K  B
20200911174224425.png & g% `$ X8 a  I( D: y4 i; u$ a( N8 O
) M0 x& L8 Y+ }  m  @+ E$ r
09. 扫描模式7 N5 Z! ^6 U2 z0 Q" d0 M
此模式用于扫描一组模拟通道。( |2 w6 z% L, w
通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。将此位置 1 后,ADC 会扫描在 ADC_SQRx 寄存器(对于规则通道)或 ADC_JSQR 寄存器(对于注入通道)中选择的所有通道。为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。( m4 g# g4 ^0 D  \6 i- z/ N4 {/ P
! u& ?) D3 y7 e- @4 f/ C" E
如果将 DMA 位置 1,则在每次规则通道转换之后,均使用直接存储器访问 (DMA) 控制器将转换自规则通道组的数据(存储在 ADC_DR 寄存器中)传输到 SRAM。
' Q8 Q; z0 V2 l
2 G6 N9 m+ q5 d# P$ K- b在以下情况下,ADC_SR 寄存器中的 EOC 位置 1:
" \# \3 H9 i! {' ?8 \; V● 如果 EOCS 位清零,在每个规则组序列转换结束时
+ N2 O( }$ c) X' Y8 l● 如果 EOCS 位置 1,在每个规则通道转换结束时$ w- P: p. t; l% E1 b8 [! \4 _3 C4 `
从注入通道转换的数据始终存储在 ADC_JDRx 寄存器中。
+ ?3 ?: |) X( v) M. Z) b& [+ V* G0 q3 \9 G0 J1 [$ Q' @3 O8 R
10. 数据对齐
% t5 `- P  P) I% y. F
ADC_CR2 寄存器中的 ALIGN 位用于选择转换后存储的数据的对齐方式。可选择左对齐和右对齐两种方式,如 图 38 和 图 39 所示
9 l; w1 n( I! H1 u4 R
* K: {: Y- Q1 t. R注入通道组的转换数据将减去 ADC_JOFRx 寄存器中写入的用户自定义偏移量,因此结果可以是一个负值。SEXT 位表示扩展的符号值。
5 p1 p% d( o% F
* }" d. l4 ^( L7 ~! w) ~% v& \. k对于规则组中的通道,不会减去任何偏移量,因此只有十二个位有效。
( X4 K4 l' w# b; _$ I% t, V# i. p) L1 Y0 g" e
20200911174239812.png
, s* q' ~- y1 o, R; A# O# [! a& \8 ]- e5 B9 u& _; W, k; {
11. 寄存器
" g" \( n1 E* _2 F' A: |% X11.1ADC 状态寄存器 (ADC_SR)
0 y4 e; D7 k  r' W' a# _4 s; G
ADC status register
; j& L9 T7 J& \% H偏移地址:0x00
9 |# k0 Q9 I2 |1 n. ]- R  a复位值:0x0000 0000
& |0 a9 D7 R7 @5 w; a! K& q5 R3 s0 a1 N3 N0 V0 C9 I- R, m( F
20200911174251874.png
! t4 t" ?; w$ J! r- T5 A1 i9 b& u0 ^% q3 q) T
11.2 ADC 控制寄存器 1 (ADC_CR1)# `; w$ e/ V- F3 W
ADC control register 10 F, G% R+ e' {6 I5 b% U) E
偏移地址:0x04
9 ^+ S6 _+ p0 h: N' x0 }/ c# Y复位值:0x0000 0000
- j7 ^' U8 o) I3 O' u$ `2 d/ i& i7 p  L/ s" B8 V
20200911174301609.png
2 X& d, i2 u" N; @  r* F
  V6 c2 ~! W" Z) x$ j2 J- e4 q11.3 ADC 控制寄存器 2 (ADC_CR2)
+ y* C2 c1 n9 _ADC control register 2' T0 _/ M& E8 k/ l0 ]- g3 N
偏移地址:0x08, G+ u- @) U( p- K1 l
复位值:0x0000 0000, |/ H. @+ {4 |$ Z1 D7 }

! B: r. N8 D2 G$ r* V( n5 M 2020091117430997.png
- v6 L1 [$ G# [& \3 f6 L5 @7 Q% H$ T4 X' |0 U
11.4 ADC 采样时间寄存器 1 (ADC_SMPR1)# r' q7 _  \* T
ADC sample time register 14 ]2 b2 S/ f, G, }4 R
偏移地址:0x0C- C0 a3 A6 q: s0 n$ P; l
复位值:0x0000 0000
/ V, [3 h( d8 Z, j
) N3 ^$ ^3 a' }3 a 20200911174317631.png
' U9 Z0 p8 E; P5 i( q% L0 C! @$ t  a- \! ?- d- n% o& X+ c
11.5 ADC 采样时间寄存器 2 (ADC_SMPR2)2 U* `* [0 q3 m- c3 Z: t
ADC sample time register 2
3 i, j% c9 p4 a  {2 d# W4 C# q6 L偏移地址:0x10, \- n, X+ z; O: N9 [/ I/ R* K. B
复位值:0x0000 0000: a( r) M0 ~7 |8 F

& s+ }3 C/ N7 L% Z5 {8 Y2 y3 V 20200911174324374.png 0 v4 o& P/ M. t$ ^- j( E* C

0 \/ B- u. D& Z6 |  z9 d11.6 ADC 注入通道数据偏移寄存器 X (ADC_JOFRx)(x=1…4)+ F$ W9 N- Q( j7 I% B1 G
ADC injected channel data offset register x
$ j7 ^% x: |4 {偏移地址:0x14-0x20
0 R# j+ ?  u( Y  |复位值:0x0000 0000. E) W$ j7 W1 m+ h; i+ O

7 l. t: |( p  t" v6 t, E/ w5 l0 N7 L 20200911174332649.png $ d& }4 w& C& s7 f9 O- _2 W

, ^! y% v# D4 f0 |: f- ~  O( Z11.7 ADC 看门狗高阈值寄存器 (ADC_HTR)5 A1 K8 j( h7 i( u% W& z
ADC watchdog higher threshold register
$ g7 \/ H% j0 K  a. m偏移地址:0x24# g1 F: u$ z& n& e. U2 g% E
复位值:0x0000 0FFF
. e- U4 }$ f' u! K/ T0 t3 z! p; m6 o& G1 M6 C( W3 S9 \6 \6 _
20200911174341113.png 8 n: ^) c! |- G2 ^/ T& H, T
7 R4 q' z, t7 c' y
11.8 ADC 看门狗低阈值寄存器 (ADC_LTR)" Y8 F% _" \, Z, A) Q
ADC watchdog lower threshold register% L7 a! r  k$ x  a
偏移地址:0x28
  I: h5 |# s* ?1 F9 ^0 q8 Z复位值:0x0000 00004 H$ O$ N. b* {3 X9 w( B% m

/ ^0 ]" S$ r, w; \ 20200911174347934.png
6 u+ r* l$ o" a2 c) M
7 d& ~, m  a7 _7 |8 I" B11.9 ADC 规则序列寄存器 1 (ADC_SQR1)
( C: b  `8 J& B% nADC regular sequence register 1
; V; d- ~, Y8 s7 w2 h  R5 E偏移地址:0x2C6 {  {8 a1 g8 y
复位值:0x0000 0000' o3 d5 m$ J- J% Q

' I4 Z: D1 u. c4 h) v& |) ]$ w 2020091117440048.png   J& H4 A  V' z. j+ f, A
* Z( z) f0 d: T" _
11.10 ADC 规则序列寄存器 2 (ADC_SQR2)
. |" K" E, {& P! @+ }- T; e. i
ADC regular sequence register 22 K2 }$ C6 i- E+ Z8 d
偏移地址:0x302 L8 w+ g( n, `
复位值:0x0000 0000
& N' V6 H9 ]) P! ?# \( `3 `5 p8 d
3 O3 v: M6 t) M# J# }/ {8 u, ? 20200911174407621.png 6 X8 z/ _7 R& B0 a! c3 k

% f* |$ C' x* a8 s6 D1 R+ |' J11.11 ADC 规则序列寄存器 3 (ADC_SQR3)
3 Q) j7 A' [6 Q6 i  vADC regular sequence register 3, A7 X4 D, H! s- s: Z! _5 G
偏移地址:0x345 {/ }0 ~8 O" B1 |0 I
复位值:0x0000 00001 [3 A: p! `- k) ~
5 v5 P1 o8 c* |: k2 [) [& ~5 m
20200911174414882.png
, p1 }6 g2 \+ X/ H" e0 P$ \  f
& }# I: ^2 z% W3 L+ E% Y5 u11.12 ADC 注入序列寄存器 (ADC_JSQR)( `3 {- M9 i& L/ i
ADC injected sequence register
2 Z$ h, Q6 b0 x4 C7 K9 k! k偏移地址:0x383 X8 K1 `4 p6 M4 m  Q
复位值:0x0000 0000
3 r8 e8 `( n9 F; N' j2 ?- X" F& _* B( X2 u
20200911174423509.png
4 e3 G/ O/ [% Y! F7 Z; S
) ~# T3 K1 S  A7 \8 U' N; G; J11.13 ADC 注入数据寄存器 x (ADC_JDRx) (x= 1…4)
: v* C5 C8 ^$ M: Q$ o5 MADC injected data register x( u8 n) ^( K5 c. }. C# w. O& q
偏移地址:0x3C - 0x48
& t! R) c6 d; R& a复位值:0x0000 00000 {( ?+ Q+ Z$ \3 X1 f

* r4 k2 i7 ]3 q, h1 T' ?. T+ V 20200911174429707.png
! y& v7 r( R( `+ ?8 J8 I; n+ j4 e" }6 a* B
11.14 ADC 规则数据寄存器 (ADC_DR)* k4 h* Z5 w8 D5 V& K. y5 W+ D
ADC regular data register+ V$ `9 W/ U. {, g
偏移地址:0x4C
( {2 j4 ^/ y! b7 D8 U6 Q, T复位值:0x0000 0000- r& t  e2 x# e4 C6 U6 t
) j& k3 F1 X! ^7 @" |1 T
20200911174436506.png 3 H& m4 _7 D9 G. h
7 F( \2 @* m' J2 f
11.15 ADC 通用状态寄存器 (ADC_CSR)
! s0 |* a5 m) k/ ]7 HADC Common status register6 {7 n. h- _6 t) A' ]: X
偏移地址:0x00(该偏移地址与 ADC1 基地址 + 0x300 相关)/ p4 Q' w: j+ n) L
复位值:0x0000 00006 ]2 W! L  y+ U  Y0 j- z
该寄存器可提供不同 ADC 的状态位图像。但是,它为只读形式且不允许将不同的状态位清零。必须在对应的 ADC_SR 寄存器中将其写为 0,才能将各个状态位清零。( k6 w/ e0 p1 N  j: F
% s( ]8 v3 I# A! q7 z# h
20200911174444527.png / X( L; E7 n  z7 A+ s
/ M8 }  f7 Q( p- ?/ L1 N0 l8 v- g
11.16 ADC 通用控制寄存器 (ADC_CCR)7 l6 e* x- ^! J; H9 y
ADC common control register3 L- p4 c' B0 L
偏移地址:0x04(该偏移地址与 ADC1 基地址 + 0x300 相关)& V6 x) c% u) m' m! D' V4 h+ y
复位值:0x0000 0000. T) @3 w! s7 v1 ^
; Q: I5 A4 Z0 t0 L. Z: y8 f$ r
20200911174451201.png
+ y# f+ H9 m" @1 g: C
1 e2 q& u% I- b8 f11.17 适用于双重和三重模式的 ADC 通用规则数据寄存器(ADC_CDR), R/ V7 ^- F0 E; l5 L
ADC common regular data register for dual and triple modes1 [7 z* ]) ~6 Q2 }$ t
偏移地址:0x08(该偏移地址与 ADC1 基地址 + 0x300 相关)0 _7 s$ {* X. \, j5 q0 q
复位值:0x0000 0000
1 o9 u: w. w% I: H& M& ^( V, Z4 u6 k) S! [
20200911174458593.png 3 q! I+ ]# n. l; R5 |, X, a
  E* N# n) U/ ?" q/ v

" [# r) z& R. N2 ?+ |8 a; _4 d2 h8 }/ D- r
收藏 评论0 发布时间:2022-3-30 11:00

举报

0个回答

所属标签

相似分享

官网相关资源

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