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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数: A2 h/ ^# o4 v- B2 I
STM32H743xx 系列有 3 个 ADC,都可以独立工作,& H+ Z+ a" O( ^: h/ S
其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。
5 ], I! [7 O2 z  ZSTM32H743 的 ADC 分辨率高达 16 位,) Z: ]3 R0 D5 x6 l. h* `$ ?
每个 ADC 具有多达 20 个的采集通道,% p8 B4 T; q/ N: Y5 K) u8 b
这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。$ I8 t3 j' R5 E7 t# \5 g
ADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。( v( N: f8 ]: M1 D/ N2 @- O4 a9 L
STM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。) o: z, V7 N2 L# u& q9 m) t- V
" E" s! w: h% E- s1 ~5 B* J
寄存器
/ R3 U% T. ]$ \* c2 B) i- I1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)0 ]* G5 J+ |+ z7 M  m3 @& Y5 T
用于设置 ADC 时钟的预分频系数- ?! D2 |3 p# O5 Y4 G- q& v- R
由于 ADC 的输入时钟频率不能大于 36M
6 U3 P/ T, A, z: B9 @# V/ W' L, G! u
2.ADC 控制寄存器3 g1 ]: k5 H* J1 E. P5 O
BOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,
. i4 J6 {8 {4 S- y/ w, ]3 o+ Z& J因此该位必须设置为 1。
+ c, W3 C2 C! nADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线' v2 j# S  A& P, S
性校准。
% C! x  ]! b, P. BADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。
- g2 C# w) a6 V6 [( z2 vADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),: [$ S' D# H# `, K4 ^9 a
设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发
; b( _* }8 B! Z, ?0 ^. P3 t时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。
  h$ ^+ H* H  m2 `ADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校
) E- c: J. i2 s% V1 g$ B准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即
4 |/ I( Y: ]$ w! Y可判断校准是否完成。
! _: m$ P( S: o5 @& g: s9 `! A! ]ADC 配置寄存器(ADCx_CFGR)
1 t7 c1 r4 Y$ O% S8 ^8 kRES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。5 c. ^, G+ `7 [+ l5 a8 o
EXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此
4 g! P) O3 t( p& i6 B) K: j7 ?( w设置 EXTEN[1:0]=00,即禁止外部触发即可。
! j5 j) i+ K+ y; fOVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据, ?6 r3 g4 E3 y, T* p
未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,
. f) P3 J2 T. n6 g  u$ L2 ^# o& X将会被新的结果覆盖。本章,我们设置该位为 1。
! [5 H+ z( R% eCONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表
! X+ q( C: b7 m1 u: q' H3 i9 a* F示连续转换模式。本章,我们设置该位为 0。
3 t: d% I5 C1 h( L. h
, }2 _. @3 k0 J1.ADC 配置寄存器 2(ADCx_CFGR2)1 Y. f8 N) e! T' J/ }/ P" y
OSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本; W7 ^& z! _" Z7 O% d  F; z
章,我们不使用过采样,设置 OSR[9:0]=0 即可。
! T/ A# P; B- A; U- ALSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右
8 B, J0 _, z: X3 m9 Z% _! ~(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。: \6 ~, [* {% G7 {$ [
5 ~* b' g# S5 q, g2 _6 _: M
2.ADC 规则序列寄存器 1(ADCx_SQR1), R, r4 ^4 C: |6 V1 W
3.ADC 采样时间寄存器 2

9 h7 b. t- |$ _5 ~! {6 b用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议
+ T* H( B1 {! T尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以" g- v( u$ t; J0 `
由以下公式计算:. {) U0 C. E! ^" u/ d* U3 u
Tcovn=采样时间+7.5 个周期3 Y1 [, w) j# M3 E
其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,
# s0 E8 X0 `$ s5 R% r% b( M) ?: M5 g当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周( b. g$ p. Q  p
期=0.5us。* `1 A  D" I' h0 ]. n8 L- x
) c7 \3 G: Q+ J, C: o
4.ADC 通道预选寄存器(ADCx_PCSEL)' I8 j! V; \/ f5 @  f
该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。
" c: O9 n& R* h* A, c举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC
+ G! U0 U; ^) i" J功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM326 {, ~& ?$ {- `3 e3 ^6 G: R, t3 G
芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。
2 [) z7 F7 V6 A0 g4 {* z0 o% g. W3 x$ c# Q8 Y3 S
5.ADC 规则序列数据寄存器(ADCx_DR)
. j7 r; V7 o, O! T3 G$ Z规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC
  a6 @7 D& K. n  D: o8 p1 D转换后的结果,. Z$ F: }% G8 I$ F& q2 B

$ a% N; {9 ]6 \% v6.ADC 中断与状态寄存器(ADCx_ISR)! v* q5 X+ I# j& m$ O) f/ h
这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD9 Z( Z7 J9 m& F" g6 A# b; r/ X5 O
转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否
$ L: B* _/ n) _2 t则等待转换完成。& \0 f* g: ]" K! e- [

1 K- M+ D" {4 p( S) s4 B3 P( a步骤
( A4 Z& n6 e8 q% I1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。2 x  z; b6 \, P( N, f
2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。
( M, L1 D; Z' o3)开启 AD 转换器。
' o: M; w+ s6 e; e3 J0 {4 J6 ]4)配置通道,读取通道 ADC 值。
7 ]# t; P* h( J. g4 w/ G3 m+ n: _5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。
9 v" t) ~# {" C& c/ z  H  x9 m/ B4 N( U
视频笔记% |. R- h7 Y' [* v* G" K) o
分辨率: 电压等分,2的多少次方
9 n0 A- H1 p3 a3 u6 X3 h0 R虚短虚断[百度]
7 s) J1 F/ l( m2 z$ T0 _6 J2分频–就是频率除以2
2 ~  A" H, N8 R" H注入通道无法连续转换: k8 U# U8 |; o; i
单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换. a3 Q5 a8 x8 I9 J
5 d7 F" K8 v: h; V7 m, I+ p3 U
20200115142135189.png

0 o* Z" c  O; F  `: L7 Q
  G8 o, h4 W+ ?0 m5 m1 `1 E5 {EOC中断:转换完成启动中断
3 J8 S! P1 q3 N9 k2 e
2 i$ _3 G3 n3 ?2 s* S- s程序编写步骤  M7 x: a1 R7 ?  y  E
HALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译& T% \! ]; W. N' ^6 M1 a! ?; V

9 x1 y5 d2 c/ G$ f* m
( t' h8 Q3 W; T! @4 m  H& q" N, T  ~; ]" n/ d! V: Q3 S0 y$ u

) h: U3 K. z" Y7 ]7 H  E9 @
收藏 评论0 发布时间:2021-12-19 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

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