12-ADC编程-yy.doc_第1页
12-ADC编程-yy.doc_第2页
12-ADC编程-yy.doc_第3页
12-ADC编程-yy.doc_第4页
12-ADC编程-yy.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

十二、ADC编程STM32F103系列拥有23个ADC,这些ADC可以独立使用,也可以使用双重模式(提高采样率)。STM32的ADC是12位、逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。STM32的ADC最大的转换速率为1Mhz,也就是转换时间为1us(在ADCCLK=14M,采样周期为1.5个ADC时钟下得到),不要让ADC的时钟超过14M。STM32将ADC的转换分为2个通道组:规则通道组和注入通道组。规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。中断可以打断正常程序的执行。同这个类似,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续转换。个转换,而注入通道组最多包含4个通道。ADC_CR1位19:16DUALMOD3:0:双模式选择 (Dual mode selection) 软件使用这些位选择操作模式。 0000:独立模式 0001:混合的同步规则+注入同步模式 0010:混合的同步规则+交替触发模式 0011:混合同步注入+快速交叉模式 0100:混合同步注入+慢速交叉模式 0101:注入同步模式 0110:规则同步模式 0111:快速交叉模式 1000:慢速交叉模式 1001:交替触发模式 注: 在ADC2和ADC3中这些位为保留位 在双模式中,改变通道的配置会产生一个重新开始的条件,这将导致同步丢失。建议在进行任何配置改变前关闭双模式。位8SCAN:扫描模式 (Scan mode) 该位由软件设置和清除,用于开启或关闭扫描模式。在扫描模式中,转换由ADC_SQRx或ADC_JSQRx寄存器选中的通道。 0:关闭扫描模式; 1:使用扫描模式。 注:如果分别设置了EOCIE或JEOCIE位,只在最后一个通道转换完毕后才会产生EOC或JEOC中断。位7JEOCIE:允许产生注入通道转换结束中断 (Interrupt enable for injected channels) 该位由软件设置和清除,用于禁止或允许所有注入通道转换结束后产生中断。 0:禁止JEOC中断; 1:允许JEOC中断。当硬件设置JEOC位时产生中断。位5EOCIE:允许产生EOC中断 (Interrupt enable for EOC) 该位由软件设置和清除,用于禁止或允许转换结束后产生中断。 0:禁止EOC中断; 1:允许EOC中断。当硬件设置EOC位时产生中断。ADC_CR2位23TSVREFE:温度传感器和VREFINT使能 (Temperature sensor and VREFINT enable) 该位由软件设置和清除,用于开启或禁止温度传感器和VREFINT通道。在多于1个ADC的器件中,该位仅出现在ADC1中。 0:禁止温度传感器和VREFINT; 1:启用温度传感器和VREFINT。位22SWSTART:开始转换规则通道 (Start conversion of regular channels) 由软件设置该位以启动转换,转换开始后硬件马上清除此位。如果在EXTSEL2:0位中选择了SWSTART为触发事件,该位用于启动一组规则通道的转换, 0:复位状态; 1:开始转换规则通道。位20EXTTRIG:规则通道的外部触发转换模式 (External trigger conversion mode for regular channels) 该位由软件设置和清除,用于开启或禁止可以启动规则通道组转换的外部触发事件。 0:不用外部事件启动转换; 1:使用外部事件启动转换。位19:17EXTSEL2:0:选择启动规则通道组转换的外部事件 (External event select for regular group) 这些位选择用于启动规则通道组转换的外部事件 ADC1和ADC2的触发配置如下 000:定时器1的CC1事件 100:定时器3的TRGO事件 001:定时器1的CC2事件 101:定时器4的CC4事件 010:定时器1的CC3事件 110:EXTI线11/ TIM8_TRGO事件,仅大容量产品具有该功能 011:定时器2的CC2事件 111:SWSTART ADC3的触发配置如下 000:定时器3的CC1事件 100:定时器8的TRGO事件 001:定时器2的CC3事件 101:定时器5的CC1事件 010:定时器1的CC3事件 110:定时器5的CC3事件 011:定时器8的CC1事件 111:SWSTART位11ALIGN:数据对齐 (Data alignment) 该位由软件设置和清除。 0:右对齐; 1:左对齐。位8DMA:直接存储器访问模式 (Direct memory access mode) 该位由软件设置和清除。详见DMA控制器章节。 0:不使用DMA模式; 1:使用DMA模式。 注:只有ADC1和ADC3能产生DMA请求。位3RSTCAL:复位校准 (Reset calibration) 该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。0:校准寄存器已初始化; 1:初始化校准寄存器。 注:如果正在进行转换时设置RSTCAL,清除校准寄存器需要额外的周期。位2CAL:A/D校准 (A/D Calibration) 该位由软件设置以开始校准,并在校准结束时由硬件清除。 0:校准完成; 1:开始校准。位1CONT:连续转换 (Continuous conversion) 该位由软件设置和清除。如果设置了此位,则转换将连续进行直到该位被清除。 0:单次转换模式; 1:连续转换模式。位0ADON:开/关A/D转换器 (A/D converter ON / OFF) 该位由软件设置和清除。当该位为0时,写入1将把ADC从断电模式下唤醒。 当该位为1时,写入1将启动转换。应用程序需注意,在转换器上电至转换开始有一个延迟tSTAB。 0:关闭ADC转换/校准,并进入断电模式; 1:开启ADC并启动转换。注:如果在这个寄存器中与ADON一起还有其他位被改变,则转换不被触发。这是为了防止触发错误的转换。ADCON位用于开关AD转换器。CONT位用于设置是否进行连续转换,这里使用单次转换,CONT位为0。CAL和RSTCAL用于AD校准。ALIGN用于设置数据对齐,这里使用右对齐,设置为0。ADC_SMPR1ADC_SMPR2位23:0SMPx2:0:选择通道x的采样时间 (Channel x Sample time selection) 这些位用于独立地选择每个通道的采样时间。在采样周期中通道选择位必须保持不变。 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相连ADC的转换时间由公式计算:Tcovn=采样时间+12.5个周期其中:Tcovn为总转换时间,采样时间是根据每个通道的SMP位的设置来决定的。例如,当ADCCLK=14Mhz的时候,并设置1.5个周期的采样时间,则得到:Tcovn=1.5+12.5=14个周期=1us。ADC规则序列寄存器(ADC_SQR13)ADC_SQR1的L3:0用于存储规则序列的长度,这里只用了1个,所以设置的值为0ADC规则数据寄存器(ADC_DR)ADC状态寄存器(ADC_SR)位4STRT:规则通道开始位 (Regular channel Start flag) 该位由硬件在规则通道转换开始时设置,由软件清除。 0:规则通道转换未开始; 1:规则通道转换已开始。位1EOC:转换结束位 (End of conversion) 该位由硬件在(规则或注入)通道组转换结束时设置,由软件清除或由读取ADC_DR时清除0:转换未完成; 1:转换完成。ADC寄存器编程开启GPIO时钟,设置GPIO模式开启与ADC连接的GPIO时钟,并设置GPIO为模拟输入模式RCC-APB2ENR|=1CRL&=0XFFFFFFF0; /PA0 anolog输入使能ADC1时钟,并设置分频因子使能ADC1的时钟,在使能完时钟之后,进行一次ADC1的复位。接着我们就可以通过RCC_CFGR设置ADC1的分频因子。分频因子要确保ADC1的时钟(ADCCLK)不要超过14Mhz。RCC-APB2ENR|=1APB2RSTR|=1APB2RSTR&=(1CFGR&=(3CFGR|=2CR1&=0XF0FFFF; /工作模式清零ADC1-CR1|=0CR1&=(1CR2&=(1CR2&=(7CR2|=7CR2|=1CR2&=(1SQR1&=(0XFSQR1&=0SMPR2&=0XFFFFFFF0; /通道0采样时间清空 ADC1-SMPR2|=7CR2|=1CR2|=1CR2&1CR2|=1CR2&1SQR3&=0XFFFFFFE0; /规则序列1 通道chADC1-SQR3|=ch; /ch=0ADC1-CR2|=1SR&1DR; /返回adc值ADC库函数编程开启PA口时钟和ADC1时钟,设置PA1为模拟输入RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE ); /使能ADC1通道时钟/PA1 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);复位ADC1,同时设置ADC1分频因子RCC_ADCCLKConfig(RCC_PCLK2_Div6); /设置ADC分频因子6, 72M/6=12ADC_DeInit(ADC1); /复位ADC1初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/ADC工作模式: 独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE; /单通道模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; /单次转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;/转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;/ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1;/顺序进行规则转换的ADC通道的数目ADC_Init(ADC1, &ADC_InitStructure);/初始化外设ADCx的寄存器使能ADC并校准使能AD转换器,执行复位校准和AD校准ADC_Cmd(ADC1, ENABLE); /使能指定的ADC1ADC_ResetCalibration(ADC1);/使能复位校准 while(ADC_GetResetCalibrationStatus(ADC1);/等待复位校准结束ADC_StartCalibration(ADC1); /开启AD校准while(ADC_GetCalibrationStatus(ADC1); /等待校准结束读取ADC值设置规则序列1里面的通道、采样顺序,以及通道的采样周期,然后启动ADC转换。设置规则序列通道以及采样周期的函数是:void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel,uint8_t Rank, uint8_t ADC_SampleTime);这里是规则序列中的第1个转换,同时采样周期为239.5,所以设置为:ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );ADC_SoftwareStartConvCmd(ADC1, ENABLE);/使能指定的ADC1的软件转换启动功能开启转换后就可以获取ADC转换结果,方法是:ADC_GetConversionValue(ADC1);ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );/ADC1,ADC通道,采样时间为239.5周期 ADC_SoftwareStartConvCmd(ADC1, ENABLE);/使能ADC1的软件转换启动功能while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ); /等待转换结束return ADC_GetConversionValue(ADC1);/返回最近一次AD

温馨提示

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

评论

0/150

提交评论