STM32微控制器原理及应用-模数转换器ADC_第1页
STM32微控制器原理及应用-模数转换器ADC_第2页
STM32微控制器原理及应用-模数转换器ADC_第3页
STM32微控制器原理及应用-模数转换器ADC_第4页
STM32微控制器原理及应用-模数转换器ADC_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1STM32原理及其应用2模数转换器ADC

教学基本内容:ADC概述、ADC内部结构、ADC的功能、寄存器的种类、库函数的说明及ADC应用实例。重点:ADC相应的功能,了解各类寄存器及库函数。难点:ADC的结构中各部分标号的作用。本章主要教学要求:认识ADC的分类及其作用、ADC结构及功能,了解ADC各类库函数及其功能,了解经典_STM32_ADC多通道采样的例子及其程序3第一节ADC概述(了解)第二节ADC结构(理解)第三节ADC的功能(重点)第四节寄存器(重点)第五节库函数说明(重点)第六节应用实例4第一节ADC概述

真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式,而模/数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。

通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。

5一、ADC1.概念:ADC,Analog-to-DigitalConverter的缩写,指模/数转换器或者模数转换器,即A/D转换器,是将连续变化的模拟信号转换为离散的数字信号的器件。2.功能:通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。6二、ADC的分类及相应功能

按工作原理的不同,可分成间接ADC和直接ADC。

1.间接ADC:先将输入模拟电压转换成时间或频率,然后再把这些中间量转换成数字量,常用的有中间量是时间的双积分型ADC。

双积分型ADC:先对输入采样电压和基准电压进行两次积分,以获得与采样电压平均值成正比的时间间隔,同时在这个时间间隔内,用计数器对标准时钟脉冲(CP)计数,计数器输出的计数结果就是对应的数字量。

缺点:转换速度低

优点:抗干扰能力强;稳定性好;可实现高精度模数转换。用于多位高精度数字直流电压表中。

72.直接ADC:将输入模拟电压直接转换成数字量。常用的有并联比较型ADC和逐次逼近型ADC。

并联比较型ADC:采用各量级同时并行比较,各位输出码也是同时并行产生,且转换速度与输出码位的多少无关。

缺点:成本高、功耗大

优点:转换速度快,适用于要求高速、低分辩率的场合逐次逼近型ADC:产生一系列比较电压,是逐个产生比较电压,逐次与输入电压分别比较,以逐渐逼近的方式进行模数转换的。所以它比并联比较型ADC的转换速度慢,比双分积型ADC要快得多,属于中速ADC器件,另外位数多时,它需用的元器件比并联比较型少得多,所以它是集成ADC中,应用较广的一种。8第二节

