2024年3月23日发(作者:)

3.13 ADC实验

这一节我们将向大家介绍STM32的ADC。本节将利用STM32的ADC1通道0来采样外

部电压值值,并在TFTLCD模块上显示出来。本节分为如下几个部分:

3.13.1 STM32 ADC简介

3.13.2 硬件设计

3.13.3 软件设计

3.13.4 下载与测试

206

3.13.1 STM32 ADC简介

STM32拥有1~3个ADC,这些ADC可以独立使用,也可以使用双重模式(提高采样率)。

STM32的ADC是12位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2

个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以

左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压

是否超出用户定义的高/低阀值。

STM32F103系列最少都拥有2个ADC,我们选择的STM32F103RBT6也包含有2个ADC。

STM32的ADC最大的转换速率为1Mhz,也就是转换时间为1us(在ADCCLK=14M,采样周期

为1.5个ADC时钟下得到),不要让ADC的时钟超过14M,否则将导致结果准确度下降。

STM32将ADC的转换分为2个通道组:规则通道组和注入通道组。规则通道相当于你运

行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执

行的。同这个类似,注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,

规则通道才得以继续转换。

通过一个形象的例子可以说明:假如你在家里的院子内放了5个温度探头,室内放了3个

温度探头;你需要时刻监视室外温度即可,但偶尔你想看看室内的温度;因此你可以使用规则

通道组循环扫描室外的5个探头并显示AD转换结果,当你想看室内温度时,通过一个按钮启

动注入转换组(3个室内探头)并暂时显示室内温度,当你放开这个按钮后,系统又会回到规则通

道组继续检测室外温度。从系统设计上,测量并显示室内温度的过程中断了测量并显示室外温

度的过程,但程序设计上可以在初始化阶段分别设置好不同的转换组,系统运行中不必再变更

循环转换的配置,从而达到两个任务互不干扰和快速切换的结果。可以设想一下,如果没有规

则组和注入组的划分,当你按下按钮后,需要从新配置AD循环扫描的通道,然后在施放按钮

后需再此配置AD循环扫描的通道。

上面的例子因为速度较慢,不能完全体现这样区分

(规则通道组和注入通道组)的好处,但

在工业应用领域中有很多检测和监视探头需要较快地处理,这样对AD转换的分组将简化事件

处理的程序并提高事件处理的速度。

STM32ADC的规则通道组最多包含16个转换,而注入通道组最多包含4个通道。关于这

两个通道组的详细介绍,请参考《STM32参考手册的》第113页,第10章。

STM32的ADC可以进行很多种不同的转换模式,这些模式在《STM32参考手册》的第10

章也都有详细介绍,我们这里就不在一一列举了。我们本节仅介绍如何使用规则通道的单次转

换模式。

STM32的ADC在单次转换模式下,只执行一次转换,该模式可以通过ADC_CR2寄存器

的ADON位(只适用于规则通道)启动,也可以通过外部触发启动(适用于规则通道和注入通

道),这是CONT位为0。

以规则通道为例,一旦所选择的通道转换完成,转换结果将被存在ADC_DR寄存器中,

EOC(转换结束)标志将被置位,如果设置了EOCIE,则会产生中断。然后ADC将停止,直

到下次启动。

接下来,我们介绍一下我们执行规则通道的单次转换,需要用到的ADC寄存器。第一个

要介绍的是ADC控制寄存器(ADC_CR1和ADC_CR2)。ADC_CR1的各位描述如下:

207