CubeMX 实现 STM32F407 ADC_DMA3 通道:采样率计算与配置
·
STM32F407 ADC_DMA 三通道配置与采样率计算
1. 采样率计算原理
- ADC 时钟频率:由 APB2 时钟分频得到,STM32F407 最大支持 36 MHz。
若 APB2 时钟为 84 MHz,需分频至 ≤36 MHz(例如 4 分频 → $f_{\text{ADC}} = 84 \text{ MHz}/4 = 21 \text{ MHz}$)。 - 单通道转换时间:
$$T_{\text{conv}} = T_{\text{sampling}} + 12.5 \text{ 周期}$$
其中 $T_{\text{sampling}}$ 为采样周期(可配置为 3~480 周期),12.5 周期为固定转换时间。 - 三通道总转换时间:
$$T_{\text{total}} = 3 \times (T_{\text{sampling}} + 12.5) \text{ 周期}$$ - 单通道采样率:
$$f_{\text{sample}} = \frac{f_{\text{ADC}}}{T_{\text{total}}} = \frac{f_{\text{ADC}}}{3 \times (T_{\text{sampling}} + 12.5)}$$
2. CubeMX 配置步骤
-
时钟配置:
- 在 Clock Configuration 中设置 APB2 时钟(默认 84 MHz)。
- 在 ADC 预分频器选择 PCLK2 divided by 4(确保 $f_{\text{ADC}} = 21 \text{ MHz} ≤ 36 \text{ MHz}$)。
-
ADC 设置:
- 模式:Independent mode
- 扫描模式:Enabled(多通道扫描)
- 连续转换:Enabled
- DMA 连续请求:Enabled
- 数据对齐:Right alignment
- 通道数:Number of Conversion = 3
-
通道配置(Rank 选项卡):
Rank Channel Sample Time 1 CH0 84 Cycles 2 CH1 84 Cycles 3 CH2 84 Cycles -
DMA 配置:
- 添加 DMA 请求 → ADCx
- 模式:Circular(循环模式)
- 数据宽度:Half Word(16 位)
- 内存地址自增:Enabled
3. 采样率计算示例
- 参数:
$f_{\text{ADC}} = 21 \text{ MHz}$, $T_{\text{sampling}} = 84 \text{ cycles}$ - 计算:
$$T_{\text{total}} = 3 \times (84 + 12.5) = 289.5 \text{ 周期}$$
$$f_{\text{sample}} = \frac{21 \times 10^6}{289.5} \approx 72.5 \text{ kHz(每通道)}$$
即每通道采样率约 72.5 kSPS。
4. 关键代码实现
// 定义缓冲区(存储三通道数据)
uint16_t adc_buffer[3];
// 启动ADC+DMA
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, 3);
// DMA传输完成回调函数(中断模式)
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
// 此处读取adc_buffer[0], [1], [2] 获取三通道数据
}
5. 注意事项
- 采样时间选择:
- 较高采样时间(如 480 周期)可提高精度但降低采样率。
- 最小采样时间(3 周期)时,需确保输入信号阻抗 ≤10 kΩ。
- DMA 缓冲区:
- 缓冲区大小需匹配通道数(本例为 3)。
- 内存地址自增必须开启,以存储多通道数据。
- 时钟验证:
在生成的代码中检查hadc1.Init.ClockPrescaler是否为ADC_CLOCK_SYNC_PCLK_DIV4。 - 性能限制:
三通道总采样率上限为 $f_{\text{ADC}} / 12.5 \approx 1.68 \text{ MSPS}$(当 $T_{\text{sampling}}=3$ 时)。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)