ADC结构ADC内部结构决定了STM32F1ADC拥有很多功能。为了更好地理解STM32F1的ADC,我们把ADC结构框图分成7个子模块,来了解它内部的结构,按照顺序依次进行简单介绍。如图6-1所示:图6-1ADC框图9框图中各标号名称标号1:电压输入引脚ADC输入电压范围为:。由这四个外部引脚决定。通常我们把和接地,把和接3.3V,因此ADC的输入电压范围为:0~3.3V。我们使用的开发ADC输入电压范围为0~3.3V。如果我们想让ADC测试负电压或者更高的正电压,可以在外部加一个电压调理电路,把需要转换的电压抬升或者降压到0~3.3V,这样ADC就可以测量了。但一定记住,不要直接将高于3.3V的电压接到ADC管脚上,那样将可能烧坏芯片。标号2:输入通道STM32的ADC的输入通道多达18个,其中外部的16个通道就是框图中的ADCx_IN0、ADCx_IN1...ADCx_IN5(x=1/2/3,表示ADC数),通过这16个外部通道可以采集模拟信号。这16个通道对应着不同的口,具体是哪一个IO口可以从数据手册查询到。其中ADC1还有2个内部通道:ADC1的通道16连接到了芯片内部的温度传感器,通道17连接到了内部参考电压。ADC2和ADC3的通道16、17全部连接到了内部的VSS。10标号3:通道转换顺序外部的16个通道在转换的时候可分为2组通道:规则通道组和注入通道组,其中规则通道组最多有16路,注入通道组最多有4路。规则通道组:从名字来理解,规则通道就是一种规规矩矩的通道,类似于正常执行的程序。通常我们使用的都是这个通道。注入通道组:从名字来理解,注入即为插入,是一种不安分的通道,类似于中断。当程序正常往下执行时,中断可以打断程序的执行。同样如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。标号4:触发源选择好输入通道,设置好转换顺序,接下来就可以开始转换。要开启ADC转换,可以直接设置ADC控制寄存器ADC_CR2的ADON位为1,即使能ADC。当然ADC还支持外部事件触发转换,触发源有很多,具体选择哪一种触发源,由ADC控制寄存器2:ADC_CR2的EXTSEL[2:0]和JEXTSEL[2:0]位来控制。EXTSEL[2:0]用于选择规则通道的触发源,JEXTSEL[2:0]用于选择注入通道的触发源。选定好触发源之后,触发源是否要激活,则由ADC控制寄存器ADC_CR2的EXTTRIG和JEXTTRIG这两位来激活。如果使能了外部触发事件,我们还可以通过设置ADC控制寄存器2:ADC_CR2的EXTEN[1:0]和JEXTEN[1:0]来控制触发极性,可以有4种状态,分别是:禁止触发检测、上升沿检测、下降沿检测以及上升沿和下降沿均检测。标号5:ADC时钟ADC输入时钟ADC_CLK由APB2经过分频产生,最大值是14MHz,分频因子由RCC时钟配置寄存器RCC_CFGR的位ADCPRE[1:0]设置,可以是2/4/6/8分频,注意这里没有1分频。我们知道APB2总线时钟为72M,而ADC最大工作频率为14M,所以一般设置分频因子为6,这样ADC的输入时钟为12M。ADC要完成对输入电压的采样需要若干个ADC_CLK周期,采样的周期数可通过ADC采样时间寄存器ADC_SMPR1和ADC_SMPR2中的SMP[2:0]位设置,ADC_SMPR2控制的是通道0~9,ADC_SMPR1控制的是通道10~17。每个通道可以分别用不同的时间采样。其中采样周期最小是1.5个,即如果我们要达到最快的采样,那么应该设置采样周期为1.5个周期,这里说的周期就是1/ADC_CLK。ADC的总转换时间跟ADC的输入时钟和采样时间有关,其公式如下:Tconv=采样时间+12.5个周期其中Tconv为ADC总转换时间,当ADC_CLK=14Mhz的时候,并设置1.5个周期的采样时间,则Tcovn=1.5+12.5=14个周期=1us。通常经过ADC预分频器能分频到最大的时钟只能是12M,采样周期设置为1.5个周期,算出最短的转换时间为1.17us,这个才是最常用的。标号6:数据寄存器ADC转换后的数据根据转换组的不同,规则组的数据放在ADC_DR寄存器内,注入组的数据放在JDRx内。因为STM32F1的ADC是12位转换精度,而数据寄存器是16位,所以ADC在存放数据的时候就有左对齐和右对齐区分。如果是左对齐,AD转换完成数据存放在ADC_DR寄存器的[4:15]位内;如果是右对齐,则存放在ADC_DR寄存器的[0:11]位内。具体选择何种存放方式,需通过ADC_CR2的11位ALIGN设置。在规则组中,含有16路通道,对应着存放规则数据的寄存器只有1个,如果使用多通道转换,那么转换后的数据就全部挤在ADC_DR寄存器内,前一个时间点转换的通道数据,就会被下一个时间点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该把数据取走,或者开启DMA模式,把数据传输到内存里面,不然就会造成数据的覆盖。最常用的做法就是开启DMA传输。如果没有使用DMA传输,我们一般通过ADC状态寄存器ADC_SR获取当前ADC转换的进度状态,进而进行程序控制。而在注入组中,最多含有4路通道,对应着存放注入数据的寄存器正好有4个,不会跟规则寄存器那样产生数据覆盖的问题。标号7:中断当发生如下事件且使能相应中断标志位时,ADC能产生中断。(1)转换结束(规则转换)与注入转换结束数据转换结束后,如果使能中断转换结束标志位,转换一结束就会产生转换结束中断。(2)模拟看门狗事件当被ADC转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由ADC_LTR和ADC_HTR设置。(3)DMA请求规则和注入通道转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据直接存储在内存里面。要注意的是只有ADC1和ADC3可以产生DMA请求。一般我们在使用ADC的时候都会开启DMA传输。我们知道STM32F1ADC转换模式有单次转换与连续转换区分。在单次转换模式下,ADC执行一次转换。可以通过ADC_CR2寄存器的SWSTART位(只适用于规则通道)启动,也可以通过外部触发启动(适用于规则通道和注入通道),这时CONT位为0。以规则通道为例,一旦所选择的通道转换完成,转换结果将被存在ADC_DR寄存器中,EOC(转换结束)标志将被置位,如果设置了EOCIE,则会产生中断。然后ADC将停止,直到下次启动。在连续转换模式下,ADC结束一个转换后立即启动一个新的转换。CONT位为1时,可通过外部触发或将ADC_CR2寄存器中的SWSTRT位置1来启动此模式(仅适用于规则通道)。需要注意的是:此模式无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用JAUTO位)。14第三节ADC的功能

