STM32 HAL库ADC多通道采样+DMA传输实战

0
回复
102
查看
[ 复制链接 ]

52

主题

2

回帖

196

积分

版主

积分
196
2025-6-14 10:30:14 显示全部楼层 阅读模式



1. 功能概述
通过DMA实现STM32F4的3个ADC通道(PA0/PA1/PA2)自动采集,避免CPU干预,适合高速采样场景。
2. 硬件准备
  • STM32F407开发板
  • 3个电位器(连接PA0/PA1/PA2)
  • 示波器(验证时序,可选)

3. 软件配置3.1 CubeMX设置[backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]c
[color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

复制

[color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

下载





/* ADC1 配置 */- Mode: Independent mode- Scan Conversion Mode: Enabled- Continuous Conversion Mode: Enabled- DMA Continuous Requests: Enabled- Number Of Conversion: 3- Rank1: Channel0, Sampling Time 84 Cycles- Rank2: Channel1, Sampling Time 84 Cycles- Rank3: Channel2, Sampling Time 84 Cycles/* DMA配置 */- Mode: Circular- Data Width: Half Word (ADC结果为12)
3.2 关键代码[backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]c
[color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

复制

[color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

下载





// 定义变量uint16_t adcResults[3; // 存储3通道结果// 启动ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcResults, 3);// DMA传输完成回调函数void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {    // 此处添加数据处理代码(例如打印到串口)    printf("CH0:%d, CH1:%d, CH2:%d\n",            adcResults[0, adcResults[1, adcResults[2);}
4. 原理解析4.1 时序图[backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]text
[color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

复制

[color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

下载





[ADC启动] → [DMA请求] → [传输数据] → [循环触发]   ↑____________↓
(此处插入配图:ADC_DMA_Flow.png)
4.2 性能对比
采样方式
最大采样率 (F407@168MHz)

轮询100kS/s
中断500kS/s
DMA2MS/s

5. 常见问题
Q1: 数据错位怎么办?
→ 检查CubeMX中的Conversion Rank顺序是否与数组索引匹配。
Q2: DMA不触发?
→ 确认HAL_ADC_Start_DMA()在初始化后被调用。
6. 源码下载
[color=rgb(var(--ds-rgb-link))][url=]GitHub仓库链接[/url] (提供完整工程文件,包含CubeMX配置)

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则