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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数4 P. i* C' F& ~/ @) q; ~+ @
STM32H743xx 系列有 3 个 ADC,都可以独立工作,
  h( Q8 Y- A  E2 M2 g& v其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。
6 y6 c. e9 s, P' ]/ W( aSTM32H743 的 ADC 分辨率高达 16 位,& m- T: t% F* c" Y" B) ~" I& c9 \
每个 ADC 具有多达 20 个的采集通道," b, `5 I. U# `: M$ D$ U! W
这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。' T) Z# l2 U0 R/ C. P1 t/ q, q
ADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。
. R' q: g' [) L+ F+ P8 ?% }STM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。: T1 o2 L; F( Z* ]7 I+ Y
9 @1 h& f2 t' b6 r
寄存器7 R/ P7 j& m' B
1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)+ p3 u9 L) Q3 {. M! w
用于设置 ADC 时钟的预分频系数
% r3 T! p+ g3 U: N' P# y6 X" n+ x5 `由于 ADC 的输入时钟频率不能大于 36M
/ x# h7 V+ E- u8 A& g# \( W& f7 d, o5 J) F
2.ADC 控制寄存器
4 ~" t# U% Y7 H3 n# `4 hBOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,
4 U: a9 F. {5 u5 M5 n因此该位必须设置为 1。$ Y/ {7 t! J) |2 O4 Z( P
ADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线! |- v8 \/ A/ S5 F, u
性校准。
$ P9 u) c0 L' F0 cADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。
7 U& U( P) ~& A- U: q- zADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),
. z, v: p( ]/ h/ u. ~设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发
; X  `% D* L' P9 u% i: U- z! W1 F6 r时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。4 {) {0 _" m4 Q, X% p3 N
ADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校- t' u+ M" e, G* l% q% w  t
准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即" Q' ~; y) Y/ P( ]2 y( u% @! z
可判断校准是否完成。
( K8 i3 o3 g+ m6 Q3 [( E, v4 C3 hADC 配置寄存器(ADCx_CFGR)
- `. P4 d) r1 xRES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。
) C: ^/ B0 O* c( q3 Y2 N6 N& W( SEXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此& S; J4 i) q) s  F- k5 J1 ?
设置 EXTEN[1:0]=00,即禁止外部触发即可。
" ]. A4 Z6 [+ S1 d6 e% R  ZOVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据
" a6 C: h& h# d6 f% v未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,$ q# |% Z3 V: _# n
将会被新的结果覆盖。本章,我们设置该位为 1。
: d- `: B8 \" n& WCONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表2 ^8 s& _. [1 V. Q
示连续转换模式。本章,我们设置该位为 0。: q9 S( _7 Q# Y3 A

+ Z4 y2 }& h; k( Z# m- S1.ADC 配置寄存器 2(ADCx_CFGR2); A+ p* w: I' ^% i$ m0 j3 a
OSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本
0 j! [2 z6 B  a0 o; Q1 K章,我们不使用过采样,设置 OSR[9:0]=0 即可。
5 R9 [+ k* |  a+ a9 d1 u- U0 }1 qLSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右$ @' [. [! y# W
(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。! T8 v% g. K7 Y. Y) O" u' y* M

! V/ M, c- V" U" l0 Q2.ADC 规则序列寄存器 1(ADCx_SQR1)4 y/ g9 p8 B" V+ ^$ n6 l$ E: _
3.ADC 采样时间寄存器 2

9 s/ V& Q- {- a用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议
5 K- t" S% h! _/ ]% W尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以" E# j* |0 X1 F
由以下公式计算:
- D& e6 N4 @0 ^8 T6 lTcovn=采样时间+7.5 个周期# B. a" k+ z* }- c6 c" g4 l, v
其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,
% W: K6 I1 s+ ^2 N( F当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周0 Q7 o3 n; o. d& B$ S
期=0.5us。
1 n5 n# |* i$ K, I
: b2 y* a, j2 ?  a7 o2 @4.ADC 通道预选寄存器(ADCx_PCSEL)) @: D2 n* f6 y# {  K5 q8 v
该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。
; L6 d+ J" w! P, S- `举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC
* g3 Z* r" O- l3 |8 j( ~功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM32
6 D# q1 B7 }. W) G! F- S芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。. J% ?) I3 X* R! l  F7 J

- Z6 r6 Z: I, k6 h3 |1 _0 `. a5.ADC 规则序列数据寄存器(ADCx_DR)
% c4 M+ J$ P4 m& W% u规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC
9 r5 m7 w0 q1 V5 g1 Q5 X转换后的结果,6 L, {9 b/ y& j0 W" [2 h
* J: w% q  \# _5 W7 q) H
6.ADC 中断与状态寄存器(ADCx_ISR)# b  C/ ]3 d$ u
这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD2 F6 o7 z" n$ k% f; N0 C" W. l
转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否7 j& Q7 Y, R" ]( ]0 r
则等待转换完成。, X2 h: j; R! o- H- Y
; ~4 L2 [& y% i  d
步骤
0 _6 A  y0 F  n% h8 u/ Z3 E1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。
2 }# H6 _  j1 o0 |$ i  w; @2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。
  S3 {: o2 X9 J/ P3)开启 AD 转换器。
9 {6 q7 O7 k6 ~6 I0 Y9 ]. N# h4)配置通道,读取通道 ADC 值。2 @+ F" u& c( E( w+ p
5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。; z7 ^- Y: G# }

3 F* Y  o6 O1 c视频笔记
5 Z: b, h% t. V分辨率: 电压等分,2的多少次方* Y$ Q! W# y. j, A# T
虚短虚断[百度]
! G4 Q: v) r, ^  }) V2分频–就是频率除以2' c( F8 ]$ |9 I+ m9 H
注入通道无法连续转换
6 w+ R2 N: r; P4 U单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换, ]" e3 _3 I7 {+ L

' D. n- K) e+ u% }9 L# i
20200115142135189.png

4 J: ~4 n; K5 V* j4 h$ z( a) y! Z
* I, s6 b9 S; r, V+ L# H: Z4 b) LEOC中断:转换完成启动中断- J/ O' d7 h% n1 X( ?& L! v! A& O
( ~+ e$ ~9 r) {
程序编写步骤6 @3 r; g" v. u: _0 G3 N
HALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译) ~; }  L% I( s6 |% ~9 Y
2 W2 Q6 |! r" a) m+ J6 _9 _* y. k; H

: y# M' f' e8 V& t( @
7 {- u' c/ z. _+ g& m1 ^0 U9 c/ f1 S  L  K  ?8 j
收藏 评论0 发布时间:2021-12-19 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

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