STM32学习之ADC

发布者:ShimmeringStar最新更新时间:2024-10-15 来源: cnblogs关键字:STM32  ADC  参数 手机看文章 扫描二维码
随时随地手机看文章

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

(1)   第一个参数是ADC_Mode,这里设置为独立模式:


ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;


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


(2)   第二个参数是ADC_ScanConvMode,这里设置为DISABLE。


ADC_InitStructure.ADC_ScanConvMode = DISABLE;


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


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


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


1、第一种是最简单的软件触发,参数为ADC_ExternalTrigConv_None。设置好后还要记得调用库函数:


ADC_SoftwareStartConvCmd(ADC1, ENABLE);


这样触发才会启动。


2、第二种是定时器通道输出触发。共有这几种: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的时间即可。这里不再赘述。


3、第三种是外部引脚触发,对于规则通道,选择EXTI线11和TIM8_TRGO作为外部触发事件;而注入通道组则选择EXTI线15和TIM8_CC4作为外部触发事件。


(5)   第五个参数是ADC_DataAlign,这里设置为ADC_DataAlign_Right右对齐方式。建议采用右对齐方式,因为这样处理数据会比较方便。当然如果要从高位开始传输数据,那么采用左对齐优势就明显了。


(6)   第六个参数是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的数据。如果数组容量大则依次类推。


补充一点:在使用DMA传输数据的时候,需要设置外设地址和存储器地址,外设地址当然就是ADC的地址了,而存储器的地址如果使用8位数据的话,存储器必须定义为8位缓冲区;如果使用16位数据格式的话,存储器则为16位缓冲器,不可定义为32位或更多,否则,数据将出错。


关键字:STM32  ADC  参数 引用地址:STM32学习之ADC

上一篇:iar下的stm32启动代码分析
下一篇:STM32多机通信

推荐阅读最新更新时间:2026-03-20 11:15

