stm32 ADC的使用

简单了解

ADC(Analog to Digital Converter),顾明思义,就是模数转换器,模拟信号转换为数字信号。
STM32一般有两个ADC,每个ADC又有多个通道,每个通道与GPIO一一对应。
ADC转换有多种模式选择,单次,连续,扫描,间断等。
转换后的数字,按照右对齐或者左对齐,存储在16位寄存器中。(一般是右对齐,左对齐主要针对一些精度不够,比如只有8位,那么数据就不需要转换,忽略8个位即可)

  • 通道对应关系:
    在这里插入图片描述

配置过程

基本所有的外设都要经过下面的过程:

配置时钟源
外设控制寄存器配置
配置中断
外设使能

配置时钟源

任何的外设都需要一个时钟源,就像人的心脏一样,没有时钟源,或者配置错误,都会导致外设异常。

RCC_ADCCLKConfig(RCC_PCLK2_Div6);
该函数就是配置ADC的时钟。参数是分频系数,这里是指6分频。
这里的分频是基于APB2所说的,因为ADC挂载在APB2上。APB2的时钟频率为72M(STM32F1)。
所以ADC的频率为:72M/6=12M
配置的时候需要注意,ADC的频率不能大于14M

初始化

对ADC进行基础配置,主要有下面几个项:

typedef struct
{
	uint32_t ADC_Mode; // ADC 工作模式选择
	FunctionalState ADC_ScanConvMode; /* ADC 扫描(多通道) 或者单次
		(单通道) 模式选择 */
	FunctionalState ADC_ContinuousConvMode; // ADC 单次转换或者连续
		转换选择
	uint32_t ADC_ExternalTrigConv; // ADC 转换触发信号选择
	uint32_t ADC_DataAlign; // ADC 数据寄存器对齐格式
	uint8_t ADC_NbrOfChannel; // ADC 采集通道数
} ADC_InitTypeDef;

ADC_Init(ADC1, &ADC_InitStructure);//ADC 初始化

使能

开启ADC功能(使能并不等于开启转换)

ADC_Cmd(ADC1, ENABLE);//开启 AD 转换器
执行复位校准的方法是:
ADC_ResetCalibration(ADC1);
执行 ADC 校准的方法是:
ADC_StartCalibration(ADC1); //开始指定 ADC1 的校准状态

while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束

开启转换

ADC有单次和连续转换,还有多种触发源。这里我选择的是单次转换以及软件触发。

  • ADC转换很快。

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1,ADC_SampleTime_239Cycles5 );该函数是配置转换周期的,也就是一次转换需要多少个周期。时钟源我们已经说过,时间也就是1/f * 239.5,就拿时钟12M算
1/12us*239.5 ~= 20us,对于实时要求不高的完全可以接受。实时要求高的就可以使用DMA进行多次转换。

1. 配置ADC通道
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel,
uint8_t Rank, uint8_t ADC_SampleTime)2. 配置转换周期
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
3. 开启转换
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
4. 等待转换完成
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
5. 获取转换结果
ADC_GetConversionValue(ADC1);(获取后转换完成标志会自动被清掉)
6. 计算实际电压值
voltage = (float)adcx*(3.3/4096);

寄存器

我搜索了不少博客,好多ADC详解文章真的是详解,把手册上的寄存器全部搬上去了,
巴拉巴拉半天,最后还是不清楚ADC怎么使用的,所以这里就不着重记录ADC的寄存器了,要想看,手册多的很。就捡几个重要的说下吧,以及对应操作的函数。

ADC_CR

控制寄存器,这个寄存器主要配置:

  1. 扫描模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值