STM32学习笔记之ADC

发布者:快乐的舞蹈最新更新时间:2015-08-12 来源: eefocus关键字:STM32  学习笔记  ADC 手机看文章 扫描二维码
随时随地手机看文章
一、基础知识

1.  18个通道,可测16个外部和2个内部信号源,可设置成单侧、连续、扫描、间断模式执行

2.  12位精度

3.   扫描模式,通道0到通道n的自动转化

4.  自校准

5.  按通道配置采样时间

6.  间断模式?

7.  双ADC模式?

8.  供电要求2.4~3.6V

9.  输入范围0~3.6V

二、功能描述

1.  通道选择:

     STM32的每个ADC模块通过内部的模拟多路开关,可以切换到不同的输入通道并进行转换。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。

    有2种划分转换组的方式:规则通道组和注入通道组。通常规则通道组中可以安排最多16个通道,而注入通道组可以安排最多4个通道。

    在执行规则通道组扫描转换时,如有例外处理则可启用注入通道组的转换。规则转换和注入转换均有外部触发选项,规则通道转换期间有DMA请求产生,而注入转换则无DMA请求,需要用查询或中断的方式保存转换的数据。

    一个不太恰当的比喻是:规则通道组的转换好比是程序的正常执行,而注入通道组的转换则好比是程序正常执行之外的一个中断处理程序。 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规则组中转换的总数写入ADC_SQR1寄存器的L[3:0]位中。
     注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入组里的转换总数目写入ADC_JSQR寄存器的L[1:0]位中。
     如果规则转换已经在运行,为了在注入转换后确保同步,所有的ADC(主和从)的规则转换被停止,并在注入转换结束时同步恢复,见图示。

STM32 <wbr><wbr>ADC的规则通道和注入通道有什么区别

 

2.  单次转换模式:

     单次转换模式里,ADC 只执行一次转换。

3.  连续转换模式:

     在连续转换模式中,当前面ADC 转换一结束马上就启动另一次转换。

4.  扫描模式:

    此模式用来扫描一组模拟通道。

5.  注入模式管理:

(1)触发注入。详见参考手册

(2)自动注入。如果设置了 JAUTO 位,在规则组通道之后,注入组通道被自动转换。这可以用
        来转换在ADC_SQRx 和ADC_JSQR 寄存器中设置的多至20 个转换序列。
        在此模式里,必须禁止注入通道的外部触发。

6.  间断模式:

(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 必须避免同时为规则和注入组设置间断模式。间断模式只能作用于一组转换。

7.  双ADC模式

8.  数据对齐
ADC_CR2 寄存器中的ALIGN位选择转换后数据储存的对齐方式。数据可以左对齐或右对齐,如图146 和图147 所示。
注入组通道转换的数据值已经减去了在ADC_JOFRx 寄存器中定义的偏移量,因此结果可以是一个负值。SEXT 位是扩展的符号值。
对于规则组通道,不需减去偏移值,因此只有12 个位有效。
数据右对齐:
注入组
SEXT SEXT SEXT SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
规则组
0 0 0 0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
数据左对齐:

注入组
SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0
规则组
D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0

三、 程序设计与软件配置

1.

   void ADC_Config(void)
{
  ADC_InitTypeDef ADC_InitStructure;//定义ADC初始化结构体变量
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在独立模式
  ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使能扫描
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC转换工作在连续模式
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由软件控制转换
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换数据右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道数目为1
  ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
  ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28Cycles5);
  //ADC1选择通道14,规则组采样顺序(1~16),采样时间239.5个周期
  ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA
  ADC_Cmd(ADC1, ENABLE);//使能ADC1
  ADC_ResetCalibration(ADC1); //重置ADC1校准寄存器
  while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成
  ADC_StartCalibration(ADC1);//开始ADC1校准
  while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成
  ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换
}

关键字:STM32  学习笔记  ADC 引用地址:STM32学习笔记之ADC

上一篇:STM32单片机 GPIO寄存器
下一篇:STM32系列ADC采样频率及相应时间的确定

推荐阅读最新更新时间:2024-03-16 14:28

