STM32:ADC

目录

一、简介

二、结构

三、工作模式

四、使用流程


一、简介

模数转换器,ADC(Analog-to-Digital Converter)是将模拟信号转换为数字信号的电子设备。在STM32中,ADC用于处理来自传感器、麦克风等的模拟信号。STM32的ADC具有高分辨率、高速转换以及丰富的功能和配置选项,能够满足多种应用需求。

二、结构

ADC可以分为逐次逼近型、双积分型和电压-频率变换型,STM32的12位 ADC是一种逐次逼近型 ADC,它有多达18个通道 ,可测量16个外部和2个内部信号源。各通道的A/D转换可以选择单次或连续、扫描或间断模式执行,选择规则组 或者注入组,一般选择规则组。转换结果范围:0~4095。

三、工作模式

1.单次/连续转换模式

单次转换模式下,ADC只执行一次转换。连续转换模式下,当前ADC转换结束后立即启动下一次转换。

2.扫描/间断转换模式

扫描转换模式下,ADC扫描被选中的所有通道,每个组的每个通道执行单次转换。如果设置了连续转换模式,当组里的最后一个被选中的通道被转换后,又从第一个通道开始转换。

间断转换模式下,每次转换一定数量的通道后就停下。

3.ADC中断

规则组和注入组转换结束是能产生中断,当模拟看门口状态位被设置为1时,也能产生中断。它们都有独立的中断使能位。

4.DMA请求

因为规则组通道转换的值存储在一个仅有的数据寄存器中,所以当转换多个规则通道时需要使用DMA及时取出数据。

5.模拟看门狗

略。

6.温度传感器

温度传感器用来测量器件周围的温度,适合检测温度的变化,而不是测量绝对的温度。如果需要测量精确的温度,应该使用一个外置的温度传感器。

7.校准

ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码,这个码用于消除在随后的转换中每个电容器上产生的误差。

8.数据对齐

右对齐模式(常用):

左对齐模式:

四、使用流程

STM32的ADC功能较多,可以DMA、中断等方式进行数据的传输,如果要使用DMA或者中断的功能,需要额外配置DMA和中断。这里介绍最简单的使用方式,即接收一个模拟信号,占用一个规则组通道,然后转换为数字信号。

cpp 复制代码
void AD_Init(void)
{
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC2 ,ENABLE );
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE );
	
	RCC_ADCCLKConfig (RCC_PCLK2_Div6);                 //选择6分频,ADCCLK=72MHz/6=12MHz
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;            //配置PA2为模拟输入,PA2对应通道2
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init (GPIOA,&GPIO_InitStructure);
	
	ADC_RegularChannelConfig (ADC2,ADC_Channel_2 ,1,ADC_SampleTime_55Cycles5 );//规则组序列1的位置,配置为通道2

	ADC_InitTypeDef ADC_InitStructure;
	ADC_InitStructure.ADC_Mode=ADC_Mode_Independent ;                  //独立模式,即单独使用ADC2
	ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right ;              //数据对齐,右对齐
	ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None ; //外部触发中断,不使用
	ADC_InitStructure.ADC_ContinuousConvMode=ENABLE ;                  //连续转换模式
	ADC_InitStructure.ADC_ScanConvMode=DISABLE ;                       //间断转换模式
	ADC_InitStructure.ADC_NbrOfChannel=1;
	ADC_Init (ADC2,&ADC_InitStructure);
	
	ADC_Cmd (ADC2,ENABLE );                                            //使能ADC1
	
	ADC_ResetCalibration (ADC2);                                       //复位校准          
	while(ADC_GetResetCalibrationStatus (ADC2)==SET);
	ADC_StartCalibration (ADC2);                                       //开始校准
	while(ADC_GetCalibrationStatus (ADC2)==SET);
	
	ADC_SoftwareStartConvCmd (ADC2,ENABLE );                           //开始转换
}

uint16_t Get_AD_Value(void)                                            //获取AD转换值
{
	return ADC_GetConversionValue (ADC2);
}

通过上述代码可以将一个外部模拟信号输入到PA2引脚,使用Get_AD_Value()函数获取AD值(0~4095)。

相关推荐
jjjxxxhhh1231 小时前
FPGA,使用场景,相比于单片机的优势
单片机·嵌入式硬件·fpga开发
无敌最俊朗@1 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
EterNity_TiMe_2 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
changingshow3 小时前
Arduino IDE Windows 系统 离线安装 esp32 开发板 亲测好用。
单片机·嵌入式硬件
7yewh5 小时前
嵌入式硬件杂谈(一)-推挽 开漏 高阻态 上拉电阻
驱动开发·stm32·嵌入式硬件·mcu·物联网·硬件架构·pcb工艺
Chervin12 小时前
Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建
linux·单片机·ubuntu·arm
TeYiToKu13 小时前
笔记整理—linux驱动开发部分(8)framebuffer类设备
linux·驱动开发·笔记·嵌入式硬件·arm
电子工程师UP学堂15 小时前
STM32 设计的较为复杂的物联网项目,包括智能家居控制系统,涵盖了硬件和软件的详细设计。
stm32
7yewh15 小时前
嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)
stm32·嵌入式硬件·mcu·物联网·硬件架构·硬件工程·pcb工艺
电子工程师UP学堂15 小时前
用单片机MSP430设计一个太阳能实战项目,能够详细的设计出它的硬件和软件系统
单片机