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多机通信

推荐阅读最新更新时间:2024-11-08 10:23

浅谈QSPI的特点以及QSPI的三种工作模式
意法半导体STM32F7系列MCU采用高性能的ARM Cortex-M7核心,借助ST的ART Accelerator™和L1缓存,STM32F7微控制器可提供Cortex-M7内核的最高理论性能,而无论代码是从嵌入式闪存还是由外部存储器执行的:1082 CoreMark / 462 DMIPS在216 MHz f CPU。带有新外围设备的智能架构。可利用STM32系列丰富的外设资源来外扩SRAM芯片。STM32F7支持QSPI. 意法半导体MCU STM32F7系列释放了Cortex-M7内核,AXI和多AHB总线矩阵,用于互连内核,外围设备和存储器。具有高达2MB的嵌入式闪存,在某些设备上具有读-写功能。两个用于以太网的通
[单片机]
STM32程序添加printf函数后无法运行的解决方法(串口实验)
标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数. 例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { USART_SendData(USART1, (uint8_t) ch); while (USART_GetFlagStatus(
[单片机]
<font color='red'>STM32</font>程序添加printf函数后无法运行的解决方法(串口实验)
STM32学习笔记之时钟分析
本文结合网上的两篇时钟分析文章,并结合本人的理解来分析STM32的时钟系统。 众所周知,一个微控制器或处理器的运行必须要依赖周期性的时钟脉冲来驱动,通常是通过外接晶振来实现的。在学习单片机(51系列,AVR系列,PIC系列)的过程中,只要设定了外接晶振,我们就只关心的时序图,无需再进行时钟的配置,而STM32微控制器的时钟树则是可配置的,其时钟输入源与最终达到外设处的时钟速率不再有固定的关系,本文将来详细解析STM32微控制器的时钟树。 在官方提供的STM32参考手册或数据手册中,提供了如下的时钟树结构图: 为了方便分析,简化为如下的时钟树, 由图可知:STM32主要有5个时钟源,分别为HSI、HSE、LSI、LSE、PL
[单片机]
<font color='red'>STM32</font>学习笔记之时钟分析
两种万用表使用的方法与注意事项
  万用表可用来测量直流电压、直流电流、交流电压、电阻等,有的万用表还可以测量交流电流、分贝、功率、电感、电容、晶体管参数等。万用表有指针万用表和数字万用表两种。指针万用表结构简单、价格低。数字万用表是在指针万用表的基础上发展起来的,其使用简单。本文介绍万用表使用及使用注意事项。   指针式万用表的使用方法   1、指针万用表使用准备   指针万用表应平放在工作位置,使用前应先检查指针是否指在最左端零处,否则可用小旋具(小螺丝刀)旋动表盘中心调节螺钉,使指针指零。测量前先检查测试表笔插的位置,红表笔应接红色“ ”插口,黑表笔应接黑色“-”插口。   将量程转换开关旋至对应量程。有两个旋钮开关的表,先旋动项目选择开关于所测项目挡
[测试测量]
两种万用表使用的方法与注意事项
STM32的开漏电路与推挽输出
开漏结构 所谓开漏电路概念中提到的“漏”就是指MOS FET的漏极。同理,开集电路中的“集”就是指三极管的集电极。开漏电路就是指以MOS FET的漏极为输出的电路。一般的用法是会在漏极外部的电路添加上拉电阻。完整的开漏电路应该由开漏器件和开漏上拉电阻组成。如图1所示: 图1 组成开漏形式的电路有以下几个特点: 1. 利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。如图1。 2. 可以将多个开漏输出的Pin,连接到一条线上。形成“与逻辑”关系。如图1,当PIN_A、PIN_B、PIN_C任
[单片机]
<font color='red'>STM32</font>的开漏电路与推挽输出
STM32 I/O的耐压问题,中断问题
STM32 I/O的耐压问题 STM32 I/O的耐压问题 STM32并不是如手册所言,绝大部都是耐5V电压的,具体的要参考数据手册——我就是轻信了网络上话,犯错误了。 STM32f103c8的I/O耐压分布是这样的: 1~19 :3.3V 20~22 :5.0V 23~24 :3.3V 25~34 :5.0V 35~36 :3.3V 37~40 :5.0V 41 :3.3V 42~43 :5.0V 44 :3.3V 45~46 :5.0V 47~48 :3.3V 非5V耐压I/O,输入5V时,有很多种方法。简单的可以通过分压。
[单片机]
索尼小屏新机参数曝光 或为Z4 Compact
     近日外媒phonearena报道索尼一款型号为“E5663”的智能手机设备出现在了GFXBench和Geekbench上,该设备有着目前主流旗舰级别的配置,或为索尼Xperia Z4 Compact。 索尼E5663(图片Geekbench) 索尼E5663参数(图片引自BFXBench)     从网站上该设备的详细数据可以看出,该机正面为一块1920x1080像素的4.6英寸屏幕,搭载一颗联发科MT6795处理器,辅以3GB手机运行内存和16GB机身存储空间,有着一颗1300万像素主摄像头,运行Android 5.0 Lollipop系统。   编辑点评:索尼Compact系列机型一直有着旗舰级别的配置
[手机便携]
STM32开漏,推挽的知识
有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别 有关推挽输出、开漏输出、复用开漏输出、复用推挽输出 以及上拉输入、下拉输入、浮空输入、模拟输入的区别 最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN模拟输入 (2)GPIO_Mode_IN_FLOATING浮空输入 (3)GPIO_Mode_IPD下拉输入 (4)GPIO_Mode_IPU上拉输入 (5)GPIO_Mode_Out_OD开漏输出 (6)GPIO_Mode_Out_PP推挽输出 (7)GPIO_Mode_AF_OD复用开漏输出 (8)GPIO_M
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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