天天看点

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

STM32外设之ADC

ADC是我们可开发工程中必须掌握的外设。

ADC简介(具体看stm32中文参照手册)

STM32f103 系列有 3 个 ADC,精度为 12 位,每个 ADC 最多有 16 个外部通道。其中ADC1 和 ADC2 都有 16 个外部通道, ADC3 根据 CPU 引脚的不同通道数也不同,一般都有8 个外部通道。

*今天我们例八步驱动ADC,掌握如何看参考资料和库函数指导

根据功能框图分成八步!!*重点内容*

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

(引用自野火零角度玩转STM32)

1. 第一步:电压输入

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

我们这里的VDD=3.3V,Vref- 、’Vref+其实就是接着我们的转换通道

2. 第二步:输入通道选择

● 规则组:就是我们平时用的通道,老老实实的。选用应写入ADC_CR1的DISCEN位。

● 注入组:就是可以插队转换。由应写入ADC_CR1的JDISCEN。

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

3. *第三步:确定转换顺序

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

规则组转换顺序是通过SQR1、2、3控制决定的

SQR3控制第1-6次转换;

SQR2控制7-12次转化;

SRQ1控制第13-18次转换;

(我也不知道为什么会反过来的)

那么我们有十六个通道要转换,(通道1、2、3。。。16)

如果通道8想最先转换,就配置SQR3的SQ1【4:0】为8

同理通道2想第8个转换 ,就配置SQR2的SQ8【4:0】为2

(自己可以对着寄存器带代入)

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

注入组转换顺序由JSQR决定,如果 JL 的 值小于 4 的话,则 JSQR 跟 SQR 决定转换顺序的设置,当JL=4的时候跟SQR一样

例如:

有一个转换通道的时候,第一个转换应该是配置JSQR4-1即是JSQR3,

有四个的时候就配置JSQR1.

4. 第四步:触发源配置

ADC有三个打开方式:

1直接控制ADC_CR2的ADON、STRT、JSTRT

2外部io触发

3定时器触发

具体根据需求进行选择

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

5. 第五步:转换时间

时钟配置:

根据时钟树可知道,ADC_CLK有PCLK2分频得到,最大为14M

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

通过配置ADCPRC这是2/4/6/8分频。(我们的PCLK2一般为72M)

采样时间配置:

采样的周期数可通过 ADC采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位设置, ADC_SMPR2 控制的是通道 0~9, ADC_SMPR1 控制的是通道 10~17。

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

公式为: Tconv = 采样时间 +12.5 个周期。

假如配置为100 则Tconv=12.5+41.5=54个周期(12M下大约4.5us)

!!转换时间越短,误差越大。

7. 第七步:数据寄存器

规则组:ADC_DR。

STM32学习之路 X 八步掌握ADCSTM32外设之ADCADC简介(具体看stm32中文参照手册)

由手册我们知道这话四32位的寄存器,而我们的转换精度是12位,所以单模式下只用低16位置,一般要右对齐。

注入组:ADC_JDRX(有四个,自行查询手册)

8. 第七步:中断

转换结束后有三种中断:规则通道结束中断,注入通道结束中断,模拟看门狗中断。前两个中断跟平常的中断很相似,我们讲一下模拟看门狗中断。模拟看门狗就是设定一个高低阈值,由ADC_LCR和ADC_HTR决定,超过阈值同样发生中断。

9.第八步:电压转换

前面也提到过ADC精度为12位数字。我们把它转换成模拟电压。

输入电压是3.3v,假设转换后数值x,模拟电压:y

公式

x212=y3.3 x 2 12 = y 3.3

我们通过寄存器了解整个ADC的转换过程,看起来很复杂,其实我们用到库函数的时候就很简答了。在这个学习过程中,我们要学会查看寄存器,查看库函数帮助手册。下次将更新库函数配置ADC!!