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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数1 l' {% V/ i, \. x3 I& l$ b- O
STM32H743xx 系列有 3 个 ADC,都可以独立工作,( a+ h+ _+ f, `
其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。
1 ?: u8 ]2 {# Y' r! VSTM32H743 的 ADC 分辨率高达 16 位,
: Y5 s! k4 G; |% j1 A- ]* p每个 ADC 具有多达 20 个的采集通道,& l1 H' m+ X* L# u2 h9 z  T
这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。0 g! j8 O9 u) [6 U5 x9 @
ADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。
# @: m( b+ K) p2 S  z2 w' |4 tSTM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。
- H* r8 L7 M3 W) m
( J# t( r! i& a寄存器# v  N( Q* q( o0 T4 B  l
1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)
7 A" M! ^+ q7 U# D用于设置 ADC 时钟的预分频系数
: N$ b- K: w# C: f$ z  Y) |7 \由于 ADC 的输入时钟频率不能大于 36M4 ?5 A0 B1 j0 R
: n. x: X! U# J/ D
2.ADC 控制寄存器$ Z7 h. A* l: J2 N4 B3 ~
BOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,
2 k- }7 Z0 l6 K7 T& ~; ]因此该位必须设置为 1。
" P, t5 I8 o  v; y# bADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线
0 u  _3 ]! ?# R3 f+ p& L2 q性校准。
: j/ u% K8 G, N% ?1 E  `6 {ADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。, R0 A5 i4 v3 G- k4 S+ V$ l
ADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),
; K( x: U& O( B4 d* A! [" D3 f. N设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发. Y8 p' A9 f. K
时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。- i0 m* N7 Q' e4 s7 d5 |
ADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校
& E" [$ z: F, i# P: d' k' a! m准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即
' y- t4 ^; A+ X' z' E可判断校准是否完成。1 L1 u/ m. G- R8 c
ADC 配置寄存器(ADCx_CFGR)
4 R* v  G: L5 k) x' R- f% ?# LRES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。
3 A( v; \; m/ s  IEXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此
& L- s5 e4 a+ O: U0 S设置 EXTEN[1:0]=00,即禁止外部触发即可。
, J1 u( D, ^! m% D' XOVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据1 U" x0 p/ K! Q6 Z9 U
未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,/ X0 b0 }" c( @% R6 ]; `0 T& |$ \2 C+ y6 @
将会被新的结果覆盖。本章,我们设置该位为 1。
7 M7 E5 t" |, W& a1 T6 WCONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表1 P! W: ]! x' t; C' _" K& C" {1 n
示连续转换模式。本章,我们设置该位为 0。
: |; p0 V. z: M  j$ {% A9 l
' K3 ^' _9 o8 J' s/ Q+ V1 [1.ADC 配置寄存器 2(ADCx_CFGR2)3 t+ J$ b. K" x
OSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本7 a: i( @' H# `
章,我们不使用过采样,设置 OSR[9:0]=0 即可。
! X! Z& ~% a/ `  g: f: cLSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右
" g% d6 D6 ]5 {+ p- m(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。
0 L8 v: s* f* G8 Z, E2 o' ~( d( H) J
2.ADC 规则序列寄存器 1(ADCx_SQR1)) u2 N$ X& V4 ~
3.ADC 采样时间寄存器 2

& B' D$ j% X" L; k3 Y( f, f3 d" `用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议
' ?7 E1 F4 T5 C6 b尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以
+ f$ M% [$ n0 H$ p5 q# l% c. M由以下公式计算:1 \8 L( L& I8 z" f3 {5 O" Z
Tcovn=采样时间+7.5 个周期& l4 v. m; B/ o0 [
其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,; Q6 c5 I. \5 K" z. Q' [9 Y& \
当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周7 v" E0 _$ f% X% K( D" E* A( E
期=0.5us。
3 L$ f8 r( _& U) R/ r3 q# ?) H& O' O. m+ @
4.ADC 通道预选寄存器(ADCx_PCSEL)
- D; U0 N1 ~* V& R/ E该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。
- H: i, V' @# w% l& c; ~! J举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC) A1 g* L8 z9 f- h, ~( e
功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM32
4 m2 [, `" S: x! L1 O2 t  g/ ~! }2 \* X芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。
( ?& K- ~5 U& t
2 M) u6 D& w! _* x& U- l* [5.ADC 规则序列数据寄存器(ADCx_DR)* G% D( }1 u6 N" `5 |9 ^3 d7 p/ ^
规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC
1 p% B' U% l# B  r5 e转换后的结果,' A% b0 U4 ^* n) q
4 G* ~& s2 R$ d
6.ADC 中断与状态寄存器(ADCx_ISR)  j8 [  E6 k. C; F
这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD
  Z3 b2 I6 w$ I+ g& w+ D* j转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否
* L$ _* i0 h* y3 O$ y则等待转换完成。& B- _8 h' O% I( t+ n
0 g" z/ {/ I6 w8 D) n" j+ B/ x6 _
步骤* I8 o3 ^0 q- R( n* U, }: E; m- Z
1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。
% N- d+ z7 E1 ^2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。( j, G' `. H/ e4 b+ s( ?9 n
3)开启 AD 转换器。6 q4 Y# L2 M9 K
4)配置通道,读取通道 ADC 值。
) K6 w4 h! B: F9 i; d% ]% N6 s5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。8 ?- y1 M. f5 Y: V. `

  l- c1 T, U' K视频笔记, l9 [" l% x: X2 Q. X
分辨率: 电压等分,2的多少次方
0 _4 H$ K9 J+ m4 E! \2 S虚短虚断[百度]+ y, _% T% K; P% ?* e
2分频–就是频率除以2, _, T. L; ?: p# K6 V! b
注入通道无法连续转换
. ^, x$ Y4 ?3 A" h& R8 `单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换
& H" j7 ]# l+ _3 D& Z& G, H# r# T, O
20200115142135189.png

5 \5 ^! u* u* d" m0 x3 t
; J, k# R( O5 V+ u6 lEOC中断:转换完成启动中断
: B) l/ Y" j) x$ y( J& e3 e, ]4 d
程序编写步骤1 A: X) Z5 i, I: V) S% n0 b
HALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译
7 L0 f! [5 @0 r. p7 J9 R8 E' b0 _+ O- s! f6 r0 a  U8 H
1 E3 x" u* o8 X: T5 E1 X

# m# J: o* H: N- f9 ^0 o
# ~, B* A5 B! t- }
收藏 评论0 发布时间:2021-12-19 17:00

举报

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