STM32之ADC配置,ADC_Mode模式理解

摘要:
对于STM32,使用ADC时需要配置几个参数。因此,如果您不需要ADC同步或只使用一个ADC,则应将其设置为独立模式。第二个参数是ADC_ScanConvMode,此处设置为DISABLE。ADC_InitStructure.AADC_ScanConvMode=DISABLE;如果仅使用一个信道,则DISABLE(禁用)为OK(正常)。如果使用多个信道,必须将其设置为ENABLE(启用)。第四个参数是ADC_ExternalTrigConv,即选择外部触发模式。有几种类型:ADC_ExternalTrigConv_T1_CC1、ADC_ExternalTrigConv_T1_CC2、ADC_ExtraTrigConw_T2_CC2、ADC ExternalTrigConv_T3_T、ADC_ ExternalTrigConv_T4_CC4。定时器输出触发麻烦,需要设置相应的定时器。第五个参数是ADC_DataAlign,在此处设置为ADC _ DataAlign _ Right alignment。

对于STM32,在使用ADC的时候需要配置几个参数。

  1. 第一个参数是ADC_Mode,这里设置为独立模式:
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

在这个模式下,双ADC不能同步,每个ADC接口独立工作。所以如果不需要ADC同步或者只是用了一个ADC的时候,就应该设成独立模式了。

  1. 第二个参数是ADC_ScanConvMode,这里设置为DISABLE。
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;

如果只是用了一个通道的话,DISABLE就可以了,如果使用了多个通道的话,则必须将其设置为ENABLE。

  1. 第三个参数是ADC_ContinuousConvMode,这里设置为ENABLE,即连续转换。如果设置为DISABLE,则是单次转换。两者的区别在于连续转换直到所有的数据转换完成后才停止转换,而单次转换则只转换一次数据就停止,要再次触发转换才可以。所以如果需要一次性采集1024个数据或者更多,则采用连续转换。

  2. 第四个参数是ADC_ExternalTrigConv,即选择外部触发模式。这里只讲三种:

  • 第一种是最简单的软件触发,参数为ADC_ExternalTrigConv_None。设置好后还要记得调用库函数:
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);

这样触发才会启动。

  • 第二种是定时器通道输出触发。共有这几种:
ADC_ExternalTrigConv_T1_CC1、
ADC_ExternalTrigConv_T1_CC2、
ADC_ExternalTrigConv_T2_CC2、
ADC_ExternalTrigConv_T3_T 、
ADC_ExternalTrigConv_T4_CC4 、

定时器输出触发比较麻烦,还需要设置相应的定时器。ADC_ExternalTrigConv_T2_CC2触发为例设置相应的定时器:

void TIM2_Configuration(void){

		TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
		TIM_OCInitTypeDef         TIM_OCInitStructure;
		
		TIM_TimeBaseStructure.TIM_Prescaler = 4;
		TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
		TIM_TimeBaseStructure.TIM_Period = 0XFF;
		TIM_TimeBaseStructure.TIM_ClockDivision = 0;
		TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
		TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
		
		TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
		TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
		TIM_OCInitStructure.TIM_Pulse = 0X7F;
		TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
		TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;        
		TIM_OC2Init(TIM2, &TIM_OCInitStructure);
		
		TIM_Cmd(TIM2, ENABLE);
		
		TIM_CtrlPWMOutputs(TIM2, ENABLE);
}

这样设置之后就可以用定时器2的输出触发了,至于触发的周期,设置TIM2的时间即可。这里不再赘述。

  • 第三种是外部引脚触发,对于规则通道,选择EXTI线11和TIM8_TRGO作为外部触发事件;而注入通道组则选择EXTI线15和TIM8_CC4作为外部触发事件。
  1. 第五个参数是ADC_DataAlign,这里设置为ADC_DataAlign_Right右对齐方式。建议采用右对齐方式,因为这样处理数据会比较方便。当然如果要从高位开始传输数据,那么采用左对齐优势就明显了。
  2. 第六个参数是ADC_NbrOfChannel,顾名思义:通道的数量。要是到多个通道采集数据的话就得设置一下这个参数。此外在规则通道组的配置函数中也许将各个通道的顺序定义一下,如:
      ADC_RegularChannelConfig(ADC1,ADC_Channel_13,1,ADC_SampleTime_13Cycles5);
      ADC_RegularChannelConfig(ADC1,ADC_Channel_14,2,ADC_SampleTime_13Cycles5);

多通道数据传输时有一点还要注意:若一个数组为ADC_ValueTab[4],且设置了两个通道:通道1和通道2,则转换结束后,ADC_ValueTab[0]ADC_ValueTab[2]存储的是通道1的数据,而ADC_ValueTab[1]ADC_ValueTab[3]存储的是通道2的数据。如果数组容量大则依次类推

免责声明:文章转载自《STM32之ADC配置,ADC_Mode模式理解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux交换区使用过多导致的性能问题kerberos创建用户和keytab文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

USB应用开发笔记之一:STM32上实现USB主机读写U盘

  在项目应用中,经常会有对外交换数据的需求。USB接口读写U盘无疑是一种颇为方便的选择。在这一篇中,我们就来讨论如何在STM32上实现USB主机读写U盘文件的方法。 1、应用概述   在我们的产品上有这样一个需求,希望通过大容量的U盘存取数据。我们来分析一下这个需求的具体内容。   首先在硬件上我们需要有相应的USB端口,这一点在产品设计时就已经考虑并实...

【物联网智能网关16】成功移植SQLite(STM32 .NET MF平台)

前言 .NET Micro Framework系统官方代码是不支持任何数据库的,这对一些具有用户管理的Web Server、RFID数据采集和复杂的手持机应用来说是非常不方便的。 很早就知道了SQLite,但是一直没有深入研究,随着目前移植的.NET Micro Framework系统越来越成熟,用户对数据库支持的呼声也越来越高,迫切需要一个数据库平台了。...

STM32F1库函数初始化系列:DMA—ADC采集

1 void ADC_Configure(void) 2 { 3 ADC_InitTypeDef ADC_InitStructure; 4   GPIO_InitTypeDef GPIO_InitStructure; 5 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); 6   RCC_AHBPer...

基于STM32的USB枚举过程学习笔记(转)

之前使用ST官方的库以及网络的资料,完成了使用USB HID类进行STM32和PC机的通讯。由于其他原因并没有深入的分析,虽然实现了功能,但是关于USB设备的枚举,以及具体的通讯方式都没有清晰的概念,所以现在回头重新学习USB相关知识。主要参考资料是《圈圈教你玩USB》、USB枚举过程图解,ST官方的USB HID例程。 一,USB数据包    1.   ...

STM32 串口功能 库函数 详解和DMA 串口高级运用(转载)

数据传输时要从支持那些相关的标准?传输的速度?什么时候开始?什么时候结束?传输的内容?怎样防止通信出错?数据量大的时候怎么弄?硬件怎么连接出发,当然对于stm32还要熟悉库函数的功能 具起来rs232和485电平的区别硬件外围芯片,波特率(反映传一位的时间),起始位和停止位,数据宽度,校验,硬件流控制,相应连接电脑时的接口怎么样的。配置,使用函数,中断,查...

记STM32F030多通道ADC DMA读取乱序问题

问题描述通过 uint16_t ConvData[8]保存DMA搬运的ADC转换数值,但是这个数组数值的顺序总是和ADC不是顺序对应的。比如用7个通道的ADC,当设置ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward,是对应顺序是:0->0,1->7,2->6...