
ADC性能参数" o7 T* F+ \3 @ STM32H743xx 系列有 3 个 ADC,都可以独立工作, 其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。, h% f% O9 W4 h8 f x4 ^ STM32H743 的 ADC 分辨率高达 16 位,& y, U0 I! ^5 Z 每个 ADC 具有多达 20 个的采集通道, 这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。( M8 v& a' j7 B ADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。 STM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。1 d) E: U2 t7 L5 e# {4 q. y 寄存器 1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3) 用于设置 ADC 时钟的预分频系数; [5 L" v8 D. X 由于 ADC 的输入时钟频率不能大于 36M I9 L) `0 |; I; r. i 2.ADC 控制寄存器# e" }! E! t1 N6 z3 \" V8 \9 r: Y BOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟, 因此该位必须设置为 1。 ADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线5 j4 z; z* N- O# l% D' { 性校准。 ADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。$ J4 ~: Z* W6 u) ^' z ADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0), 设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发2 o& w! V, }" Y; Q 时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。 ADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校" T6 y# y& v3 n* Y7 T7 w 准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即 可判断校准是否完成。7 c# q! T/ E4 L& J& g ADC 配置寄存器(ADCx_CFGR). s" N2 ~6 n P! L( z. E' ~$ n RES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。& h' o" G# j6 m& B7 h EXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此 设置 EXTEN[1:0]=00,即禁止外部触发即可。! J" b0 X# Z/ u* E* W8 D% I+ c OVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据 未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,& m# X% [# {7 d7 N2 C m 将会被新的结果覆盖。本章,我们设置该位为 1。4 N, [+ {/ O9 r3 e4 J CONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表 示连续转换模式。本章,我们设置该位为 0。 1.ADC 配置寄存器 2(ADCx_CFGR2): l- S1 g! y& D OSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本3 ]: E1 Q% _3 _) b 章,我们不使用过采样,设置 OSR[9:0]=0 即可。 LSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右3 k1 w8 g* ?7 @( D (数据右对齐),因此设置 LSHIFT[3:0]=0 即可。: t, S% q3 D* C3 O& u6 R " F& j9 y4 S6 v 2.ADC 规则序列寄存器 1(ADCx_SQR1)9 r+ U3 s# ~; v6 a2 g o& q 3.ADC 采样时间寄存器 2) y2 w, u N7 V 用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议 尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以 由以下公式计算: Tcovn=采样时间+7.5 个周期 其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,' ~ E) q4 d6 v3 X, @9 H 当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周 期=0.5us。 4.ADC 通道预选寄存器(ADCx_PCSEL)" L/ i& `1 S t 该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。+ D8 c' m" F5 P, T+ T% m 举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC# O" f8 \/ l# `/ ~+ O2 A; T 功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM32/ V3 @- ^. {' Q& D. U ~7 f% n# ] 芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。 5.ADC 规则序列数据寄存器(ADCx_DR) 规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC 转换后的结果,. ~# j( _. y% \, _- A7 Y 8 s# \' U! R/ `' ?. M9 l 6.ADC 中断与状态寄存器(ADCx_ISR)) g( w( X, O) p0 \ 这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD. M! q& o9 N" e3 l3 z, I 转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否 则等待转换完成。 步骤 1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。( V& N6 o8 D) f7 L0 B8 ^9 b; W 2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。/ W# R! Y) t' i1 q+ H l( o 3)开启 AD 转换器。 4)配置通道,读取通道 ADC 值。 5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。 视频笔记 分辨率: 电压等分,2的多少次方2 F" A1 z. M6 E/ r8 @$ r 虚短虚断[百度] 2分频–就是频率除以2 注入通道无法连续转换 单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换 ![]() EOC中断:转换完成启动中断' p/ [" D6 M) M- p& q) Q / R! h$ l9 W3 T 程序编写步骤: @! z" F% m. |* Z HALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译 … 9 u$ H) l2 g k4 Z; s5 s % [; y" ]8 {; S1 O7 L1 S+ u |
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法
【H745I GUI】1.GreenHouse 灯光控制
【Wio Lite AI视觉开发套件】+移植TensorFlow Lite
STM32H745I-DISCO脉冲宽度调制(PWM)
STM32H745I-DISCO串口通信,输入输出
拷打cubemx【002】——自定义还需基于芯片的工程
STM32硬件结构学习
STM32中BOOT的作用
STM32H7的TCM,SRAM等五块内存基础知识