云计算百科
云计算领域专业知识百科平台

【STM32CubeMX学习指南---ADC多通道采集与DMA传输】

STM32CubeMX配置ADC多通道采集与DMA传输

硬件准备

  • 确保STM32芯片支持多路ADC和DMA功能(如STM32F103)
  • 准备两路模拟信号输入通道
  • 内部基准电压通道(VREFINT)需在芯片内部启用

CubeMX配置步骤

系统基础配置

  • 在RCC设置中启用外部晶振(HSE)
  • 在SYS中启用Debug(如Serial Wire)
  • 配置时钟树确保ADC时钟不超过器件限制(通常≤14MHz) 在这里插入图片描述

ADC1配置

  • 在Analog下选择ADC1
  • 启用Scan Conversion Mode
  • 设置Data Alignment为Right
  • 设置Regular Conversion Mode为Discontinuous
  • 配置Number Of Conversion为3(两路外部+1路内部基准)
  • 配置ADC中断 ADC通道参数
  • 通道8:选择对应GPIO引脚,设置Sampling Time(建议≥15 cycles)
  • 通道9:选择另一GPIO引脚,设置相同Sampling Time
  • 通道16/Vrefint Channel:选择VREFINT通道,设置Sampling Time 在这里插入图片描述 在这里插入图片描述

触发源配置

  • 选择Timer Trigger Out事件作为触发源
  • 配置定时器(如TIM3)产生周期触发信号
  • 设置定时器预分频和自动重装载值决定采样频率 在这里插入图片描述

DMA配置

  • 添加DMA通道用于ADC1
  • 设置Mode为Circular(循环模式)
  • 数据宽度选择Half Word
  • 启用Memory Increment
  • 配置中断优先级(可选) 在这里插入图片描述

生成代码与编程

  • 在Project Manager标签页设置工程名称、路径和IDE类型(如MDK-ARM)。选择生成代码的选项后点击"Generate Code"。 关键代码实现

// 在main.c中添加变量定义
#define ADC_BUF_LEN 3
uint16_t adcBuf[ADC_BUF_LEN];

// 在MX_ADC1_Init()后添加校准和启动代码
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcBuf, ADC_BUF_LEN);

// 定时器启动
HAL_TIM_Base_Start(&htim3);

数据处理

// 获取转换结果(1.2f需参考手册)
float ch8_voltage = adcBuf[0] * 1.2f / adcBuf[2];
float ch9_voltage = adcBuf[1] * 1.2f / adcBuf[2];

注意事项

  • 确保DMA缓冲区大小足够存储所有通道数据
  • 定时器触发频率应低于ADC最大采样率
  • 内部基准电压(VREFINT)需要特定温度下校准
  • 多通道采样时,采样时间总和应小于触发周期

调试技巧

  • 使用ST-Link Utility监测内存数据
  • 通过Breakpoint检查DMA传输完成标志
  • 测量实际采样率与理论值对比
  • 检查电源稳定性对ADC精度的影响

通过上述配置,系统将实现定时器触发ADC多通道采样,并通过DMA自动传输数据到内存,软件只需定期读取内存中的转换结果即可。

完整工程:https://download.csdn.net/download/qq_28317813/91654486

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【STM32CubeMX学习指南---ADC多通道采集与DMA传输】
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!