stm32简明教程系列(四) —ADC

一、概述

首先介绍一下stm32 adc模块的几个重要的特点:

  • 12位分辨率
  • 18通道(其中2个内部通道:连接到温度传感器和内部参考电压(VREFINT = 1.2V))
  • 转换范围:0~3.6V
  • 转换速率1MHz(这里的转换速率指的是最大采样频率)
  • ADC供电要求:2.4V到3.6V 
  • ADC输入范围:VREF- ≤ VIN ≤ VREF+ (64脚以下的芯片,Vref+是和VDDA连接在一起的。需要注意的就是VDDA和VDD的压差必须小于300mV ,否则可能由于上电断电的非同时性,导致数据的丢失。然而这就有可能导致了ADC参考电压的非精确性。)
  • 规则通道转换期间有DMA请求产生

这里插一句:stm32各个电压的用途。

VDD - 单片机3.3V 电源正,VSS - 单片机3.3V 电源负,VDDA - 单片机A/D 转换器电源正,VSSA - 单片机A/D 转换器电源负。

注意这里由于STM32F103系列单片机的内部高速RC 振荡器(HSI)由VDDA、VSSA 供电,故即使不使用单片机自带的A/D 转换器,也必须保证VDDA、VSSA 的供电,否则STM32F103单片机不能正常启动。

二、具体操作步骤

(1)设置ADC时钟频率

回想一下我们之前的时钟树:

这里我们的ADCCLK使用的是APB2的时钟(通常等于系统时钟72Mhz),这里可以经过ADC prescaler 预分频器进行分频。这个预分频器在时钟配置寄存器(RCC_CF)15:14位。

(2)设置IO口为模拟输入

扫描二维码关注公众号,回复: 3072673 查看本文章

(3)ADC配置

主要有以下几个寄存器

1)ADC状态寄存器(ADC_SR)

这个寄存器是用来查看每一个AD转化工程的完成情况,其中最重要的就是转化结束位EOC。我们可以用它作为ADC中断的标志位。

2)ADC控制寄存器1、2(ADC_CR1、2)

这两个寄存器包含里几乎所有重要的设置:

3)ADC采样时间寄存器1(ADC_SMPR1、2)

   SMPx[2:0]:选择通道x的采样时间 (Channel x Sample time selection)

4)ADC规则序列寄存器1(ADC_SQR1、2)

5)、ADC规则数据寄存器(ADC_DR)   

猜你喜欢

转载自blog.csdn.net/quinn1994/article/details/82227755