(**)

1、ADC开关控制通过设置ADC_CR2寄存器的ADON位可给ADC上电。当第一次设置ADON位时,它将ADC从断电状态下唤醒。ADC上电延迟一段时间后(tSTAB),再次设置ADON位时开始进行转换。通过清除ADON位可以停止转换,并将ADC置于断电模式。在这个模式中,ADC几乎不耗电(仅几个μA)。2、ADC时钟由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个专用的可编程预分频器。3、通道选择有16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。●规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。●注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到ADC以转换新选择的组。温度传感器/内部通道温度传感器和通道ADC1_IN16相连接,内部参照电压和ADC1_IN17相连接。可以按注入或规则通道对这两个内部通道进行转换。注意:温度传感器和只能出现在主ADC1中。4、单次转换模式单次转换模式下,ADC只执行一次转换。该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。一旦选择通道的转换完成:●如果一个规则通道被转换:─转换数据被储存在16位ADC_DR寄存器中─EOC(转换结束)标志被设置─如果设置了EOCIE,则产生中断。●如果一个注入通道被转换:─转换数据被储存在16位的ADC_DRJ1寄存器中─JEOC(注入转换结束)标志被设置─如果设置了JEOCIE位,则产生中断。然后ADC停止。5、连续转换模式在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。此模式可通过外部触发启动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。每个转换后:●如果一个规则通道被转换:─转换数据被储存在16位的ADC_DR寄存器中─EOC(转换结束)标志被设置─如果设置了EOCIE,则产生中断。●如果一个注入通道被转换:─转换数据被储存在16位的ADC_DRJ1寄存器中─JEOC(注入转换结束)标志被设置─如果设置了JEOCIE位,则产生中断。6、时序图如下图6-2所示,ADC在开始精确转换前需要一个稳定时间tSTAB。在开始ADC转换和14个时钟周期后,EOC标志被设置,16位ADC数据寄存器包含转换的结果。图6-2时序图7、模拟看门狗如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置。阀值位于ADC_HTR和ADC_LTR寄存器的最低12个有效位中。通过设置ADC_CR1寄存器的AWDIE位以允许产生相应中断。图6-3是模拟看门狗警戒区。阀值独立于由ADC_CR2寄存器上的ALIGN位选择的数据对齐模式。比较是在对齐之前完成的。通过配置ADC_CR1寄存器,模拟看门狗可以作用于1个或多个通道,如表6-1所示。模拟看门狗警戒的通道ADC_CR1寄存器控制位AWDSGL位AWDEN位JAWDEN位无任意值00所有注入通道001所有规则通道010所有注入和规则通道011单一的(1)注入通道101单一的(1)规则通道110单一的(1)注入或规则通道000图6-3模拟看门狗警戒区表6-1模拟看门狗通道选择8、扫描模式此模式用来扫描一组模拟通道,扫描模式可通过设置ADC_CR1寄存器的SCAN位来选择。一旦这个位被设置,ADC扫描所有被ADC_SQRX寄存器(对规则通道)或ADC_JSQR(对注入通道)选中的所有通道。在每个组的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设置了CONT位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。而注入通道转换的数据总是存储在ADC_JDRx寄存器中。9、注入通道管理(1)触发注入清除ADC_CR1寄存器的JAUTO位,并且设置SCAN位,即可使用触发注入功能。1)利用外部触发或通过设置ADC_CR2寄存器的ADON位,启动一组规则通道的转换。2)如果在规则通道转换期间产生一外部注入触发,当前转换被复位,注入通道序列被以单次扫描方式进行转换。3)然后,恢复上次被中断的规则组通道转换。如果在注入转换期间产生一规则事件,注入转换不会被中断,但是规则序列将在注入序列结束后被执行。注:当使用触发的注入转换时,必须保证触发事件的间隔长于注入序列。例如:序列长度为28个ADC时钟周期(即2个具有1.5个时钟间隔采样时间的转换),触发之间最小的间隔必须是29个ADC时钟周期。(2)自动注入如果设置了JAUTO位,在规则组通道之后,注入组通道被自动转换。这可以用来转换在ADC_SQRx和ADC_JSQR寄存器中设置的多至20个转换序列。在此模式里,必须禁止注入通道的外部触发。如果除JAUTO位外还设置了CONT位,规则通道至注入通道的转换序列被连续执行。对于ADC时钟预分频系数为4至8时,当从规则转换切换到注入序列或从注入转换切换到规则序列时,会自动插入1个ADC时钟间隔;当ADC时钟预分频系数为2时,则有2个ADC时钟间隔的延迟。图6-4为注入转换延时时序图。图6-4注入转换延时10、间断模式(1)规则组此模式通过设置ADC_CR1寄存器上的DISCEN位激活。它可以用来执行一个短序列的n次转换(n<=8),此转换是ADC_SQRx寄存器所选择的转换序列的一部分。数值n由ADC_CR1寄存器的DISCNUM[2:0]位给出。一个外部触发信号可以启动ADC_SQRx寄存器中描述的下一轮n次转换,直到此序列所有的转换完成为止。总的序列长度由ADC_SQR1寄存器的L[3:0]定义。举例:n=3,被转换的通道=0、1、2、3、6、7、9、10第一次触发:转换的序列为0、1、2第二次触发:转换的序列为3、6、7第三次触发:转换的序列为9、10,并产生EOC事件第四次触发:转换的序列0、1、2注意:当以间断模式转换一个规则组时,转换序列结束后不自动从头开始。当所有子组被转换完成,下一次触发启动第一个子组的转换。在上面的例子中,第四次触发重新转换第一子组的通道0、1和2。(2)注入组此模式通过设置ADC_CR1寄存器的JDISCEN位激活。在一个外部触发事件后,该模式按通道顺序逐个转换ADC_JSQR寄存器中选择的序列。一个外部触发信号可以启动ADC_JSQR寄存器选择的下一个通道序列的转换,直到序列中所有的转换完成为止。总的序列长度由ADC_JSQR寄存器的JL[1:0]位定义。例子:n=1,被转换的通道=1、2、3第一次触发:通道1被转换第二次触发:通道2被转换第三次触发:通道3被转换,并且产生EOC和JEOC事件第四次触发:通道1被转换注意:1)当完成所有注入通道转换,下个触发启动第1个注入通道的转换。在上述例子中,第四个触发重新转换第1个注入通道1。2)不能同时使用自动注入和间断模式。3)必须避免同时为规则和注入组设置间断模式。间断模式只能作用于一组转换。24第四节寄存器(**)