STM32的GPIO工作方式与基本结构
GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用为外设功能引脚,比如串口。相关文章:学习STM32单片机,绕不开的串口。 GPIO基本结构 每个GPIO
[单片机]
<font color='red'>STM32</font>的GPIO工作方式与基本结构
STM32上移植FreeRTOS
首先在网上看到大部分移植FreeRTOS 都是选择修改他的启动文件,我个人感觉这样不是很好,毕竟是汇编,当你采用不同的芯片型号时,又要修改不同的xx.S文件,所以我选择修改FreeRTOSconfig.h文件。 1. 下载STM32官方源码:我的是基于V3.5的官方库(有工程模板的可以不用)。 下载FreeRTOS的源码 http://download.csdn.net/detail/jb8154989/6033207 2. 搭建好一个MDK的工程,我这里采用的是野火的工 程, http://download.csdn.net/my/uploads 3. 在工程模板目录下新建一个FreeRTOS文件夹,在FreeRTOS文件夹
[单片机]
<font color='red'>STM32</font>上移植FreeRTOS
STM32 CRH和CRL记录
在进行IO口方向设置的时候经常见到如下设置方式 //IO方向设置 PC11 #define MPU_SDA_IN() {GPIOC- CRH&=0XFFFF0FFF;GPIOC- CRH|=8 12;} #define MPU_SDA_OUT() {GPIOC- CRH&=0XFFFF0FFF;GPIOC- CRH|=3 12;} 先把CRH和CRL管理 模式对照表贴出来进行说明 从同种可以看出CNF表示是输入输出不同模式下的状态,CNF代表的位为31:30或27:26或23:22……管理输入输出模式的是MODE位分别为29:28或25:24或21:20………….,在不同IO口上CNF和MODE共同占用一个十六进制的’
[单片机]
STM32初学笔记---延时函数及u16、u32、u8
在编写流水灯程序时发现,和对之前用的51单片机所用的普通软件延时函数有所不同,51的普通软件延时函数我们一般是这样编写的: #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char void delayms(uint xms) { uint i,j; for(i=xms;i 0;i--) for(j=110;j 0;j--); } 然而我们在对STM32利用库函数进行编程时采用此延时函数则完全行不通,而是采用下面的延时函数 #include stm32f10x.h void delay(u16 x)
[单片机]
STM32实验一:GPIO之流水灯
前面写过一篇关于STM32单片机的GPIO的文章,本来是打着从实用角度来做的实验,但是发现不积跬步无以至千里啊,咱们从头开始,先做一个最简单的,入门级的,单片机系统中的hello world,流水灯实验! 我手中有一个神舟3的开发板,我就用这个板子来做实验,板子中的实验一共用到4个LED灯来做流水灯的实验,这里我们也用这4个灯,他们分别是GPIOF中的6、7、8、9这4个。 1、首先我们复制我们之前做过的模板工程到一个新建文件夹中,(如,你可以取个名字叫流水灯实验的文件夹)神舟开发板的例程中在项目中添加了两个文件,分别是led.c和led.h,这是一种习惯,每做一个项目的时候都在其中添加一个.c和对应的.h文件,这样可以是
[单片机]
<font color='red'>STM32</font>实验一:GPIO之流水灯
基于STM32的语音导览系统的设计
景点语音导览主要有以下几种方式:一种是通过全球定位系统(GPS)的用户终端接收工作卫星的导航信息,从而解算出车辆的经纬度信息,进而计算出实时坐标,将其与景点坐标相比较,当车辆驶入景点一定距离范围内时,不用人工干预,系统自动播报景点语音信息;另一种是对车轮轴的转角脉冲进行计数,将计数值和预置值对比,即可确定播放时刻,达到准确播放景点语音信息的目的;第三种方案是利用无线射频识别技术,在每一个景点范围内设置一个具有唯一ID 的射频发射器,采用间歇工作方式发射信号,当旅游列车即将到达景点时,车载系统接收到射频发射器信号并解码出景点的ID 号,由系统控制自动播放对应编号的景点语音信息。由于景点自然环境的复杂性,第一种方式难以满足系统要求;第
[电源管理]
基于<font color='red'>STM32</font>的语音导览系统的设计
ST全新触摸屏控制器芯片功耗低、响应快
2008年5月8日,意法半导体推出一款四线阻性触摸屏控制器STMPE811。新产品以自主控制功能为特色,最大限度地降低应用对主处理器的要求,嵌入式系统设计工程师可藉此降低CPU时钟周期的负荷,缓解处理器在性能、功率和响应时间上承受的压力。 STMPE811内置设备包括一个用于实现高分辨率的12位模数转换器和确保位置跟踪平顺的128 x 32位FIFO数据缓冲电路。此外,STMPE811还具有精确的定位功能和支持多个感应窗口的窗口屏蔽功能。由于采用特殊的低功耗设计技术,新产品的工作电流低于1mA,待机电流小于1μA,睡眠模式的功耗仅有150nA。 在一个尺寸紧凑的3 x 3mm QFN-16封装内整合如此
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved