概述
本章通过STM32CUBEIDE配置STM32F407的DMA-ADC采样
ADC原理
12
位
ADC
是逐次趋近型模数转换器。它具有多达
19
个复用通道,可测量来自
16
个外部源、两个内部源和
V
BAT
通道的信号。这些通道的
A/D
转换可在单次、连续、扫描或不连续
采样模式下进行。
ADC
的结果存储在一个左对齐或右对齐的
16
位数据寄存器中。
ADC
输入范围:
V
REF
— ≤
V
IN ≤
VREF+,规则通道转换期间可产生
DMA
请求。

ADC时钟:
用于模拟电路的时钟:
ADCCLK
,所有
ADC
共用此时钟来自于经可编程预分频器分频的
APB2
时钟,该预分频器允许
ADC
在
f
PCLK2
/2
、
/4
、
/6
或
/8
下工作。
ADC通道:
每个ADC模块存在16条复用通道,可按任意顺序在任意通道上完成,例如:
可按以下顺序对序列进行转换:
ADC_IN3
、
ADC_IN8
、
ADC_IN2
、
ADC_IN2
、
ADC_IN0
、
ADC_IN2
、
ADC_IN2
、
ADC_IN15
。
连续转换模式:
在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换,ADC
在开始精确转换之前需要一段稳定时间
t
STAB
。上次转换的数据存储在 16
位
ADC_DR
寄存器中。

扫描模式:
此模式用于扫描一组模拟通道。
如果将
DMA
位置
1
,则在每次规则通道转换之后,均使用直接存储器访问
(DMA)
控制器将
转换自规则通道组的数据(存储在
ADC_DR
寄存器中)传输到SRAM
数据对齐:
右对齐/左对齐


一般采用右对齐方式,左对齐后几位为0,可能会导致数据丢失
总转换时间:
ADC
会在数个
ADCCLK
周期内对输入电压进行采样,可使用
ADC_SMPR1
和
ADC_SMPR2
寄存器中的
SMP[2:0]
位修改周期数。
总转换时间的计算公式如下:
T
conv
=
采样时间
+ 12
个周期
例如:
ADCCLK = 30 MHz
且采样时间
= 3
个周期时:
T
conv
= 3 + 12 = 15
个周期
= 0.5 μs
(
APB2
为
60 MHz
时)
DMA原理
每个
DMA
控制器有
8
个数据流,每个数据流有多达
8 个通道。
独立的源和目标传输宽度(字节、
半字
、字):源和目标的数据宽度不相等时,
DMA
自动
封装
/
解封必要的传输数据来优化带宽。
DMA-ADC
由于规则通道组只有一个数据寄存器,因此,对于多个规则通道的转换,使用
DMA
非常有
帮助。这样可以避免丢失在下一次写入之前还未被读出的
ADC_DR
寄存器中的数据。
在使能
DMA
模式的情况下(
ADC_CR2
寄存器中的
DMA
位置
1
),每完成规则通道组中的
一个通道转换后,都会生成一个
DMA
请求。这样便可将转换的数据从
ADC_DR
寄存器传输
到用软件选择的目标位置。
IDE实现方法在STM32CUBEIDE-F407(5)-DMA-ADC采样(2)