STM32F10X_ADC(基础设置)

本文详细介绍了STM32中的ADC模块,包括ADC的电压输入、输入通道、规则通道配置,以及触发源和转换时间的设定。特别强调了在STM32F103XE中,ADC1有18个通道,并通过代码示例展示了如何配置转换顺序。此外,还探讨了使用DMA提高ADC数据采集效率的方法,解释了如何通过DMA减轻CPU负担并实现高速采样。
摘要由CSDN通过智能技术生成

目录

1、参考文献

2、ADC简介

3、STM32中的ADC

3.1、电压输入

3.2、输入通道

3.3、规则通道

4、触发源

5、转换时间

5.1、ADC时钟

5.2、采样时间

6、DMA运用于ADC


1、参考文献

《STM32F10X-中文参考手册》;

2、ADC简介

全称:analog to digital concerter;称为模/数转换器;

作用是:将连续变化的模拟信号转换为离散的数字信号;

3、STM32中的ADC

芯片型号不同,对应ADC的配置也不同;

3.1、电压输入

ADC供电要求:一般是3.3V;

Vref+:输入,模拟参考正极;

Vdda:输入,模拟电源;

Vref-:输入,模拟参考负极;

Vssa:输入,模拟电源地;

3.2、输入通道

对于STM32F103XE的ADC有18个通道;

其中外部的16个通道是:ADCX_IN0至ADCX_IN15;

这16个通道对应着不同的IO口;

3.3、规则通道

平时用的就是规则通道;

由寄存器SQR1、SQR2、SQR3控制着这16个通道的转换顺序,如下代码设置:

ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_55Cycles5);
//通道13第一个进行转换;

下图中,IN13就是通道13; 

4、触发源

一般都是连续的采样,用软件触发即可;相关代码如下:

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
//转换由软件控制而不是外部触发启动

ADC_SoftwareStartConvCmd(ADC1, ENABLE);
//启动转换

5、转换时间

5.1、ADC时钟

ADC时钟,最大为14M,通常设置为12M;

下图分析可之前的文章:《STM32F10X_使用HSE配置系统时钟为72MHZ》;

5.2、采样时间

完成一次采样需要若干个ADC时钟,相关寄存器可查手册,相关代码如下:

ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_55Cycles5);
//55.5个

转换时间 = 采样时间 + 12.5个周期;

12.5个周期是固定的;

举例:

ADC时钟频率:12MHZ;

ADC采样时间:55.5个周期;

转换时间:(55.5+12.5)*(1/12)= 5.7 us;

6、DMA运用于ADC

使用中断的话,浪费CPU资源;

DMA:直接存储器存储;

DMA作用:不停的读取数据,不给CPU造成压力,实现高速的采集;

相关代码如下:

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
//DMA1时钟
//DMA1通道1对应外设ADC1
DMA_DeInit(DMA1_Channel1);
//复位
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;	
//ADC外设地址		            
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue[0];	         
//数据存放地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;		
//传输方向,注意从哪个到哪个		          
DMA_InitStructure.DMA_BufferSize = 14;			
//通道数       
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;	 
//只有一个DMA外设
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;			
//内存地址需要递增          
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;		
//半字
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;	
//半字			
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;	
//循环,不要停							
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); 
//使能

相关寄存器可查看手册;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值