登录/注册

STM32的DMA多路ADC

更多

在STM32中使用DMA实现多路ADC采样,可以通过以下步骤配置,并需要注意关键设置:

一、配置步骤

  1. ADC初始化

    • 启用扫描模式(Scan Conversion Mode)
    • 启用连续转换模式(Continuous Conversion Mode)
    • 设置数据对齐方式(通常右对齐)
    • 配置DMA请求使能
      hadc.Instance = ADC1;
      hadc.Init.ScanConvMode = ENABLE;         // 启用扫描模式
      hadc.Init.ContinuousConvMode = ENABLE;   // 连续转换
      hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
      hadc.Init.DMAContinuousRequests = ENABLE; // DMA连续请求
      HAL_ADC_Init(&hadc);
  2. 配置ADC通道

    • 按顺序添加多路通道,设置采样时间
      ADC_ChannelConfTypeDef sConfig = {0};
      sConfig.Channel = ADC_CHANNEL_0;        // 通道0
      sConfig.Rank = ADC_REGULAR_RANK_1;       // 第1个转换
      sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
      HAL_ADC_ConfigChannel(&hadc, &sConfig);
      // 重复添加其他通道,依次设置Rank为2,3...
  3. DMA配置

    • 设置传输方向:外设→内存
    • 内存地址递增(存储多通道数据)
    • 循环模式(持续采样)
      hdma_adc.Instance = DMA1_Channel1;
      hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY;
      hdma_adc.Init.MemInc = ENABLE;          // 内存地址自增
      hdma_adc.Init.Mode = DMA_CIRCULAR;      // 循环模式
      HAL_DMA_Init(&hdma_adc);
      __HAL_LINKDMA(&hadc, DMA_Handle, hdma_adc);
  4. 启动转换

    HAL_ADC_Start_DMA(&hadc, (uint32_t*)adc_buffer, BUFFER_SIZE);

二、关键要点

  1. 通道顺序匹配

    • DMA存储数组adc_buffer中的数据顺序与ADC通道的Rank值严格对应。例如:
      • Rank1 → adc_buffer[0]
      • Rank2 → adc_buffer[1]
      • 依此类推
  2. 触发源选择

    • 软件触发:调用HAL_ADC_Start_DMA后自动开始
    • 定时器触发(推荐周期性采样):
      hadc.Init.TriggerConvMode = ADC_EXTERNALTRIG_T3_TRGO;

      需同时配置定时器(如TIM3)产生TRGO信号

  3. 数据对齐与处理

    • 12位ADC结果存储在uint16_t数组中
    • 若使能了模拟看门狗,可通过中断处理异常值

三、常见问题处理

  1. 数据错位

    • 现象:数组顺序与通道不匹配
    • 解决:检查ADC通道的Rank设置顺序
  2. 采样不更新

    • 现象:DMA数据停滞
    • 解决:确认DMA和ADC是否启用循环模式,触发源是否持续有效
  3. 精度问题

    • 增加各通道的采样时间(SamplingTime
    • 在首次转换前插入延迟,避免电容未稳定

通过合理配置,STM32的DMA+多路ADC可实现高效稳定的数据采集,典型应用包括多传感器同步读取、实时波形采集等场景。

STM32 DMA传输的问题分析

用户使用STM32G473RET6芯片,开发环境STM32CubeMX+Keil(LL库)。使用DMA1通道1,在半传输中断和完全传输中断里,拷

2023-12-01 09:19:48

STM32U5 ADC+DMA配置演示

随意选择ADC1的4个通道,扫描模式,连续转换,DMA传输转换结果并令DMA工作在外设字到内存字的循环传输模式。使用CubeMx进行配置。其中

2023-07-29 16:19:13

基于STM32CubeMX的HAL库的DMA多路ADC采集

图,如果是其他下载器,建议自行百度如何选择。3.ADC的配置,实际按自己的需求来相关dma配置,这里模式选择循环,这就不需要每次调用相关函数去获取adc

2023-05-16 09:44:04

stm32g030多路adc DMA采集程序

stm32g030_多路adc_DMA采集程序

资料下载 过往5 2023-06-19 09:43:09

STM32F10XXX使用DMA传输ADC转换的数据

STM32F10XXX使用DMA传输ADC转换的数据教程说明。

资料下载 jf_46724420 2022-04-24 10:12:55

STM32F1 ADCDMA的简单理解

本文主要讲解stm32f1中ADC和DMA的使用,在学习中参考了多篇文章,感谢前辈的付出。

资料下载 佚名 2021-12-27 19:09:32

STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA

STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用

资料下载 佚名 2021-11-24 13:51:02

STM32ADC代码例程

STM32的ADC代码例程(普德新星电源技术有限公司怎么样)- STM32的ADC

资料下载 vinww特烦恼 2021-09-23 09:53:19

STM32G0开发笔记:多通道ADCDMA的使用

使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为多通道ADC与DMA的使用。

2023-01-17 10:41:03

STM32CUBEIDE(10)----ADCDMA模式下扫描多个通道

本章STM32CUBEMX配置STM32F103的ADC在DMA模式扫描

2022-11-30 09:54:29

如何利用STM32 CubeMx ADC DMA实现多路采集?

如何利用STM32 CubeMx ADC DMA实现多路采集?

2021-11-26 06:33:39

STM32F10x_ ADC三通道DMA连续转换(3通道、软件单次触发)

STM32F10x_ADC三通道DMA连续转换(3通道、软件单次触发)

2020-03-25 13:57:53

STM32ADC1采集多条通道 可以不使用DMA功能吗?

STM32的ADC1采集多条通道,可以不使用DMA功能吗?

2020-03-14 14:46:08

STM32F1的ADC2如何使用DMA功能 USART过载错误Overrun error

STM32F1的ADC2如何使用DMA功能,USART过载错误Overrun error

2020-03-14 14:42:01

ADCDMA多路,单次/连续转换 (标准外设库)

ADC,DMA,多路,单次/连续转换(标准外设库)

2020-03-04 11:26:34

7天热门专题 换一换
相关标签