ADC功能框图及其初始化结构体介绍

功能框图

ADC英文为Analog to Digital,模拟数字转化器,对于STMF103来说有三个ADC,分别为ADC1,ADC2,ADC3,分辨率为12位,每个ADC具有18个通道,其中外部通道16个,对于ADC它是用来测量外部的模拟量,模拟量它是测电压的而不是测电流
如下图,我们把框图分为7个部分
在这里插入图片描述
第一部分
:电压的输入范围,我们的STM32的GPIO的电压最高为3.3V,对于ADC输入电压的范围为VREF- ≤ VIN ≤ VREF+,决定输入电压的引脚:VREF-,VREF+ , VDDA ,VSSA VSSA和VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC的输入电压范围为:0-3.3v,如下图的原理图所示
在这里插入图片描述
第二,三部分:
该部分为输入通道,如图所示,外部的16个通道在转化的时候又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4路,顾名思意,规则通道就是很规矩的意思,我们平时一般使用的就是这个通道,注入通道可以理解为插入,插队的意思,是一种不安分的通道.它是一种在规则通道转换的时候强行插入要转换的一种.这点跟中断程序很像.都是不安分的主.所以,注入通道只有在规则通道存在时才会出现
在这里插入图片描述
对于规则通道,通道的转化先后由ADC_SQR1,ADC_SQR2,ADC_SQR3三个寄存器来设置,每个寄存器有24个位,每4位设置哪一个通道,如下图所示,对于ADC_SQR3寄存器的[23:20]来设置需要转换多少个通道
在这里插入图片描述
对于注入通道,注入序列寄存器JSQR只有一个,最多支持4个通道,具体多少个由JSQR的JL[2:0]决定,如果JL的值小于4的话,则JSQR跟SQR决定转换顺序的设置不一样,第一次转换的不是JSQR1[4:0],而是JCQRx[4:0],x = (4-JL),跟SQR刚好相反,如果JL=00(1个转化),那么转化的顺序是从JSQR4[4:0]开始,而不是从JSQR[4:0]开始,这个要注意,当JL等于4时,跟SQR一样.
在这里插入图片描述
第四部分
该部分为触发源,触发源相当于一个信号,告诉我们ADC可以转换了,触发源有软件触发和外部事件触发,对于软件触发,ADC_CR2寄存器中的ADON用以开启ADC并启动转化(总开关),ADC_CR2中的SWST和JSWSTART用来开启规则通道和注入通道的转化,对于外部事件触发,规则通道可以通过ADC_CR2中的EXTSEL[2:0]选择哪个触发源,用ADC_CR2中的EXTEN位开启它,注入通道也是类似
在这里插入图片描述
第五部分
对于ADC的转化时间 Tconv = 采样时间 + 12.5个周期,ADC_CLK为ADC模拟电路时钟,最大值14M,由 PCLK2提供,还可分频,2/4/6/8,RCC_CFGR 的 ADCPRE[1:0]设置,数字时钟RCC_APB2ENR用于访问寄存器,ADC需要若干个 ADC_CLK 周期完成对输入的模拟量迚行采样,采样的周期数可通过ADC采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMPx[2:0]位设置,ADC_SMPR2控制的是通道 0-9,ADC_SMPR1 控制的是通 道 10~17.每个通道可以分别用不同的时间采样。其中采样 周期最小是 1.5 个
第六部分
一切准备就绪后, ADC 转换后的数据根据转换组的不同,规则通道的数据放在ADC_DR 寄存器,注入通道的数据放在JDRx,ADC_DR 寄存器1-16位有效,用于存放独立模式转化完成的数据,但是我们的ADC分辨率是12位的,所以我们还需要设置ADC_CR2的ALIGN来确定是左对齐还是右对齐,多通道采集最好使用DMA
第七部分
该部分为中断部分,其中两个是转化结束后的中断,模拟看门狗中断用于检测到电压的阙值,阙值超过则产生中断报警
在这里插入图片描述

在这里插入图片描述

结构体介绍

先看一下ADC的初始化结构体

typedef struct
{
  uint32_t ADC_Mode;                      /*!< Configures the ADC to operate in independent or
                                               dual mode. 
                                               This parameter can be a value of @ref ADC_mode */

  FunctionalState ADC_ScanConvMode;       /*!< Specifies whether the conversion is performed in
                                               Scan (multichannels) or Single (one channel) mode.
                                               This parameter can be set to ENABLE or DISABLE */

  FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion is performed in
                                               Continuous or Single mode.
                                               This parameter can be set to ENABLE or DISABLE. */

  uint32_t ADC_ExternalTrigConv;          /*!< Defines the external trigger used to start the analog
                                               to digital conversion of regular channels. This parameter
                                               can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */

  uint32_t ADC_DataAlign;                 /*!< Specifies whether the ADC data alignment is left or right.
                                               This parameter can be a value of @ref ADC_data_align */

  uint8_t ADC_NbrOfChannel;               /*!< Specifies the number of ADC channels that will be converted
                                               using the sequencer for regular channel group.
                                               This parameter must range from 1 to 16. */
}ADC_InitTypeDef;

ADC_Mode:表示ADC工作的模式,由ADC_CR1的[16:19]来控制,想要使用哪种模式就设置该模式对应的二进制即可,具体参考STMf10x中文参考手册,一般我们选择独立模式,表示ADC1,2,3单独使用,剩下的模式都是双重模式,表示ADC1,2一起使用, 对于双重模式有以下几种
在这里插入图片描述
在这里插入图片描述
ADC_ScanConvMode:ADC的扫描模式,配置ADC_CR1的SCAN位,扫描模式指的是不断扫描ADC1,2,3,扫描多用在多通道上
ADC_ContinuousConvMode:连续转换模式,配置的是ADC_CR2的CON位,表示ADC通道连续采集,一次采集转化完继续采集
ADC_ExternalTrigConv: 外部触发转换选择, 配置ADC_CR2的EXTTRIG和EXTSEL[2:0],EXTTRIG使能触发源,EXTSEL[2:0]选择哪一个触发源,如果不选择外部触发,可以选择软件触发
ADC_DataAlign:表示对齐模式,因为我们ADC采集的数据放在ADC_DR 寄存器,ADC分辨率是12所以只能放12位,但是ADC_DR寄存器是16位的,所以要选择向左对齐还是向右对齐
ADC_NbrOfChannel:ADC要转化的通道数目,可以设置为1-16

发布了83 篇原创文章 · 获赞 3 · 访问量 1233

猜你喜欢

转载自blog.csdn.net/qq_41936794/article/details/105404378