STM32L4模数转换模块(ADC)介绍
- 格式:pdf
- 大小:790.21 KB
- 文档页数:43
STM32各模块总结STM32是STMicroelectronics(意法半导体)公司推出的一款32位ARM内核的微控制器系列。
它广泛应用于工业自动化、消费电子、医疗设备、智能家居等领域。
STM32系列拥有丰富的功能模块,下面将对常用的几个模块进行总结。
1.GPIO模块:GPIO是通用输入输出模块,用于连接和控制外部设备。
STM32的GPIO模块支持多种输入输出模式,包括输入、输出、开漏输出、复用功能等。
它支持中断和事件触发,并且可以配置外部信号中断触发的方式。
GPIO模块是STM32的基础模块,可以实现与其他模块的通信和控制。
2.UART模块:UART是通用异步收发传输模块,用于与其他设备进行串行通信。
STM32的UART模块支持多种传输速率和数据位数,可以实现可靠的数据传输。
它还支持硬件流控制功能,可以实现数据的流畅传输。
UART模块可以用于与电脑、传感器、显示屏等外部设备进行通信。
3.ADC模块:ADC是模数转换器模块,用于将模拟信号转换为数字信号。
STM32的ADC模块支持多种输入电压范围和精度,可以实现高精度的模拟信号采集。
它还支持多通道采集和DMA传输功能,提高了数据采集的效率。
ADC模块可以用于传感器的数据采集、模拟信号的处理等应用。
4.TIM模块:TIM是定时器模块,用于产生定时和脉冲信号。
STM32的TIM模块支持多种定时器模式和计数模式,可以实现多种定时、计数和PWM输出功能。
它还支持中断和事件触发功能,可以实现精确的时间控制。
TIM模块广泛应用于PWM调速、定时测量、脉冲计数等应用。
5.SPI模块:SPI是串行外设接口模块,用于与外部设备进行高速的全双工串行通信。
STM32的SPI模块支持多种工作模式和数据传输速率,可以实现可靠的数据传输。
它还支持硬件流控制功能,可以实现数据的流畅传输。
SPI模块常用于与存储器、传感器、显示屏等外部设备进行通信。
6.I2C模块:I2C是双线串行总线模块,用于与多个外部设备进行通信。
STM32的ADC设置步骤STM32的ADC(Analog-to-Digital Converter)是一种用于将模拟信号转换为数字信号的外设。
在使用STM32的ADC之前,需要进行一系列的设置和配置。
以下是STM32的ADC设置步骤的详细说明:1.硬件连接:首先,将模拟信号连接到STM32的ADC引脚。
具体连接方式取决于所使用的STM32系列和芯片型号,可以参考芯片的数据手册。
2.时钟设置:ADC外设的时钟源需要配置和使能。
首先,选择一个适合的时钟源,通常使用主时钟源或外部时钟源。
然后,配置ADC时钟分频器,以确保时钟频率适合ADC的要求。
最后,使能ADC时钟。
3.ADC基本设置:完成时钟设置后,可以开始进行ADC的基本配置,包括设置ADC模式、采样时间、分辨率等。
-ADC模式:选择一种适合应用场景的ADC模式,常见的有单次转换模式和连续转换模式,前者适用于一次性转换,后者适用于连续转换。
-采样时间:根据输入信号的特性和采样速率,选择合适的采样时间。
采样时间越长,精度越高,但转换速度会降低。
-分辨率:设定ADC的分辨率,一般有8位、10位、12位等选项。
分辨率越高,转换精度越高,但转换时间会增加。
4.通道选择:在开始进行转换之前,需要选择要转换的ADC通道。
STM32的不同型号有不同的ADC通道数量和配置,可以通过相关寄存器设置选择。
参考芯片的数据手册,确定要使用的ADC通道。
5.触发源设置:可以通过外部触发源或软件触发来启动ADC转换。
外部触发源通常为其他硬件中断或定时器,配置相关的寄存器使能外部或软件触发转换。
6.DMA设置:如果需要使用DMA(Direct Memory Access)来传输ADC转换结果,需要进行DMA的相关设置。
首先,使能DMA。
然后配置DMA通道和传输方向。
最后,启动DMA传输。
7.中断设置:8.校准:在进行转换之前,需要进行ADC的校准。
校准过程会自动由硬件完成,可以通过设定寄存器使能自动校准。
stm32 adc工作原理
STM32 ADC工作原理
STM32微控制器的ADC(模拟数字转换器)模块可以将模拟
信号转换为数字信号。
ADC是一种重要的外设,用于从外部
传感器或其他模拟源获取数据。
ADC模块的工作包括采样、保持、量化和序列转换等过程。
首先,ADC模块会接收来自外部模拟信号的输入。
这些信号
可以是来自温度传感器、光敏电阻或其他传感器的模拟信号。
接下来,ADC模块会将输入信号通过采样和保持电路进行采样。
采样是指将模拟信号转换为相应的电压值。
保持电路将输入信号的电压保持在一个稳定的水平上,以便进行后续的处理。
然后,ADC模块将采样和保持的电压值进行量化。
量化是指
将连续的模拟信号转换为离散的数字信息。
ADC模块使用一
定的分辨率来表示模拟信号,例如12位或16位。
最后,ADC模块将量化后的数字信息通过序列转换器进行处理。
序列转换器将多个信道的数字信息按照一定的顺序进行转换和存储。
转换的结果可以存储在寄存器中供CPU读取,或
者被DMA直接传输到内存中。
总结来说,STM32 ADC工作原理包括采样、保持、量化和序
列转换等步骤,将外部模拟信号转换为数字信息,以供微控制器进行进一步处理和分析。
stm32相关笔记——ADC部分我们在学习⼀门技术的时候,应该对它的理论部分有所了解,然后才能在实践中进⼀步加深理解,进⽽掌握。
对于stm32来说,我认为学习的时候应该先仔细阅读相关的参考⼿册,然后再动⼿实践,这样才能理解得更加透彻,掌握得更加牢固!今天记录⼀下我学习stm32的ADC部分的了解。
1.介绍⼩结:stm32的ADC有18个通道(16个外部通道+2个内部通道),有单次、连续、扫描和间断四种模式,ADC的结果可以左对齐和右对齐的⽅式存储在16位的数据寄存器中(⼀般我们都是使⽤右对齐的⽅式)2、特征3、框图框图应该是最重要的部分了,理解了框图,对这个外设的理解就⽐较透彻了。
①模拟⾄数字转换器中有两个通道,⼀个是注⼊通道,⼀个是规则通道,对应的转换结果也是存储到注⼊通道数据寄存器和规则通道数据寄存器中(都是16位的);②注⼊通道数据寄存器有4个,规则通道数据寄存器只有1个,规则通道最多可以转化16个通道的数据,⽽结果都是存储在⼀个规则通道数据寄存器中,为了避免数据丢失,可以采⽤DMA搬运数据,提⾼效率。
③触发注⼊通道开始转化的外部触发信号有8种,如图所⽰,其中TIM8_CH4及其重映射只存在于⼤容量的产品中。
④类似于注⼊通道,触发规则通道的外部触发信号也有8种,如图所⽰,其中TIM8_TRGO及其重映射也只存在于⼤容量产品中。
⑤以上的两点只针对ADC1和ADC2,ADC3的触发信号有所不同,如图所⽰:⑥转换的过程如图,ADCx_IN0~ADCx_IN15共16个外部通道,通过GPIO端⼝将模拟量传达到模拟⾄数字转化器中的注⼊通道或者规则通道,另外还有两个内部通道温度传感器和V REFINT,同样也可以将模拟量传送到模拟⾄数字转化器中的注⼊通道或者规则通道,注⼊通道最多可以转换4个通道的模拟量,转换结果存储到注⼊通道数据寄存器中,转换完成后会产⽣JEOC标志位,规则通道最多可以转换16个通道,转换结果存储到规则通道数据寄存器中,转换完成后会产⽣EOC标志位。
STM32模数转换的应用解析简介本文将对STM32单片机中的模数转换功能进行详细解析。
模数转换是一种将模拟信号转换为数字信号的技术,在许多应用领域都有广泛的应用,包括数据采集、传感器读取等。
STM32的模数转换功能STM32单片机集成了强大的模数转换功能,常用的型号包括STM32F4和STM32F7系列。
这些单片机具备多个模数转换通道,能够同时进行多通道的模拟量采集。
模数转换流程模数转换的流程非常简单,主要分为以下几个步骤:1. 硬件配置:配置模数转换引脚和模式,选择参考电压源等参数。
2. 启动转换:通过软件触发或外部触发方式启动模数转换。
3. 采样转换:模数转换器将模拟信号进行采样,并将其转换为数字信号。
4. 数据处理:获取转换结果并进行进一步的数据处理,比如滤波、计算等。
5. 输出结果:将处理后的结果输出到目标设备或进行监控等操作。
STM32的模数转换应用示例以下是一个简单的模数转换应用示例:include "stm32f4xx.h"void ADC_Configuration(void){ADC_InitTypeDef ADC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;// 开启ADC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);// 配置模拟输入引脚GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;GPIO_Init(GPIOC, &GPIO_InitStructure);// 配置ADCADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;ADC_InitStructure.ADC_ScanConvMode = DISABLE;ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;ADC_InitStructure.ADC_ExternalTrigConvEdge =ADC_ExternalTrigConvEdge_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfConversion = 1;ADC_Init(ADC1, &ADC_InitStructure);// 配置ADC通道ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_15Cycles);// 启动ADCADC_Cmd(ADC1, ENABLE);}uint16_t ADC_GetConversionValue(uint32_t ADCx){return ADC_GetConversionValue(ADCx);}int main(void){ADC_Configuration();while(1){// 启动ADC转换ADC_SoftwareStartConv(ADC1);// 等待转换完成while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);// 获取转换结果uint16_t result = ADC_GetConversionValue(ADC1);// 进行进一步的处理// ...}}以上是一个使用STM32F4系列单片机进行模数转换的简单示例,代码中配置了一个ADC通道,实现了对模拟信号的采样和转换。
stm32adc原理STM32 ADC(Analog-to-Digital Converter)是一种用于将模拟信号转换为数字信号的设备。
它是STM32微控制器中的一个重要模块,可用于采集外部传感器的模拟信号。
STM32 ADC的原理如下:1. 采样保持电路(Sample and Hold Circuit):首先,ADC需要将输入的模拟信号进行采样并保持住。
采样保持电路可以将模拟信号的瞬时值转换为一个稳定的电压。
在采样期间,采样保持电路将输入信号与一个电容器连接,然后在保持期间将电容器的电压保持在一个恒定值。
这样可以确保输入信号的瞬时值不会受到输入电阻或电容的影响。
2. 输入选择器(Channel Selector):ADC在每次转换之前需要选择要采集的输入信号通道。
选择器通常是一个多路选择器,可以从多个输入通道中选择一个。
3. 模数转换器(Analog-to-Digital Converter):模数转换器将采样和保持电路中保持的模拟信号转换为数字信号。
STM32 ADC通常使用逐次逼近型模数转换器(Successive Approximation Converter),它采用逼近算法来逼近输入信号的模拟值。
逐次逼近型模数转换器通过逐位逼近的方式进行转换,从最高有效位开始,逐渐逼近到最低位。
4. 校准电路(Calibration Circuit):为了确保转换精度,ADC需要进行校准。
校准电路可以通过测量和校正不同的误差源,如偏移误差和增益误差,来提高转换精度。
5. 控制和配置单元(Control and Configuration Unit):ADC还包含一个控制和配置单元,用于配置ADC的采样率、输入范围、转换分辨率等参数。
控制和配置单元还负责控制ADC的转换开始和结束,并生成转换完成的中断。
总的来说,STM32 ADC利用采样保持电路对输入信号进行采样保持,然后使用模数转换器将保持的模拟信号转换为数字信号。
STM32的ADC转换最常见的方式这里的ADC转换也来使用DMA---这个也是STM32的ADC转换最常见的方式。
第一步是了解STM32的ADC对应的GPIO口如下图不用记住,可以查询,我是将它剪下来粘贴到书本的相应章节!第二步是配置相应ADC转换的GPIO口这里使用PC0--PC1static void ADC1_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //打开DMA1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 “ RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入GPIO_Init(GPIOC, &GPIO_InitStructure);}第三步是-配置ADC的DMA配置ADC通道等---#define ADC1_DR_Address ((u32)0x40012400+0x4c) //外设地址__IO uint16_t ADC_ConvertedValue[2];//内存数组staTIc void ADC1_Mode_Config(void){DMA_InitTypeDef DMA_InitStructure;ADC_InitTypeDef ADC_InitStructure;DMA_DeInit(DMA1_Channel1);//---------------ADC的DMA配置--------------------DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; //ADC1地址---代表ADC1保存转换值的寄存器DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;//内存地址---用来保存DMA传输过来的ADC转换值----后面直接使用的变量地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //外设为数据源DMA_InitStructure.DMA_BufferSize = 2; //传输总数据---2通道需要传输2个数据DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址固定DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址自增---总体表示始终从外设ADC1地址处取值---依次保存到连续的两个内存变量中---DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;//外设传输数据单元---半字16位DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //内存传输数据单元---半字16位DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //循环模式---2个数据依次循环接收从外设ADC1传输过来的ADC值---DMA_InitStructure.DMA_Priority = DMA_Priority_High; //高优先级DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //禁止内存传内存DMA_Init(DMA1_Channel1, &DMA_InitStructure);DMA_Cmd(DMA1_Channel1, ENABLE); //再次打开DMA1//------------ADC模式配置------------------------ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式----还有很多模式---这个比较常见ADC_InitStructure.ADC_ScanConvMode = ENABLE ; //扫描模式---采集多通道使用----本程序采集2通道---所以扫描模式ADC_InitStructure.ADC_ConTInuousConvMode = ENABLE; //连续转换模式---不难理解---就是不停地采集---一次接一次ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //不使用外部触发转换---触发分为外部触发---比如中断与定时器。
一种经典的STM32ADC多通道转换详细解析一种经典的STM32 ADC多通道转换详细解析STM32ADC多通道转换描述:用ADC连续采集11路模拟信号,并由DMA 传输到内存。
ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ。
在每次转换结束后,由DMA循环将转换的数据传输到内存中。
ADC可以连续采集N次求平均值。
最后通过串口传输出最后转换的结果。
程序如下:#includestm32f10x.h//这个头文件包括STM32F10x所有外围寄存器、位、内存映射的定义#includeeval.h//头文件(包括串口、按键、LED的函数声明)#includeSysTIckDelay.h#includeUART_INTERFACE.h#include#defineN50//每通道采50次#defineM12//为12个通道vu16AD_Value[N][M];//用来存放ADC转换结果,也是DMA的目标地址vu16After_filter[M];//用来存放求平均值之后的结果inTI;voidGPIO_ConfiguraTIon(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//因为USART1管脚是以复用的形式接到GPIO口上的,所以使用复用推挽式输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;。
AD模块即模数转换器(Analog-to-Digital Converter),它能将模拟信号转换为数字信号,为后续的数字处理提供数据。
ADC工作原理ADC的输入端是模拟信号,输入信号首先经过采样保持电路(Sample and Hold),在采样时刻保持下来,然后再经过模数转换电路,将模拟信号转换为数字信号,最终输出数字信号。
ADC的转换精度决定了数字输出值的分辨率,通常用位数来表示,例如12位ADC可以输出4096个数字值,即分辨率为4096。
分辨率越高,输出数字信号的精度越高,能够处理的模拟信号范围也更广。
STM32 ADC模块STM32的ADC模块通常具有多个转换通道和多种转换模式,可以根据应用需要进行选择。
例如,单次转换模式适用于需要单次测量的场合,扫描转换模式适用于需要连续多次测量的场合。
在使用STM32 ADC模块时,需要注意一些配置参数,如参考电压、采样时间、采样周期等。
参考电压是指ADC所采样的电压范围,可以通过外部参考电压或内部参考电压来选择。
采样时间和采样周期是影响ADC转换精度和速度的重要参数,需要根据应用需求进行设置。
DA模块即数字到模拟转换器(Digital-to-Analog Converter),它能将数字信号转换为模拟信号,为外部电路提供控制信号。
DAC工作原理DAC的输入端是数字信号,输入信号首先被分为多个等间隔的级别,然后通过加权电阻网络,将数字信号转换为模拟信号,最终输出模拟信号。
DAC的输出精度决定了数字信号的分辨率,通常用位数来表示,例如12位DAC可以输出4096个数字值,即分辨率为4096。
分辨率越高,输出模拟信号的精度越高。
STM32 DAC模块STM32的DAC模块通常具有多个输出通道和多种输出模式,可以根据应用需要进行选择。
例如,单次输出模式适用于只需要一次性输出模拟信号的场合,DMA输出模式适用于需要连续输出模拟信号的场合。
在使用STM32 DAC模块时,需要注意一些配置参数,如输出电压范围、输出模式、采样周期等。
stm32之ADC(规则通道)1.ADC是12位的⼀种逐次型模拟数字转换器,所以进⾏存储时只能存储在16位数据寄存器中,不能低于12位。
其中有16个外部信号源(ADCx_IN0--ADCx_IN15)和2个内部信号源(温度传感器、)2.ADC时钟--由时钟控制器提供的ADCCLK时钟(RCC_CFGR寄存器设置ADC时钟分频)和PCLK2(APB2时钟)同步。
3.每个通道可以分别⽤不同的时间采样。
总转换时间如下计算: TCONV = 采样时间+ 12.5个周期 当ADCCLK=14MHz,采样时间为1.5周期 TCONV = 1.5 + 12.5 = 14周期 = 1µs4.转换可以由外部事件触发(例如定时器捕获, EXTI线)。
如果设置了EXTTRIG控制位,则外部事件就能够触发转换。
5.ADC寄存器 (1)ADC_CR2 控制寄存器位23 位22 位20TSVREFE:温度传感器和VREFINT使能SWSTART:开始转换规则通道EXTTRIG:规则通道的外部触发转换模式位19:17 EXTSEL[2:0]:选择启动规则通道组转换的外部事件位11 位3 位2 位1 位0ALIGN:数据对齐RSTCAL:复位校准 (Reset calibration) CAL: A/D校准 (A/D Calibration) CONT:连续转换ADON:开/关A/D转换器 (2)采样时间寄存器 ADC_SMPRx --1,2分别是通道1和通道2的。
(3)ADC规则序列寄存器ADC_SQRx--查找数据⼿册:进⾏设置通道转换数⽬:ADC_SQR1的位23:20位,进⾏设置进⾏转换顺序即第⼏个转换:ADC_SQR1-ADC_SQR3。
L[3:0]:规则通道序列长度 (Regular channel sequence length)这些位由软件定义在规则通道转换序列中的通道数⽬。
0000: 1个转换0001: 2个转换……1111: 16个转换6.ADC的⼀般配置过程: 1)开启 PA ⼝时钟,设置 PA3为模拟输⼊。
STM32单片机的ADC配置详解一、ADC定义将模拟量转换为数字量的过程称为模式(A/D)转换,完成这一转换的工具就是模数转换器(简称ADC),用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。
例如:把芯片的引脚上的电压读出来,把芯片集成的上的温度传感器的温度读出来!二、ADC要点1-独立模式-单通道-中断读取①、初始化ADC用到的GPIO;②、设置ADC的工作参数并初始化;③、配置ADC时钟;④、设置ADC转换通道顺序及采样时间;⑤、配置使能ADC转换完成中断,在中断内读取转换完的数据;⑥、使能ADC;⑦使能软件触发ADC转换。
三、ADC内容1)ADC数量:STM32有3个ADC,每个ADC最多有16个外部通道,ADC1和ADC2都有16个外部通道,而ADC3随CPU引脚的不同通道数也不同,一般都有8个外部通道。
2)ADC精度:ADC为12位,即模拟电压经过ADC转换后是一个12位的数字量;一般情况下ADC的输入电压范围是:0~3.3V,因此最小精度为:3.3/2^12,当数字量为X时,则有模拟量Y = (3.3 / 2^12)*X。
3)电压输入范围:ADC 输入范围为:VREF- ≤VIN ≤VREF+。
由VREF- 、VREF+ 、VDDA 、VSSA 、这四个外部引脚决定。
一般把VSSA 和VREF- 接地,把VREF+ 和VDDA 接3V3,得到ADC的输入电压范围为:0~3.3V。
4)输入通道:ADC的信号输入就是通过通道来实现的,信号通过通道输入到单片机中,单片机经过转换后,将模拟信号输出为数字信号;STM32F103的ADC多达18个通道,在F103ZET6中ADC1的通道16连接到了芯片内部的温度传感器,Vrefint (内部参照电压)连接到了通道17,ADC2 的模拟通道16 和17 连接到了内部的VSS(地)。
外部的16 个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4 路。
STM32笔记ADC篇一、总转换时间的问题:总转换时间TCONV = 采样时间+ 转换时间(转换时间=12.5个周期)其中,采样时间是指完成一次转换到开始下一次转换的时间间隔,不包括转换时间;转换时间是固定的12.5个周期。
采样时间有几个固定值可以选择设定。
二、 ADON:开/关A/D转换器该位由软件设置和清除。
当该位为0时,写入1将把ADC从断电模式下唤醒。
当该位为1时,写入1将启动转换。
在转换器上电至转换开始有一个延迟时间tSTAB。
函数void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);虽然描述说是使能失能ADC,其实就是对ADON的操作,也就是说,当ADON为0时,该函数为唤醒ADC,当ADON为1时,为启动转换。
三、ADC开始转换的问题芯片资料有以下两段话:“单次转换模式下,ADC只执行一次转换。
该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动,也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。
“在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。
此模式可通过外部触发启动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。
”此处的关键点是:单次模式下,注入通道只能用软件启动,不能用ADON启动。
但连续模式则可以用这两个方式启动。
四、中断的问题JEOC:该位由硬件在所有注入通道组转换结束时设置,由软件清除EOC:该位由硬件在(规则或注入)通道组转换结束时设置,由软件清除或由读取ADC_DR时清除注意点:a、规则和注入都可以产生EOC标志,而JEOC标志只有注入组产生。
b、规则和注入都可以产生EOC中断,而JEOC中断只能由注入组产生。
c、JEOC只能软件清除,硬件不会自动清除,但是EOC在读取ADC_DR规则数据寄存器时,硬件会自动清除。
(这条一定要注意,浪费我半天的时间才找到原因。
STM32】ADC的基本原理、寄存器(超基础、详细版)ADC的基本介绍ADC的基本定义Analog-to-Digital Converter的缩写。
指模/数转换器或者模拟/数字转换器。
是指将连续变量的模拟信号转换为离散的数字信号的器件。
典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。
ADC的主要特征•12位逐次逼近型的模拟数字转换器;•最多带3个ADC控制器,可以单独使用,也可以使用双重模式提高采样率;•最多支持23个通道,可最多测量21个外部和2个内部信号源;•支持单次和连续转换模式;•转换结束,注入转换结束,和发生模拟看门狗事件时产生中断;•通道0到通道n的自动扫描模式;•自动校准;•采样间隔可以按通道编程;•规则通道和注入通道均有外部触发选项;•转换结果支持左对齐或右对齐方式存储在16位数据寄存器;•ADC转换时间:最大转换速率1us(最大转换速度为1MHz,在ADCCLK=14M,采样周期为1.5个ADC时钟下得到);•ADC供电要求:2.4V-3.6V;•ADC输入范围:VREF- ≤ VIN ≤ VREF+。
STM32F10x系列芯片ADC通道和引脚对应关系由上图中可以看出,STM32F103ZET6带3个ADC控制器,一共支持23个通道,包括21个外部和2个内部信号源;但是每个ADC控制器最多只可以有18个通道,包括16个外部和2个内部信号源。
ADC的基本原理ADC的工作框图ADC模块的框图看起来比较复杂,接下来会一点一点地对它进行分析。
ADC引脚在框图中最左边的一列是ADC的各个引脚,它们的名称、信号类型和作用见下图:一般情况下,VDD是3.3V,VSS接地,相对应的,VDDA是3.3V,VSSA也接地,模拟输入信号不要超过VDD(3.3V)。
ADC时钟配置框图中标注的来自ADC预分频器的ADCCLK是ADC模块的时钟来源。
通常,由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。
STM32中AD转换概念解释与操作方法STM32AD转换AD转换模式主要有单次,多次,间断模式。
单通道单次·、连续转换:单次转换模式只转换一次,无论规则组还是注入组里所选择的通道转换完成,ADC置位EOC或JEOC后,如果使能了相应的中断,ADC就停止。
软件、外部事件再触发,ADC才进行下一次转换。
而连续模式则不需要软件、外部事件的触发自动进行下次转换。
因此单通道的单次、连续转换模式主要针对某单一输入通道进行转换。
应用举例:ADC输入通道2输入,通道采集时间71.5clk软件触发,触发间隔0.5ms,产生中断。
多通道的单次、连续转换:上面谈到某单一通道可进行单次、连续转换,如果规则组或者注入组里的转换序列长度大于1,ADC又是如何进行转换的呢?ADC提供了通道扫描功能。
当使能了该功能后,同一组上一通道转换结束后,将自动启动同组的下一通道进行转换。
单次转换模式中,同一组的最后一通道转换结束后,ADC将停止,直到下次触发;连续转换模式中,ADC将从该组的第一转换序列开始,周而复始。
因此该方式下,如果通道配置成规则组,建议采用DMA方式,让CPU 自动在每次数据转换结束后,通知DMA进行数据拷贝,减少软件的复杂度。
应用举例:ADC输入通道0、2、3、4,按照0、2、3、4进行转换,采样间隔71.5clk,采用DMA传输方式,单通道采样次数10次。
间断模式主要是对多通道转换序列组合的补充。
间断长度为n(n < 8),数值n由ADC_CR1寄存器的DISCNUM[2:0]设置。
它由外部事件触发转换。
每次触发N个通道被转换。
例如某规则通道序列为0、2、3、5、7、8、9,其中n为3,,那么转换顺序如下:第一次触发:通道0、2、3被转换;第二次触发:通道5、7、8被转换;第三次触发:通道9被转换;第四次触发:0、2、3被转换。
stm32的ADC之规则组和注入组STM32加入了多种成组转换的模式,可以由程序设置好之后,对多个模拟通道自动地进行逐个地采样转换。
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。
定时器输出触发比较麻烦,还需要设置相应的定时器。