|
01. ADC简介 12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 V BAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。 - A: Y3 ?6 S6 c$ F2 _2 D
02. ADC主要特性' M, m+ Y& o5 C% ]- F- x% _
● 可配置 12 位、10 位、8 位或 6 位分辨率
+ ^: d1 K' B" Q* y+ i/ J/ r/ l& x' ^● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断
0 @8 c) N [, C, `● 单次和连续转换模式
# M. k( G# k, G+ ^* V6 S! C● 用于自动将通道 0 转换为通道“n”的扫描模式
) N4 X% |3 a* Y) K" A# Y● 数据对齐以保持内置数据一致性
4 }% K: z4 I8 y● 可独立设置各通道采样时间
& ~2 z; A- `; i- Z0 d6 Y) ]2 p● 外部触发器选项,可为规则转换和注入转换配置极性
; D- x, j! c$ x2 p7 X' e● 不连续采样模式: s' W# Q4 p r$ H' V
● 双重/三重模式(具有 2 个或更多 ADC 的器件提供)
' d, `% @) g$ B, t$ o& K● 双重/三重 ADC 模式下可配置的 DMA 数据存储+ M# k7 o; L* z- g) J
● 双重/三重交替模式下可配置的转换间延迟% k$ |0 j; S) p
● ADC 转换类型(参见数据手册)
% ~# D1 I) t8 Z1 Y* f● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V: B1 L& z9 b+ V3 k
● ADC 输入范围:V REF— V IN V REF+- ^0 A" o; ~% }& b& i1 E$ U
● 规则通道转换期间可产生 DMA 请求 注意: V REF— 如果可用(取决于封装),则必须将其连接到 V SSA 。
+ K0 k# i) B' |. y8 K" b 03. ADC功能说明框图0 T! o% c- P# r! U: c4 Y) A. p2 k
/ s- g* n" B( @8 Z' [
1 j5 k; W" d1 [ Z+ ^8 g' ~. \# a) ?, y% U$ I. } u
7 m. G6 E) D- F1 I
5 m, x( c, ^3 M4 ?. x2 }" J! A+ T5 `# [ t: E
04. ADC开关控制
0 z1 r) A' i1 `3 {. U3 {, H7 e) Y2 P3 w4 S6 F! w% D
可通过将 ADC_CR2 寄存器中的 ADON 位置 1 来为 ADC 供电。首次将 ADON 位置 1 时,会将 ADC 从掉电模式中唤醒。 SWSTART 或 JSWSTART 位置 1 时,启动 AD 转换。 可通过将 ADON 位清零来停止转换并使 ADC 进入掉电模式。在此模式下,ADC 几乎不耗电(只有几 μA)
6 ?& E% o6 x( K v- c; r" {( H
2 K% U$ n, M, h5 Y1 @6 V5 g
05. ADC时钟( ]3 R1 P& u, [% U0 u' k& I& M, i
5 q7 b# O& B( C$ S' |( S
ADC 具有两个时钟方案:
+ q! L" R9 c* p/ F+ C9 M4 W' U5 r● 用于模拟电路的时钟:ADCCLK,所有 ADC 共用
- V! y7 c% ?8 m D: o5 E7 H! B此时钟来自于经可编程预分频器分频的 APB2 时钟,该预分频器允许 ADC 在 f PCLK2 /2、/4、/6 或 /8 下工作。有关 ADCCLK 的最大值,请参见数据手册。/ Y) `1 Y( W0 B
● 用于数字接口的时钟(用于寄存器读/写访问)
7 G" A' X5 W( x5 e$ @7 h此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能寄存器 (RCC_APB2ENR)分别为每个 ADC 使能/禁止数字接口时钟。
$ m& \% A5 ]) Q5 u& H u
0 A1 G- |, t6 E 06. 通道选择
- J0 H- Y: S! V2 h8 `有 16 条复用通道。可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。 ● 一个 规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。
( G' B4 C4 B; `0 w2 }● 一个 注入转换组最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位 如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向 ADC 发送一个新的启动脉冲,以转换新选择的组。 温度传感器、V REFINT 和 V BAT 内部通道 ● 对于 STM32F40x 和 STM32F41x 器件,温度传感器内部连接到通道 ADC1_IN16。内部参考电压 VREFINT 连接到 ADC1_IN17。# S' V; |0 I C1 n, D& m0 N
● 对于 STM23F42x 和 STM32F43x 器件,温度传感器内部连接到与 VBAT 共用的通道ADC1_IN18。一次只能选择一个转换(温度传感器或 VBAT)。同时设置了温度传感器和 VBAT 转换时,将只进行 VBAT 转换。 内部参考电压 VREFINT 连接到 ADC1_IN17。
0 b8 `/ r2 v6 l+ QV BAT 通道连接到通道 ADC1_IN18。该通道也可转换为注入通道或规则通道。1 e0 w, D6 x; d& y& d5 I
注意: 温度传感器、 V REFINT 和 V BAT 通道只在主 ADC1 外设上可用。 0 L; ?; ^& O9 m: g* D
" O) T* [# r ?( [& c6 d1 t/ U 07. 转换模式
; r/ Q8 A3 j4 ^" Y* H$ n' Q3 F' X) w5 v
! o4 m# U6 ?# V* d8 l单次转换模式 在单次转换模式下,ADC 执行一次转换。CONT 位为 0 时,可通过以下方式启动此模式:( D* b) k+ K8 H3 U) _
● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道); r0 u& |! T+ `% W2 \
● 将 JSWSTART 位置 1(适用于注入通道)
. k( _2 a- [* i2 k● 外部触发(适用于规则通道或注入通道) 完成所选通道的转换之后:
% D5 J+ m& |% l5 b: E* H* ]3 _● 如果转换了规则通道:: M5 a+ u4 g5 u
— 转换数据存储在 16 位 ADC_DR 寄存器中0 u0 F0 i) t, q) O3 C2 D5 q/ x
— EOC(转换结束)标志置 1# {( g, Z* ?+ q3 ]4 e5 X+ D
— EOCIE 位置 1 时将产生中断
6 ]7 H& ]; r# a# k- U; s● 如果转换了注入通道:4 Y! r* z, r" E, K4 c/ D
— 转换数据存储在 16 位 ADC_JDR1 寄存器中
- T$ i3 v" R; h! s8 G( Q— JEOC(注入转换结束)标志置 14 \- J$ ^. j* `( N
— JEOCIE 位置 1 时将产生中断
7 n9 }1 q; v- g. W然后,ADC 停止。 连续转换模式 在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换。CONT 位为 1 时,可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位置 1 来启动此模式(仅适用于规则通道)。 每次转换之后:3 A' D+ _8 V* N
● 如果转换了规则通道组:
) \* m2 R" z3 P0 w6 P# U5 F— 上次转换的数据存储在 16 位 ADC_DR 寄存器中
; M/ g" o# p1 q— EOC(转换结束)标志置 1
0 p) v: y& a9 r3 h— EOCIE 位置 1 时将产生中断 温馨提示 无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用 JAUTO 位),请参见自动注入一节 # t- d6 \! ^1 X, l3 \% u$ r, H3 C) e
" l2 H; |3 q# j5 `
08. 时序图
0 L% ?( v ^" H6 L8 g8 p v% o9 i4 w4 c f+ M$ O! J6 J3 v
6 M" L' u- z( I& y0 e. j$ l
4 ~+ H+ `$ h: [7 o
09. 扫描模式
* B, h6 I% L$ J. l9 f: ]1 W7 Q
0 r0 E% u0 q: z# P) c K. |此模式用于扫描一组模拟通道。
: o, I( ?2 d2 G: Q1 ]6 m7 _通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。将此位置 1 后,ADC 会扫描在 ADC_SQRx 寄存器(对于规则通道)或 ADC_JSQR 寄存器(对于注入通道)中选择的所有通道。为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。 如果将 DMA 位置 1,则在每次规则通道转换之后,均使用直接存储器访问 (DMA) 控制器将转换自规则通道组的数据(存储在 ADC_DR 寄存器中)传输到 SRAM。 在以下情况下,ADC_SR 寄存器中的 EOC 位置 1:
) f. D! _, T( e9 w; H● 如果 EOCS 位清零,在每个规则组序列转换结束时
1 }2 ]: l% t$ v$ x% B% V● 如果 EOCS 位置 1,在每个规则通道转换结束时
" ]# S+ ?( F& L9 X J* Q4 \9 R从注入通道转换的数据始终存储在 ADC_JDRx 寄存器中。 " I) X1 a! T' }, ^" r
4 E& _0 W0 J2 L4 M! J: g. D6 E 10. 数据对齐
4 L$ ]% \+ E) C* ]& E, D' K2 g1 t8 E7 l* u1 P& J
ADC_CR2 寄存器中的 ALIGN 位用于选择转换后存储的数据的对齐方式。可选择左对齐和右对齐两种方式,如 图 38 和 图 39 所示 注入通道组的转换数据将减去 ADC_JOFRx 寄存器中写入的用户自定义偏移量,因此结果可以是一个负值。SEXT 位表示扩展的符号值。 对于规则组中的通道,不会减去任何偏移量,因此只有十二个位有效。
9 K9 b# ~( H( s. F
# [4 q+ [& K0 ]
: K8 n: b8 e% j' [8 n3 F0 m' M+ D$ H5 E. W9 C- k
11. 寄存器11.1ADC 状态寄存器 (ADC_SR)" `: L* R# e5 v7 j+ x
. i+ Z8 e# }% C7 b' g) W
ADC status register
0 O' B- B8 m0 F' r偏移地址:0x003 K3 }; i; c8 {0 A/ z
复位值:0x0000 0000, m8 h/ H! Y5 Y
3 g* N0 t5 g$ D6 d$ K: C1 }! K9 W9 C% F5 `: M2 @
# v( u3 t5 o4 _/ C" c- l
11.2 ADC 控制寄存器 1 (ADC_CR1)
6 Q. j9 Z/ C. t5 b; mADC control register 1, y" \8 ]" d6 ?1 y4 `
偏移地址:0x04
1 g, j- J5 H4 s$ _2 }复位值:0x0000 0000& _0 o* h% j7 {9 L2 {6 W
( I- _. ^: W5 K
1 \5 s0 n9 Z- g7 q
! A- j* Z( e0 _1 @5 N
11.3 ADC 控制寄存器 2 (ADC_CR2). w/ p9 v+ f M$ {) c/ |
ADC control register 2
+ \* H' s5 A9 q! K+ u+ w7 J偏移地址:0x088 _: Z8 S: R9 F G3 ^4 O
复位值:0x0000 0000
5 X) S- T- }( @/ I# v
! d5 y1 {8 `8 W/ ?7 ?3 s, ^ 
$ J9 k$ G2 W2 V: o; \
1 B9 h. W( A, ]+ `; a/ U2 Q* k6 c. }& e4 Z; A
% h+ \7 G4 I' A2 \! V, c 11.4 ADC 采样时间寄存器 1 (ADC_SMPR1)- A+ j1 _3 y8 {$ G
; [" R, P" [# \; t1 X" DADC sample time register 1( V2 z- w! B6 P0 @% B
偏移地址:0x0C
1 l. t. s8 C& R# Y复位值:0x0000 0000
: e: f3 u1 W) i% U2 i! P5 H& H
0 l* |: _$ Y' H1 r/ k! }0 U: L+ ]6 [/ p% ~3 }% @, w) f- W, _
/ P8 ?) q& z& u6 z2 M7 t
11.5 ADC 采样时间寄存器 2 (ADC_SMPR2)
* A1 y7 Y. g9 }; z) n6 j) F- Q" D! ~7 m0 }5 ~& A5 s
ADC sample time register 2% S8 w% R! }& o- Z- B# l
偏移地址:0x10
6 b _" M n% u6 r5 h! M4 h复位值:0x0000 0000
! n0 y- Y% o' h4 T7 l# w9 @. n
& a! P8 u/ L: V
% U0 w/ ]0 c: n$ r' y
6 V8 P4 C1 ~+ [' L" L; ?. [7 S- i8 R 11.6 ADC 注入通道数据偏移寄存器 X (ADC_JOFRx)(x=1…4)- j) h; S' L! r) X
) |* J- B2 H8 ^4 H O5 q, B# ^% FADC injected channel data offset register x
p7 F/ ~) p! X偏移地址:0x14-0x20: v. W( k) Q) d5 s' U. w' q* f
复位值:0x0000 0000
1 x- G/ x4 Z7 {1 Y* V
( s$ F$ M% b8 ?9 M5 o6 e. K+ E% n$ H9 P7 {, z8 s& l
11.7 ADC 看门狗高阈值寄存器 (ADC_HTR)
9 ]4 Y& o% k1 V0 I) U& F: [ADC watchdog higher threshold register
$ F" P1 b7 R) `; ]/ L4 q: c" w偏移地址:0x24# e: f+ X4 }! v6 Q
复位值:0x0000 0FFF
- }+ ~6 l+ g" f3 Q* k6 O# | M' t* M, B; M! q
- V. C% o0 h% I+ [0 T+ {( h8 y 11.8 ADC 看门狗低阈值寄存器 (ADC_LTR)
- L% l2 Q0 W; ^2 A# H: XADC watchdog lower threshold register
- }9 c ]$ I" I7 _- \# h+ e$ c4 w偏移地址:0x28
& ]5 @' V8 C$ n+ s- `' G) n; ]复位值:0x0000 0000
1 a; G, Y% F9 U4 M1 b8 C3 h2 w
7 |( }! U x2 D) B# B$ Q1 G8 u3 \% F7 `
11.9 ADC 规则序列寄存器 1 (ADC_SQR1)4 v2 I" X: U5 R5 t$ q5 A7 d3 h
ADC regular sequence register 1
7 k. a! T8 T. o8 N6 B U偏移地址:0x2C
; S5 d1 S6 }. G( E$ m% \复位值:0x0000 0000
; V v9 b- y$ X/ ^* h. \
z Q' H! O$ `* Q$ n: g D7 H: Y1 C& ]0 `
) t1 _2 y9 h$ [/ F0 g- s4 y( Z2 V2 f7 i) j1 `. w1 q
11.10 ADC 规则序列寄存器 2 (ADC_SQR2)4 x( k4 `+ ]. l4 Z- T; l+ E
4 b+ x9 W! N4 d" y2 vADC regular sequence register 2$ {) S1 W, g! M' ?, [ w) R, k
偏移地址:0x307 R( P0 _( c8 W& M; K
复位值:0x0000 0000
. P' X1 C1 ?6 e
# U1 Q0 s+ y% a7 U$ r/ `4 E7 j p5 v0 M& y# C& B; c# q5 C8 e/ o
, O, E h. L& H) d% F6 A. I. A! E
11.11 ADC 规则序列寄存器 3 (ADC_SQR3)7 J$ n! R! o3 B9 R: c
ADC regular sequence register 3
4 _& `" i/ H5 K) W, T偏移地址:0x34; S6 H) p# W& G: }- ?+ k
复位值:0x0000 0000
$ d/ q& _ c- Z& z9 w2 _% D+ C) h- w% l) f% y( ]/ m
( D/ f+ n$ j8 O1 x 11.12 ADC 注入序列寄存器 (ADC_JSQR) I3 z; K# l5 K
ADC injected sequence register$ Q x# W( ^& X, p2 @
偏移地址:0x38
% F! e; ]4 u! a5 S. e! }1 o复位值:0x0000 0000 6 p; p* \+ R' j6 i# Q! T7 N- Z
; J4 {! h: c" K" G$ }$ F) k
7 w) x% H |6 Q G2 x
11.13 ADC 注入数据寄存器 x (ADC_JDRx) (x= 1…4)# d. h4 H& X1 m
ADC injected data register x
' r' f2 b' H9 Q1 L8 B; j偏移地址:0x3C - 0x487 Z! _- y! [1 ~1 p4 `5 i2 f
复位值:0x0000 0000 8 g( w6 `. _/ J, Q" v
3 M0 E( s Z N- l6 h$ X, a, J0 M/ O6 f9 A! E6 U
11.14 ADC 规则数据寄存器 (ADC_DR)+ y- m7 p% ^& s9 v! h' u5 {
ADC regular data register9 A* W( r1 N. k% P$ [* n
偏移地址:0x4C: Q# x: r! |) F
复位值:0x0000 0000
- A; ^- c# m! i
6 p. i, g' E; ?, C( H+ L+ x' c5 h) h2 L" O$ F* D# z9 [2 h; P0 Z6 G
11.15 ADC 通用状态寄存器 (ADC_CSR)7 f: D9 V# Z$ X9 K
ADC Common status register
3 o: x; r5 @2 b3 X" O偏移地址:0x00(该偏移地址与 ADC1 基地址 + 0x300 相关)
0 ~0 t" F# w% r2 S复位值:0x0000 0000
# _9 A0 N1 s& s该寄存器可提供不同 ADC 的状态位图像。但是,它为只读形式且不允许将不同的状态位清零。必须在对应的 ADC_SR 寄存器中将其写为 0,才能将各个状态位清零。
* C2 P# F4 B; T3 `' @2 c' _
9 I& L( s+ `% h7 f
1 D5 O# M- R; h4 l( | 11.16 ADC 通用控制寄存器 (ADC_CCR)( F2 ^' T- T/ }7 ^3 }# G
9 T* r7 T* b; d- V' E- ?* S, _) G
ADC common control register
) M- E$ H8 f5 O( Q5 \0 Y偏移地址:0x04(该偏移地址与 ADC1 基地址 + 0x300 相关)' Y+ f& x$ m8 D: H
复位值:0x0000 0000 & O! v# b! L2 R n0 I U
$ u( [; H& a. q% E
( P$ U: q) w q2 l1 A, O
: y8 d. h' N7 D! K 11.17 适用于双重和三重模式的 ADC 通用规则数据寄存器(ADC_CDR)
% X8 h. R% X6 V4 ?1 _ADC common regular data register for dual and triple modes
6 L8 }6 \8 d ?' g2 K# s8 ?偏移地址:0x08(该偏移地址与 ADC1 基地址 + 0x300 相关)0 m3 o0 t& H$ p1 @
复位值:0x0000 0000 - o% y. g Q% R, o, n$ ~; g1 R9 L
( [/ z, r! ` m1 m! E" C
3 y6 Z+ Y$ y9 `
( v b) i" j: l; A% D6 P |