STM32F407 CubeMX 配置:3 通道 ADC_DMA 采集完整步骤(含时钟树)
1. 创建工程与基础配置
- 打开STM32CubeMX,创建新工程,选择MCU型号:
STM32F407ZGTx(或其他F4系列型号)。 - 系统核心 → SYS:
Debug:Serial Wire(保留SWD调试接口)。
- 连接性 → RCC:
High Speed Clock (HSE):Crystal/Ceramic Resonator(启用外部晶振)。
2. 时钟树配置
- 目标:系统时钟 168MHz,ADC时钟 ≤36MHz(最大允许值)。
- 步骤:
- 输入时钟源:
HSE(假设外部晶振 8MHz)。 - 配置PLL:
PLLM= 8 → 输入分频:$f_{in} = \frac{8MHz}{8} = 1MHz$PLLN= 336 → 倍频:$f_{VCO} = 1MHz \times 336 = 336MHz$PLLP= 2 → 系统时钟:$f_{sys} = \frac{336MHz}{2} = 168MHz$
- APB1预分频器:
/4→ $f_{APB1} = 42MHz$ - APB2预分频器:
/2→ $f_{APB2} = 84MHz$ - ADC预分频器:选择
/6→ $f_{ADC} = \frac{84MHz}{6} = 14MHz$(满足 ≤36MHz)
- 输入时钟源:
graph LR
HSE[8MHz HSE] --> PLLM[/8/] --> |1MHz| PLLN[x336] --> |336MHz| PLLP[/2/] --> SYSCLK[168MHz]
SYSCLK --> APB1_DIV[/4/] --> APB1[42MHz]
SYSCLK --> APB2_DIV[/2/] --> APB2[84MHz]
APB2 --> ADC_DIV[/6/] --> ADC[14MHz]
3. ADC配置
- 模拟 → ADC1:
Mode:独立模式(Independent mode)。Scan Conversion Mode:Enabled(多通道扫描)。Continuous Conversion Mode:Enabled(连续转换)。DMA Continuous Requests:Enabled(DMA连续传输)。End Of Conversion Selection:EOC after each sequence。
- 通道配置:
- 选择3个ADC通道(例如
IN0、IN1、IN2)。 - 设置采样时间:15 Cycles(平衡速度和精度)。
- 设置Rank顺序:
1→2→3。
- 选择3个ADC通道(例如
4. DMA配置
- 系统核心 → DMA → 添加DMA请求:
DMA Request:ADC1。Direction:Peripheral To Memory。Mode:Circular(循环模式)。Data Width:- Peripheral:
Half Word(ADC数据为16位)。 - Memory:
Half Word。
- Peripheral:
Increment Address:- Memory:Enabled(自动递增存储地址)。
- Peripheral:Disabled(固定地址)。
5. 引脚分配
- 自动分配ADC通道引脚(例如
PA0、PA1、PA2)。 - 确认引脚状态为
Analog(无冲突)。
6. 生成代码
- 项目管理 → 设置工程名称/路径/IDE(如MDK-ARM)。
- 代码生成器:
- 勾选
Generate peripheral initialization as a pair of .c/.h files。
- 勾选
- 点击 GENERATE CODE。
用户代码实现(Keil工程)
1. 定义变量
// main.c
#define ADC_CHANNELS 3
uint16_t adcBuffer[ADC_CHANNELS]; // 存储ADC转换结果
2. 启动ADC-DMA
// main()函数内
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcBuffer, ADC_CHANNELS);
3. 数据处理(示例)
// 在while(1)中读取数据
printf("Ch0: %hu, Ch1: %hu, Ch2: %hu\n",
adcBuffer[0], adcBuffer[1], adcBuffer[2]);
HAL_Delay(500);
4. 关键函数说明
HAL_ADC_Start_DMA():- 参数1:ADC句柄(
&hadc1)。 - 参数2:目标内存地址(
adcBuffer)。 - 参数3:转换长度(3通道)。
- 参数1:ADC句柄(
验证步骤
- 烧录程序,连接串口调试工具。
- 输入电压范围:0~3.3V(对应ADC值 0~4095)。
- 观察输出:
表示通道0电压 ≈1.65V,通道1电压 ≈0.82V,通道2电压=3.3V。Ch0: 2048, Ch1: 1024, Ch2: 4095
注意:
- 若数据异常,检查时钟树配置是否超频(ADC时钟≤36MHz)。
- DMA传输模式必须为
Circular,否则需手动重启传输。- 采样时间过短可能导致精度下降,可增至
480 Cycles(低速高精度场景)。
STM32F407 ADC_DMA配置教程
388

被折叠的 条评论
为什么被折叠?



