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