1、ADC状态寄存器(ADC_SR)地址偏移:0x00复位值:0x00000000位31:15保留。必须保持为0。位4STRT:规则通道开始位(RegularchannelStartflag)该位由硬件在规则通道转换开始时设置,由软件清除。0:规则通道转换未开始;1:规则通道转换已开始。位3JSTRT:注入通道开始位(InjectedchannelStartflag)该位由硬件在注入通道组转换开始时设置,由软件清除。0:注入通道组转换未开始;1:注入通道组转换已开始。位2JEOC:注入通道转换结束位(Injectedchannelendofconversion)该位由硬件在所有注入通道组转换结束时设置,由软件清除0:转换未完成;1:转换完成。位1EOC:转换结束位(Endofconversion)该位由硬件在(规则或注入)通道组转换结束时设置,由软件清除或由读取ADC_DR时清除0:转换未完成;1:转换完成。位0AWD:模拟看门狗标志位(Analogwatchdogflag)该位由硬件在转换的电压值超出了ADC_LTR和ADC_HTR寄存器定义的范围时设置,由软件清除0:没有发生模拟看门狗事件;1:发生模拟看门狗事件。2、ADC控制寄存器1(ADC_CR1)地址偏移:0x04复位值:0x00000000位31:24保留。必须保持为0。位23AWDEN:在规则通道上开启模拟看门狗(Analogwatchdogenableonregularchannels)该位由软件设置和清除。0:在规则通道上禁用模拟看门狗;1:在规则通道上使用模拟看门狗。位22JAWDEN:在注入通道上开启模拟看门狗(Analogwatchdogenableoninjectedchannels)该位由软件设置和清除。0:在注入通道上禁用模拟看门狗;1:在注入通道上使用模拟看门狗。位21:20保留。必须保持为0。位19::16DUALMOD[3:0]:双模式选择(Dualmodeselection)软件使用这些位选择操作模式。0000:独立模式0001:混合的同步规则+注入同步模式0010:混合的同步规则+交替触发模式0011:混合同步注入+快速交叉模式0100:混合同步注入+慢速交叉模式0101:注入同步模式0110:规则同步模式0111:快速交叉模式1000:慢速交叉模式1001:交替触发模式注:在ADC2和ADC3中这些位为保留位在双模式中,改变通道的配置会产生一个重新开始的条件,这将导致同步丢失。建议在进行任何配置改变前关闭双模式。位15:13DISCNUM[2:0]:间断模式通道计数(Discontinuousmodechannelcount)软件通过这些位定义在间断模式下,收到外部触发后转换规则通道的数目000:1个通道001:2个通道……111:8个通道位12JDISCEN:在注入通道上的间断模式(Discontinuousmodeoninjectedchannels)该位由软件设置和清除,用于开启或关闭注入通道组上的间断模式0:注入通道组上禁用间断模式;1:注入通道组上使用间断模式。位11DISCEN:在规则通道上的间断模式(Discontinuousmodeonregularchannels)该位由软件设置和清除,用于开启或关闭规则通道组上的间断模式0:规则通道组上禁用间断模式;1:规则通道组上使用间断模式。位10JAUTO:自动的注入通道组转换(AutomaticInjectedGroupconversion)该位由软件设置和清除,用于开启或关闭规则通道组转换结束后自动的注入通道组转换0:关闭自动的注入通道组转换;1:开启自动的注入通道组转换。位9AWDSGL:扫描模式中在一个单一的通道上使用看门狗(Enablethewatchdogonasinglechannelinscanmode)该位由软件设置和清除,用于开启或关闭由AWDCH[4:0]位指定的通道上的模拟看门狗功能0:在所有的通道上使用模拟看门狗;1:在单一通道上使用模拟看门狗。位8SCAN:扫描模式(Scanmode)该位由软件设置和清除,用于开启或关闭扫描模式。在扫描模式中,转换由ADC_SQRx或ADC_JSQRx寄存器选中的通道。0:关闭扫描模式;1:使用扫描模式。注:如果分别设置了EOCIE或JEOCIE位,只在最后一个通道转换完毕后才会产生EOC或JEOC中断。位7JEOCIE:允许产生注入通道转换结束中断(Interruptenableforinjectedchannels)该位由软件设置和清除,用于禁止或允许所有注入通道转换结束后产生中断。0:禁止JEOC中断;1:允许JEOC中断。当硬件设置JEOC位时产生中断。位6AWDIE:允许产生模拟看门狗中断(Analogwatchdoginterruptenable)该位由软件设置和清除,用于禁止或允许模拟看门狗产生中断。在扫描模式下,如果看门狗检测到超范围的数值时,只有在设置了该位时扫描才会中止。0:禁止模拟看门狗中断;1:允许模拟看门狗中断位5EOCIE:允许产生EOC中断(InterruptenableforEOC)该位由软件设置和清除,用于禁止或允许转换结束后产生中断。0:禁止EOC中断;1:允许EOC中断。当硬件设置EOC位时产生中断。位4:0AWDCH[4:0]:模拟看门狗通道选择位(Analogwatchdogchannelselectbits)这些位由软件设置和清除,用于选择模拟看门狗保护的输入通道。00000:ADC模拟输入通道000001:ADC模拟输入通道1……01111:ADC模拟输入通道1510000:ADC模拟输入通道1610001:ADC模拟输入通道17保留所有其他数值。注:ADC1的模拟输入通道16和通道17在芯片内部分别连到了温度传感器和VREFINT。ADC2的模拟输入通道16和通道17在芯片内部连到了VSS。ADC3模拟输入通道9、14、15、16、17与Vss相连。3、ADC控制寄存器2(ADC_CR2)地址偏移:0x08复位值:0x00000000位31:24保留。必须保持为0。位23TSVREFE:温度传感器和VREFINT使能(TemperaturesensorandVREFINTenable)该位由软件设置和清除,用于开启或禁止温度传感器和VREFINT通道。在多于1个ADC的器件中,该位仅出现在ADC1中。0:禁止温度传感器和VREFINT;1:启用温度传感器和VREFINT。位22SWSTART:开始转换规则通道(Startconversionofregularchannels)由软件设置该位以启动转换,转换开始后硬件马上清除此位。如果在EXTSEL[2:0]位中选择了SWSTART为触发事件,该位用于启动一组规则通道的转换,0:复位状态;1:开始转换规则通道。位21JSWSTART:开始转换注入通道(Startconversionofinjectedchannels)由软件设置该位以启动转换,软件可清除此位或在转换开始后硬件马上清除此位。如果在JEXTSEL[2:0]位中选择了JSWSTART为触发事件,该位用于启动一组注入通道的转换,0:复位状态;1:开始转换注入通道。位20EXTTRIG:规则通道的外部触发转换模式(Externaltriggerconversionmodeforregularchannels)该位由软件设置和清除,用于开启或禁止可以启动规则通道组转换的外部触发事件。0:不用外部事件启动转换;1:使用外部事件启动转换。位19:17EXTSEL[2:0]:选择启动规则通道组转换的外部事件(Externaleventselectforregulargroup)这些位选择用于启动规则通道组转换的外部事件ADC1和ADC2的触发配置如下000:定时器1的CC1事件100:定时器3的TRGO事件001:定时器1的CC2事件101:定时器4的CC4事件110:EXTI线11/TIM8_TRGO事件,仅大容量产品具有TIM8_TRGO功能010:定时器1的CC3事件011:定时器2的CC2事件111:SWSTARTADC3的触发配置如下000:定时器3的CC1事件100:定时器8的TRGO事件001:定时器2的CC3事件101:定时器5的CC1事件010:定时器1的CC3事件110:定时器5的CC3事件011:定时器8的CC1事件111:SWSTART位16保留。必须保持为0。位15JEXTTRIG:注入通道的外部触发转换模式(Externaltriggerconversionmodeforinjectedchannels)该位由软件设置和清除,用于开启或禁止可以启动注入通道组转换的外部触发事件。0:不用外部事件启动转换;1:使用外部事件启动转换。位14:12JEXTSEL[2:0]:选择启动注入通道组转换的外部事件(Externaleventselectforinjectedgroup)这些位选择用于启动注入通道组转换的外部事件。ADC1和ADC2的触发配置如下000:定时器1的TRGO事件100:定时器3的CC4事件001:定时器1的CC4事件101:定时器4的TRGO事件110:EXTI线15/TIM8_CC4事件(仅大容量产品具有TIM8_CC4)010:定时器2的TRGO事件011:定时器2的CC1事件111:JSWSTARTADC3的触发配置如下000:定时器1的TRGO事件100:定时器8的CC4事件001:定时器1的CC4事件101:定时器5的TRGO事件010:定时器4的CC3事件110:定时器5的CC4事件011:定时器8的CC2事件111:JSWSTART位11ALIGN:数据对齐(Dataalignment)该位由软件设置和清除。0:右对齐;1:左对齐。位10:9保留。必须保持为0。位8DMA:直接存储器访问模式(Directmemoryaccessmode)该位由软件设置和清除。详见DMA控制器章节。0:不使用DMA模式;1:使用DMA模式。注:只有ADC1和ADC3能产生DMA请求。位7:4保留。必须保持为0。位3RSTCAL:复位校准(Resetcalibration)该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。0:校准寄存器已初始化;1:初始化校准寄存器。注:如果正在进行转换时设置RSTCAL,清除校准寄存器需要额外的周期。位2CAL:A/D校准(A/DCalibration)该位由软件设置以开始校准,并在校准结束时由硬件清除。0:校准完成;1:开始校准。位1CONT:连续转换(Continuousconversion)该位由软件设置和清除。如果设置了此位,则转换将连续进行直到该位被清除。0:单次转换模式;1:连续转换模式。位0ADON:开/关A/D转换器(A/DconverterON/OFF)该位由软件设置和清除。当该位为’0’时,写入’1’将把ADC从断电模式下唤醒。当该位为’1’时,写入’1’将启动转换。应用程序需注意,在转换器上电至转换开始有一个延迟tSTAB。0:关闭ADC转换/校准,并进入断电模式;1:开启ADC并启动转换。注:如果在这个寄存器中与ADON一起还有其他位被改变,则转换不被触发。这是为了防止触发错误的转换。4、ADC采样时间寄存器1(ADC_SMPR1)地址偏移:0x0C复位值:0x00000000位31:24保留。必须保持为0。位23:0SMPx[2:0]:选择通道x的采样时间(ChannelxSampletimeselection)这些位用于独立地选择每个通道的采样时间。在采样周期中通道选择位必须保持不变。000:1.5周期100:41.5周期001:7.5周期101:55.5周期010:13.5周期110:71.5周期011:28.5周期111:239.5周期注:ADC1的模拟输入通道16和通道17在芯片内部分别连到了温度传感器和VREFINT。ADC2的模拟输入通道16和通道17在芯片内部连到了Vss。ADC3模拟输入通道14、15、16、17与Vss相连5、ADC采样时间寄存器2(ADC_SMPR2)地址偏移:0x10复位值:0x00000000位31:30保留。必须保持为0。位29:0SMPx[2:0]:选择通道x的采样时间(ChannelxSampletimeselection)这些位用于独立地选择每个通道的采样时间。在采样周期中通道选择位必须保持不变。000:1.5周期100:41.5周期001:7.5周期101:55.5周期010:13.5周期110:71.5周期011:28.5周期111:239.5周期注:ADC3模拟输入通道9与Vss相连6、ADC注入通道数据偏移寄存器x(ADC_JOFRx)(x=1..4)地址偏移:0x14-0x20复位值:0x00000000位31:12保留。必须保持为0。位11:0JOFFSETx[11:0]:注入通道x的数据偏移(Dataoffsetforinjectedchannelx)当转换注入通道时,这些位定义了用于从原始转换数据中减去的数值。转换的结果可以在ADC_JDRx寄存器中读出。7、ADC看门狗高阀值寄存器(ADC_HTR)地址偏移:0x24复位值:0x00000000位31:12保留。必须保持为0。位11:0HT[11:0]:模拟看门狗高阀值(Analogwatchdoghigh

threshold)这些位定义了模拟看门狗的阀值高限。8、ADC看门狗低阀值寄存器(ADC_LRT)地址偏移:0x28复位值:0x00000000