高速模数转换器动态参数的定义和测试
高速模数转换器(ADC)的参数定义和描述如表1所示。 表1 动态参数定义 动态参数 描 述 信噪比(SNR) SNRdB=6.02 N+1.763 信号与噪声+失真之比(SINAD) SINADdB=20 log10(ASIGNAL /ANOISE ) 有效位数(ENOB) ENOB=(SINAD-1.763)/6.02 总谐波失调(THD) THDdBc=20 log10(√(VHD·2 2+VHD·3 2+VHD·N 2)/V 无杂散动态范围(SFDR) SFDE是信号基波幅度的有效值与最大谐 波分量的效值之比,以db为单位 双音互调失真(TTIMD) TTIMDdb=
[模拟电子]
高速模数转换器动态参数的定义和测试
摘要: 随着集成工艺的发展,高速模数转换器的性价比不断提高,其应用范围也越来越广,特别是在通信领域,高速ADC的发展为软件无线电技术奠定了基础。本文主要讨论高速ADC测试方法,以MAXIM新一代3V、10位高速模数转换器的测试为基础,详细讨论硬件的配置、软件工具和用于数据采样和分析的仪器。 关键词: ADC 动态参数 高速模数转换器(ADC)的参数定义和描述如表1所示。 表二 动态参数定义 动态参数 描 述 信噪比(SNR) SNRdB=6.02 N+1.763 信号与噪声+失真之比(SINAD) SINADdB=20 log10(ASIGNAL /ANOISE ) 有效位数(ENO
[模拟电子]
stm32的五个时钟源参数设置经验
一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 二、在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法:如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:
[单片机]
<font color='red'>stm32</font>的五个时钟源<font color='red'>参数</font>设置经验
如何为STM32编程节省代码空间?在IAR中配置CRC参数有窍门
前言 STM32全系列产品都具有CRC外设,对CRC的计算提供硬件支持,为应用程序节省了代码空间。CRC校验值可以用于数据传输中的数据正确性的验证,也可用于数据存储时的完整性检查。在IEC60335中,也接受通过CRC校验对FLASH的完整性进行检查。在对FLASH完整性检查的应用中,需要事先计算出整个FLASH的CRC校验值(不包括最后保存CRC值的字节),放在FLASH的末尾。在程序启动或者运行的过程中重新用同样的方法计算整个FLASH的CRC校验值,然后与保存在FLASH末尾的CRC值进行比较。 EWARM从v5.5版本之后开始支持STM32芯片的CRC计算。前面所说的计算整个FLASH的CRC校验值并保存在FLASH末
[单片机]
如何为<font color='red'>STM32</font>编程节省代码空间?在IAR中配置CRC<font color='red'>参数</font>有窍门
担心STM32时钟PLL各参数配错吗?
有些朋友不理解为什么STM32时钟要先倍频N倍,再分频?你会担心这个值太大吗? 1写在前面 STM32时钟的功能,可以说是越来越强大了。 从各个系列的时钟树可以看得出来,最早F1系列的时钟功能相对比较简单,到这后面H7、G0的时钟越来越丰富。 今天讲述一下其中的PLL环节。 2关于PLL 什么是PLL? PLL:Phase Locked Loop锁相环。 PLL用于振荡器中的反馈技术,通常需要外部的输入信号与内部的振荡信号同步。 一般的晶振由于工艺与成本原因,做不到很高的频率,而在需要高频应用时,由相应的器件VCO,实现转成高频,但并不稳定,故利用锁相环路就可以实现稳定且高频的时钟信号。 ---来自百度百科 每一块STM3
[单片机]
担心<font color='red'>STM32</font>时钟PLL各<font color='red'>参数</font>配错吗?
stm32 ,DMA,adc,fft. . .(基于库函数)
用TIM2定时器触发adc,DMA采集之后进行fft转换. fft是一种快速傅里叶算法. 官方给的256点运算时间仅需要0.362ms,1024点也只要2.138ms(72mHz) 傅里叶变换就像是将一桶各个颜色混杂在一起的油漆分离出来.并将每种颜料的含量也计算出来. 而各种颜色代表了各种频率,含量代表幅值.(个人的浅显理解) 了解个差不多就可以开始了~ 先将fft的官方库添加到自己的工程.(https://pan.baidu.com/s/1Gw1NXCa3q8SHxc-E1H-6yw 提取码:m1et) 添加之后可以看到官方提供了两种快速傅里叶变换函数,分别为256点和1024点.这里视自己情况进行使用.不过要注意在这之前要调用
[单片机]
STM32实战】ADC详解:模拟信号采集到数据处理全程指南
一、ADC 是什么?为什么需要它? 在嵌入式系统中,我们常遇到需要处理模拟信号的场景: 光敏电阻随光线变化的电压值 电位器旋转时的电阻变化量 温度传感器输出的电流信号 这些连续变化的模拟量无法直接被 STM32 的数字电路处理,而 **ADC(模数转换器)** 就是搭建 “模拟世界” 与 “数字世界” 的桥梁。 STM32 的 ADC 模块能将 0~3.3V 的模拟电压转换为 12 位数字值(0~4095),精度高、速度快,是传感器数据采集的核心组件。 二、STM32 ADC 核心特性(以 F103 系列为例) 1. 关键参数 分辨率:12 位(可识别 3.3V/4096≈0.8mV 的电压变化)。 转换速度:最大 1MHz
[单片机]
STM32 多通道ADC连续采集之数据到内存 DMA传输
DMA的英文Direct memory access,意思就是传输将数据从一个地址空间复制到另一个地址空间,设置好后自动传输而不需要处理器参与。STM32F030F4只有DMA1,DMA1有5个通道,要想使用必须进行一些设置。 下面以ADC多通道采集为例,大致分3步: 1. GPIO的配置。该配置主要设置ADC采集涉及的IO口,本例设置ADC连接9个IO口进行模拟量采集。 2. ADC的配置。设置多通道采集速率、连续转换模式、使能和DMA通道的连接等。注意该芯片只有ADC1。 3. DMA的配置。设置DMA的开启、源地址、目标地址等。该芯片只有DMA1,但有5个通道,本例用通道1。 下面是mai
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved