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

【经验分享】STM32H7学习继续(STM32H7系列9) ADC

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数+ X: C8 p/ `' I
STM32H743xx 系列有 3 个 ADC,都可以独立工作,! |) O# C1 T, \0 w) W4 @* {
其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。
- b$ n( y& o- |STM32H743 的 ADC 分辨率高达 16 位,$ v$ e# `7 W! n$ \8 W) ?9 i2 Z
每个 ADC 具有多达 20 个的采集通道,5 r" B: C! J! S: L# P! L% G. u9 J
这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。5 q( f$ k/ O3 |8 W
ADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。, r  \5 t" z- S7 Q! u* C
STM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。4 v. D  A1 V% q: _) o8 d0 L. V3 b

- p7 K8 L0 R" o9 r寄存器
+ H1 _9 F2 j4 Y. J  _+ u! l& H1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)% G* J5 W2 G6 V( }: i& e
用于设置 ADC 时钟的预分频系数- e' S5 S: U- t$ M5 R3 w
由于 ADC 的输入时钟频率不能大于 36M7 H8 m: I8 M" g$ ]1 u9 \2 q

4 t- \0 L& `% h. H8 S8 D- f# z6 [2.ADC 控制寄存器
  h( \+ T8 F9 `/ X; [1 y: eBOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,
5 }" P& |7 B% L1 M8 a- T+ X因此该位必须设置为 1。
5 z: e) ?: V/ ^7 o" yADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线
9 t! B" J; T9 |' Y, l性校准。
1 ^3 W9 b1 q$ Q# ?ADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。4 u9 [+ b+ E0 R7 Y3 m2 O
ADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),
% V# ]1 h( C2 z2 f! u+ d设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发
1 E2 A& j" [; M  q5 }时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。
& A- w4 H9 u5 k  v2 K& _+ @3 NADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校* L1 F  ~4 c. Z3 v# D  q$ a
准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即
1 N! i& Y3 ?- m8 ]2 ?可判断校准是否完成。
  [# G' ]( M( F) q' eADC 配置寄存器(ADCx_CFGR)( H( D6 u9 Z( y- m. f
RES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。7 V6 n' g8 P5 H' V3 [( G
EXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此* E- L! W2 A% r2 b9 K5 Z
设置 EXTEN[1:0]=00,即禁止外部触发即可。
: e4 W, c7 X& T6 a: D6 M* WOVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据
& q! W5 G# K& Y6 z8 _8 ]1 O未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,
2 O% o' p* \9 c  r9 P; `! j, l将会被新的结果覆盖。本章,我们设置该位为 1。
# E$ [7 @, Y6 Z4 M8 l: }" ICONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表6 c7 Q* s# K% Q( d8 `
示连续转换模式。本章,我们设置该位为 0。
! k$ F4 E! H9 M8 s/ G8 G! v9 V& G) G) Q/ Z
1.ADC 配置寄存器 2(ADCx_CFGR2)0 w; A% g# i) n
OSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本
: o2 D% O: b$ F章,我们不使用过采样,设置 OSR[9:0]=0 即可。8 V* c& S9 a. U
LSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右8 }8 h2 _9 I, Q
(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。+ b* }/ j# N* h0 D. T  N; x  x
: _6 B- D4 y/ x% M. f- ~( L$ g
2.ADC 规则序列寄存器 1(ADCx_SQR1)
' a) N- Z8 w8 W! Q3.ADC 采样时间寄存器 2

& n2 D) s1 H( r7 Z* [% i) Z* }$ N9 p用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议
& C/ `, _( r  Z7 I( C尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以- P( X! M/ i0 O
由以下公式计算:
4 B  \. J6 T$ S! lTcovn=采样时间+7.5 个周期! r% X# a3 E! J8 O7 k: A/ O
其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,
/ ?! F' R* M8 c9 [7 t4 P当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周% E6 o- I7 Q1 G+ ]6 Y/ q8 J
期=0.5us。% V  i  d- H/ Z- ~$ H1 L' g

# ~1 _3 f% |- V; |! h1 U8 F4.ADC 通道预选寄存器(ADCx_PCSEL)
/ x, Y* A2 e1 l9 n/ }, K该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。
  w" m4 [6 t* Q举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC4 e7 x! ]- W# E- R6 W" c
功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM32
1 Z+ a; O2 j% x1 |$ v" e9 P- p, H* ^% [芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。
  W! A. H% m% R4 A/ @; `5 r& w3 ~& G9 i  r) [6 u
5.ADC 规则序列数据寄存器(ADCx_DR)
2 j$ J5 A# l$ }7 t/ b; _- F规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC7 I' O, Z% d) Y. t
转换后的结果,& l+ s3 L0 Q, D1 o* x( Q

* d* u* l. \3 s! V1 J- q6.ADC 中断与状态寄存器(ADCx_ISR)
! o: D/ `1 o- Y+ _这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD
* f' c$ c5 V7 S转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否
4 i) O+ ]/ R  C' {7 _5 `, h则等待转换完成。9 `5 f6 {: u2 O: n& z* t1 D
8 R7 O  t4 q3 m/ K/ W  q5 ]
步骤2 P% t/ I" n* z% s( ?7 X( ^1 |
1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。% y+ k5 A/ M+ V; E7 A, \
2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。
3 B' a; h8 ~& X3 G$ t% u3)开启 AD 转换器。" @& w$ S0 ~2 r
4)配置通道,读取通道 ADC 值。/ l. G; k2 k$ ~5 W7 D3 K% V
5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。
+ B# e( a) d: w" m7 ?( [5 q* A5 `
- e  H, s4 l& }$ @, J5 P  j视频笔记
1 |+ _+ B" n* N分辨率: 电压等分,2的多少次方; d, U, U. H% j6 F* z, L
虚短虚断[百度]6 ^3 W% \6 w' B0 V; D
2分频–就是频率除以2! D: c+ \  b) |* u, U7 i* T4 r
注入通道无法连续转换/ P; N, g. @- d2 ~- |, G
单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换
, n8 E  A5 s5 R5 m( W2 D0 a* Q& c+ ?
5 G* t; ?& E7 B2 ?+ e# X* v& t, g
20200115142135189.png

3 h6 G( x5 d3 p! a& o, w3 G- e& ?1 L: U- U8 _$ `0 `! f: I+ @1 j/ W2 x
EOC中断:转换完成启动中断
' m+ N; n' t' m! V+ `5 l/ g. s  b4 ^& w. A# }
程序编写步骤& s' T! {3 w6 W% u3 |
HALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译: g9 K( S" C. `& X. }* F
  t/ L# q- P, C4 H9 b# D1 ~

2 x9 E1 S+ a! c; o* n8 A9 D( c3 s, p2 T, }
) _, G( J/ `) S
收藏 评论0 发布时间:2021-12-19 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

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