位31:12保留。必须保持为0。位11:0LT[11:0]:模拟看门狗低阀值(Analogwatchdoglowthreshold)这些位定义了模拟看门狗的阀值低限。9、ADC规则序列寄存器1(ADC_SQR1)地址偏移:0x2C复位值:0x00000000

位31:24保留。必须保持为0。位23:20L[3:0]:规则通道序列长度(Regularchannelsequencelength)这些位由软件定义在规则通道转换序列中的通道数目。0000:1个转换0001:2个转换……1111:16个转换位19:15SQ16[4:0]:规则序列中的第16个转换(16thconversioninregularsequence)这些位由软件定义转换序列中的第16个转换通道的编号(0~17)。位14:10SQ15[4:0]:规则序列中的第15个转换(15thconversioninregularsequence)位9:5SQ14[4:0]:规则序列中的第14个转换(14thconversioninregularsequence)位4:0SQ13[4:0]:规则序列中的第13个转换(13thconversioninregularsequence)10、ADC规则序列寄存器2(ADC_SQR2)地址偏移:0x30复位值:0x00000000

位31:20保留。必须保持为0。位29:25SQ12[4:0]:规则序列中的第12个转换(12thconversioninregularsequence)这些位由软件定义转换序列中的第12个转换通道的编号(0~17)。位24:20SQ11[4:0]:规则序列中的第11个转换(11thconversioninregularsequence)位19:15SQ10[4:0]:规则序列中的第10个转换(10thconversioninregularsequence)位14:10SQ9[4:0]:规则序列中的第9个转换(9thconversioninregularsequence)位9:5SQ8[4:0]:规则序列中的第8个转换(82thconversioninregularsequence)位4:0SQ7[4:0]:规则序列中的第7个转换(7thconversioninregularsequence)11、ADC规则序列寄存器3(ADC_SQR3)地址偏移:0x34复位值:0x00000000位31:30保留。必须保持为0。位29:25SQ6[4:0]:规则序列中的第6个转换(6thconversioninregularsequence)这些位由软件定义转换序列中的第6个转换通道的编号(0~17)。位24:20SQ5[4:0]:规则序列中的第5个转换(5thconversioninregularsequence)位19:15SQ4[4:0]:规则序列中的第4个转换(4thconversioninregularsequence)位14:10SQ3[4:0]:规则序列中的第3个转换(3rdconversioninregularsequence)位9:5SQ2[4:0]:规则序列中的第2个转换(2ndconversioninregularsequence)位4:0SQ1[4:0]:规则序列中的第1个转换(1stconversioninregularsequence)12、ADC注入序列寄存器(ADC_JSQR)地址偏移:0x38复位值:0x00000000

位31:22保留。必须保持为0。位21:20JL[1:0]:注入通道序列长度(Injectedsequencelength)这些位由软件定义在规则通道转换序列中的通道数目。00:1个转换01:2个转换10:3个转换11:4个转换位19:15JSQ4[4:0]:注入序列中的第4个转换(4thconversionininjectedsequence)这些位由软件定义转换序列中的第4个转换通道的编号(0~17)。注:不同于规则转换序列,如果JL[1:0]的长度小于4,则转换的序列顺序是从(4-JL)开始。例如:ADC_JSQR[21:0]=1000011000110011100010,意味着扫描转换将按下列通道顺序转换:7、3、3,而不是2、7、3。位14:10JSQ3[4:0]:注入序列中的第3个转换(3rdconversionininjectedsequence)位9:5JSQ2[4:0]:注入序列中的第2个转换(2ndconversionininjectedsequence)位4:0JSQ1[4:0]:注入序列中的第1个转换(1stconversionininjectedsequence)13、ADC注入数据寄存器x(ADC_JDRx)(x=1..4)地址偏移:0x3C–0x48复位值:0x00000000位31:16保留。必须保持为0。位21:20JDATA[15:0]:注入转换的数据(Injecteddata)这些位为只读,包含了注入通道的转换结果,数据是左对齐或右对齐。14ADC规则数据寄存器(ADC_DR)地址偏移:0x4C复位值:0x00000000

位31:16ADC2DATA[15:0]:ADC2转换的数据(ADC2data)-在ADC1中:双模式下,这些位包含了ADC2转换的规则通道数据。-在ADC2和ADC3中:不使用这些位。位15:0DATA[15:0]:规则转换的数据(Regulardata)这些位为只读,包含了规则通道的转换结果,数据是左对齐或右对齐。37第五节库函数说明(**)

库函数(Libraryfunction)是把函数放到库里,供别人使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。调用的时候把它所在的文件名用#include《》加到里面就可以了。一般是放到lib文件里的。1、ADC_DeInit函数的功能是将外设ADCx的全部寄存器重设为默认值。ADC_DeInit(ADC2);ADC_AutoInjectedConvCmd(ADC2,ENABLE);2、ADC_Init函数的功能是根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器。其中ADC_InitTypeDef定义在stm32f10x_adc.h中。其结构体如下所示:typedefstruct{u32ADC_Mode;//可以设置ADC_ModeFunctionalStateADC_ScanConvMode;//规定了模数转换工作在扫描模式还是单次模式,参数可以是ENABLE和DISENABLEFunctionalStateADC_CintinuousConvMode;//规定了模数转换工作在连续还是单次模式,参数可以是ENABLE和DISENABLEu32ADC_ExternalTrigConv;//定义了使用外部触发来启动规则通道的模数转换u32ADC_DataAlign;//规定了ADC数据向左边对齐还是右边对齐参数可以是right和leftu8ADC_NbrOfChannel;//规定了顺序进行规则转换的ADC通道的数目。参数可以是1~16}ADC_InitTypeDef例:初始化ADC1(可以按照自己的需要来初始化,这里只是一个例)ADC_InitTypeDefADC_InitTypeDefADC_InitStructure;ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_CintinuousConvMode=DISENABLE;ADC_InitStructure.ADC_ExternalTrigconv=ADC_ExternalTrigconv_T1_CC1;ADC_InitStructure.ADC_Data_Align=ADC_DataAlign_RIGHT;ADC_InitStructure.ADC_NbrOfChannel=16;ADC_Init(ADC1,&ADC_InitStructure);3、ADC_Cmd函数的功能是使能或失能指定的ADC,其中ADC_Cmd只能在其他ADC设置函数之后被调用ADC_Cmd(ADC1,ENABLE);4、ADC_DMACmd函数的功能是使能或者失能指定的ADC的DMA请求。ADC_DMACmd(ADC1,ENABLE);5、ADC_ITConfig函数的功能是使能或者失能指定的ADC的中断,其中可以是EOC/AWD/JEOCADC_ITConfig(ADC2,ADC_IT_EOC|ADC_IT_AWD);6、ADC_ResetCalibration函数的功能是重置指定的ADC的校准寄存器。ADC_ReserCalibration(ADC1);7、ADC_GetResetCalibrationSttaus函数的功能是获取ADC重置校准寄存器的状态。FlagStatusStatusStatus=ADC_GetResetCalibrationSttaus(ADC2);8、ADC_StartCalibration函数的功能是开始指定ADC的校准。ADC_StartCalibration(ADC2);9、ADC_GetCalibrationStatus函数的功能是获取ADC的校准状态。具有返回值FlagStatusStatus;Status=ADC_GetCalibrationStatus(ADC2);10、ADC_SoftwareStartConvCmd函数的功能是使能或者失能指定的ADC的软件启动功能。ADC_SoftwareStartConvCmd(ADC1,ENABLE);11、ADC_DiscModeChannelCountConfig函数的功能是对ADC规则通道配置间断模式。其中参数可以是1~8。ADC_DiscModeChannelCountConfig(ADC1,2);12、ADC_DiscModeCmd函数的功能是使能或者失能指定的ADC规则组通道的间断模式。ADC_DiscModeCmd(ADC1,ENABLE);13、ADC_RegularChannelConfig函数的功能是设置ADC的规则组通道,设置他们的转化顺序和采样时间,其中ADC_Channel配置通过本函数来设置的ADC通道,可以是0~17,ADC_SampleTime配置选中通道的ADC采样时间。ADC_RegularChannelConfig(ADC2,ADC_Channel_2,1,ADC_SampleTime_1Cycles5);14、ADC_ExternalTrigConvConfig函数的功能是使能ADCx外部触发启动转换功能。ADC_ExternalTrigConvConfig(ADC2,ENABLE);15、ADC_GetConversionValue函数的功能是返回最近一次ADCx规则组的转换结果。u16DataValue;DataValue=ADC_GetConversionValue(ADC2);16、ADC_GetDuelModeConversionValue函数的功能是返回最近一次双ADC模式下的转换结果。u32Data

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论