ADC的DMA采集
功能介绍
DMA (直接内存访问) 是 STM32 的数据搬运引擎,可在 CPU 不参与的情况下自动将 ADC 转换结果从数据寄存器搬运到内存数组。硬件实现:每次 ADC 转换完成后自动触发 DMA 请求,DMA 控制器根据配置的源地址、目标地址和传输长度自动完成数据搬运。
ADC+DMA 主要用于:多通道同步采集、高速连续采样 (示波器)、电机相电流检测、多传感器数据融合等场景。相比中断方式,DMA 方式 CPU 占用率极低,可释放 CPU 资源用于数据处理和控制算法。
DMA 优势
特点
- 自动搬运数据,不占用 CPU
- 适合多通道连续采集
- 减少中断开销
- 可配置循环模式
配置步骤
uint16_t ADC_Data[4] = {0};
// 2. ADC 校准
HAL_ADCEx_Calibration_Start(&hadc2,
ADC_SINGLE_ENDED);
// 3. 启动 ADC DMA
HAL_ADC_Start_DMA(&hadc2, 多通道扫描
配置:使能扫描模式,配置多个通道
数据存储:按通道顺序存入数组
数据存储:按通道顺序存入数组
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
if (hadc->Instance == ADC2) {
// 数据已更新到 ADC_Data 数组
// 处理采集数据
}