请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数
( ^9 _0 H/ }0 j7 @9 M8 _! mSTM32H743xx 系列有 3 个 ADC,都可以独立工作,5 [; h& e" A$ @4 s4 D9 v* S* F
其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。* Z3 U% A! e, y# f; O  @% g  B
STM32H743 的 ADC 分辨率高达 16 位,* L0 O8 i6 g* y, J1 M! D
每个 ADC 具有多达 20 个的采集通道,' q! U/ |& n0 f
这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。8 W! U4 ]4 @! x$ f5 ]& u
ADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。  E7 e, B7 k) [# A+ ?' S" A
STM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。
, ~& z: K  ~/ R! t- Z
6 V6 A8 f# o( L/ k) _, Z  v寄存器/ x+ w! \( x% v1 x. l$ b8 W1 D+ ^
1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)! x4 o9 X7 H% R) y
用于设置 ADC 时钟的预分频系数; A5 k# m! X" K& `! w) U
由于 ADC 的输入时钟频率不能大于 36M
. i" _8 \9 V4 F, {/ r1 r; s$ c% W
) a* f, q9 [' @  L5 ?2.ADC 控制寄存器9 t: W4 s" ~7 ?" U. e9 }
BOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,
. a: Y( O; }' U3 O- p; a% @因此该位必须设置为 1。1 C( z  u- c) G: A
ADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线9 {) R. R# K1 {, Z/ W1 D) t$ z
性校准。  Y1 h; C% c/ u) a# d/ l  m1 s
ADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。8 k3 h& B* F8 t9 {$ L
ADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),1 p  P3 d2 R1 b
设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发
: N+ }( b1 U  Y0 h  E时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。
. ?+ I/ V& h7 ]) h5 T1 t3 L$ }ADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校
4 s) M5 m  Z% J4 _" ?8 W7 Y准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即( s8 s* E) p' C; L9 m: L
可判断校准是否完成。
3 A  T/ F& S- i4 E* K$ x' bADC 配置寄存器(ADCx_CFGR)
$ p9 k+ d. o- i% ^2 [" D- e% zRES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。
0 ~4 m* g! k% P- ^3 }. qEXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此
. y0 |8 o9 a, J7 w2 `& e设置 EXTEN[1:0]=00,即禁止外部触发即可。
( J/ X& C1 v, r) k$ M6 }OVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据
( W2 ^1 f1 f6 U) D; f* w未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,/ v! [' r5 j  a- ]
将会被新的结果覆盖。本章,我们设置该位为 1。
, H# w: X9 n9 V4 A1 y$ ~CONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表
1 b( H1 o1 m& f% O5 f- b示连续转换模式。本章,我们设置该位为 0。
, s/ e6 ^3 _/ Q* y( X- m
7 \# p5 b) W! Z: C0 r1.ADC 配置寄存器 2(ADCx_CFGR2)' r* G8 g) B. y# g- }
OSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本
, G9 p. s, r5 K. _5 A- E5 J& k章,我们不使用过采样,设置 OSR[9:0]=0 即可。  t& X, Y2 b, ]1 V& H& g. C$ h
LSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右/ B8 t* r; e4 p! s  D6 A
(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。3 Z6 H# c5 u1 w1 u$ H

  C9 \( L9 b6 Q- y2.ADC 规则序列寄存器 1(ADCx_SQR1); y3 }: \' k- z- N
3.ADC 采样时间寄存器 2
3 n; p% `* }; u
用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议  y) F+ ], x+ Q! Y8 n9 F9 U. j
尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以
# N  z( A( ]( p7 q8 A. x+ l& Y由以下公式计算:
/ _( T( v9 M) a; r  o0 bTcovn=采样时间+7.5 个周期
+ j3 C; Y8 T3 m. [0 B0 h" B其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,1 V6 x- ^0 m! K1 Y% ^; D
当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周
: b, N, u3 p2 b& v5 J期=0.5us。
9 f( y4 C7 T# v. m. m  c2 t9 c1 d1 ]1 _: P1 Y0 F
4.ADC 通道预选寄存器(ADCx_PCSEL)6 S6 m3 }. r( Q. z
该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。% E$ [( o8 o( w! W& b: g
举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC
! f$ B4 i+ N$ W1 ^3 ?* G功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM32  i: f) B. s! D1 M
芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。
5 r& j4 _& l8 w# N) r4 b
4 L. H8 a+ O. q% L  B5.ADC 规则序列数据寄存器(ADCx_DR), R9 n: C  s9 k
规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC
& M' e5 `; l; b1 d/ }/ h9 _7 M转换后的结果,
. R3 v" j* Y& x9 U* U, A5 t* U* O! `8 |( ?$ x2 z+ P& ^
6.ADC 中断与状态寄存器(ADCx_ISR)
5 f! {% L# u; H6 W" X这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD6 {7 t$ K( X, S( M/ w3 j  ^7 A
转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否% ~- v( N- |1 S: K! G
则等待转换完成。
. `# u+ m( v$ \. B! v7 x% V/ L$ W5 {2 S: R* Z
步骤
4 s, V- h1 Y- B1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。; x% a9 T- [+ v! |" j- X  c
2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。5 o0 ^8 a5 Y; [" `5 G" Y
3)开启 AD 转换器。
5 ?' G* B( b: K( \0 L8 K4)配置通道,读取通道 ADC 值。$ ^1 E9 U, E6 v; [/ r$ X) i
5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。
6 b: R/ I) ~% c' ^9 N) q9 i
7 O5 _+ g2 ~2 W- x  @' V5 x视频笔记
; R/ g2 |9 g7 s分辨率: 电压等分,2的多少次方
$ Z4 T1 `: R) D' @虚短虚断[百度]
. o' {( o. M; b2 Z1 Y2分频–就是频率除以2/ z9 P, n7 \5 ]4 ]/ ~
注入通道无法连续转换) u* A8 f6 I: K. ^
单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换
" s/ i6 ?* T$ c2 z- J6 |: Q
8 ]' M3 V7 k+ R/ R, u& I
20200115142135189.png
6 ^8 P; v+ F  L& E

& }3 _0 K$ v9 W( Z9 _EOC中断:转换完成启动中断
5 c1 t& c$ }' c
9 {" i5 @; W" ?1 J) O' f程序编写步骤
, I5 u. o. o1 ]5 q5 K: E$ p& {HALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译
' F/ P$ R0 F) E. k0 N" U/ i7 O
, {( H9 @0 n& C0 Y+ U
% y" R& G# \- j9 d! u$ f: t3 |$ ]3 M( b& ]6 n: a
% R6 `) n( e- P2 F
收藏 评论0 发布时间:2021-12-19 17:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版