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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数, z* w- f  o8 |9 P7 h4 p& v
STM32H743xx 系列有 3 个 ADC,都可以独立工作,- T+ T3 P8 w  A
其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。
& B  J+ U* c3 H  I# c) ASTM32H743 的 ADC 分辨率高达 16 位,
, k$ {% a% m! n3 z4 A6 t' B9 v每个 ADC 具有多达 20 个的采集通道,
/ y! g4 r: u9 z  l8 ?( J% N这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。
5 c4 B* C: I; B1 y: [6 W* N; LADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。3 T' x" h% ^  e0 q) O* A9 e5 {1 h
STM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。# h. w& g" V; c# ?; j5 J: g
% y. h) W% E* M9 f
寄存器3 p0 x! N9 S  o9 [  g- c
1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)
  s+ T* g  l6 \- J$ i* F用于设置 ADC 时钟的预分频系数
! X: X( @+ E* o  S' v由于 ADC 的输入时钟频率不能大于 36M7 j# m& [/ z' J, {& n! \6 d
* S! m5 m8 H) h* H8 i
2.ADC 控制寄存器; p" M! K$ c9 ]9 q: V6 `& Z
BOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,: p# w9 e$ q( c/ L! _$ i' f% g+ s
因此该位必须设置为 1。: }2 R  l3 m7 I; `' O
ADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线1 V+ X+ v3 [2 G( J9 c2 @3 z
性校准。4 [3 O: h. x4 }+ J. a, }
ADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。! D1 K3 K: }/ Y( R" Q8 Z
ADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),
9 R% @( ^# m& f: i设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发
  R  ?- ~0 T* M+ y- S时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。
1 J* k4 R5 d0 i% RADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校
% _3 R5 h3 Z; k5 A2 }准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即) ]/ j3 r( z, [% ~3 g$ b9 e8 C, o
可判断校准是否完成。$ f( w/ Z5 p& D6 ?9 r! [. p
ADC 配置寄存器(ADCx_CFGR)# o8 D3 C: J' n& \5 v- }
RES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。8 o+ L% P6 O$ F4 D  Z
EXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此
! A  u9 Q1 p3 C设置 EXTEN[1:0]=00,即禁止外部触发即可。8 i4 x+ v8 |) L& D
OVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据' g. j% F7 c6 `3 `; g
未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,! h- y+ |- G1 j; |  F
将会被新的结果覆盖。本章,我们设置该位为 1。5 }2 W" S$ ~( Z0 Y
CONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表$ A: I1 f; I/ \/ q1 _  ?
示连续转换模式。本章,我们设置该位为 0。
& @/ ^* l8 ^$ X! H: ]7 v  M7 k* w6 \: j
1.ADC 配置寄存器 2(ADCx_CFGR2)2 c# H2 R  c. U( D. n1 Y, c
OSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本: i+ a$ I" h5 s8 W0 E* G. d1 U! {% x
章,我们不使用过采样,设置 OSR[9:0]=0 即可。
* m  r! m% M$ C. NLSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右- M2 L) a& i4 e1 q% h% |6 i
(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。
# U9 ^& \% u- h9 }
, a# \8 x# D0 i1 W! [# h2.ADC 规则序列寄存器 1(ADCx_SQR1)0 i: I+ z! a- G" _* H; O. @
3.ADC 采样时间寄存器 2

: w' t: @1 U, ^  ~. z用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议
! _3 ~  [5 i- L- y% `尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以
2 y3 K9 }9 `! f5 U由以下公式计算:/ F7 y* C) E$ D% U& O5 Q3 l
Tcovn=采样时间+7.5 个周期
* ~. _' e) ~! s5 z; k其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,
8 V5 f0 v5 h* a: S# H, L当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周, R# y2 B. T: [7 a* }* q- q5 K
期=0.5us。
2 ~! U7 E2 e& }% D8 |+ H7 o, ~/ b8 t, ~8 [6 `8 _
4.ADC 通道预选寄存器(ADCx_PCSEL)
4 ]" @; M' L+ Y. t该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。' M" G! O3 G7 J2 h0 P9 U
举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC9 i  R; }" a6 W
功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM320 s6 s* L& i7 F  s; k6 `; r! n
芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。. v: \. `: |, i) s% B8 O
; X1 d; p8 H3 m
5.ADC 规则序列数据寄存器(ADCx_DR): |. h" e" ?! f, r( N; T+ P, b& V
规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC
( a% ~1 X# G: C转换后的结果," |7 i3 g( {( x' f  ]/ }, n' @7 B

1 m0 z/ l/ V" t/ X* B6.ADC 中断与状态寄存器(ADCx_ISR)  R+ w8 t! w3 f+ V3 j) z( h
这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD
) J$ K! `8 x: q) \% W# ?转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否: A9 n: U, R' ^) V0 N
则等待转换完成。& K! P7 ]8 V1 F/ H7 \
' A9 \7 `3 A( O2 t! k
步骤
" C% j% d. U& n! E6 _5 t2 p# {: e: B0 `1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。
8 n& i1 W3 f! X: t; m' V2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。% \$ o8 B3 R' a$ h6 e1 s7 p
3)开启 AD 转换器。1 Q( a- ~) E0 A8 Y4 [
4)配置通道,读取通道 ADC 值。
7 T, h1 F' n& W& Z$ |2 Z7 y- I5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。
" C6 A) f! X8 a6 m& e  M& k8 Z+ h8 w, a. ^* g4 q
视频笔记
7 l2 Q. Q5 U. ^8 b7 M' T3 j( G6 f分辨率: 电压等分,2的多少次方- }; W8 B  l2 H
虚短虚断[百度]" K' H3 N9 p! t; B5 K
2分频–就是频率除以2, c/ a+ `2 }' J# y! m/ ]" o+ G/ C
注入通道无法连续转换/ {. s/ N5 U: m; i2 f# u
单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换
0 z) O  X' r5 h5 ], K. I. V
0 y& l2 w1 v( S8 u
20200115142135189.png

' J' V, w/ e) y6 e- l
  q9 N% V5 c9 ?6 C; Z, wEOC中断:转换完成启动中断5 Y8 w% v3 m4 o2 m, {! R
0 N, V! h  A/ C$ _' e) x
程序编写步骤
& J4 K4 R- x" d3 M; LHALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译$ ^( M2 s2 B& f, A% x

  H4 H( G( O/ x( e1 j! l; O$ r. V, N9 @5 F" L
# S1 Y. E8 U4 I3 y
9 f9 u$ i$ {/ Z$ O: {* E( ~% l
收藏 评论0 发布时间:2021-12-19 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

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