1. 项目背景与需求分析
最近在做一个电源采集板的项目,使用 STM32H743 芯片实现三路 10kHz 电流采集和三路差分电压采集。电流采集需要精确的定时采样,而电压采集则对频率没有严格要求。为了减少 CPU 占用,我选择了定时器触发 ADC 采样配合 DMA 传输的方案。这样 CPU 只需要在数据准备好后处理即可,大大提高了系统效率。
在实际项目中,高频数据采集对实时性要求很高。如果直接用 CPU 控制 ADC 采样,会占用大量资源,甚至可能导致数据丢失。而定时器触发 ADC 配合 DMA 传输,就像是在工厂里设置了一条自动化生产线:定时器负责发出'开始生产'的信号,ADC 负责'生产'数据,DMA 则负责'搬运'数据到指定仓库,整个过程不需要 CPU 参与。
这种方案特别适合需要高频采样的应用场景,比如电源监控、电机控制、音频处理等。STM32H743 作为高性能 MCU,其 ADC 和 DMA 功能非常强大,但配置起来也有些坑需要注意。接下来我就详细分享下我的实战经验。
2. 硬件平台与开发环境
我使用的是 STM32H743ZI 芯片,这是 ST 公司基于 Cortex-M7 内核的高性能微控制器,主频高达 480MHz,内置 3 个 16 位 ADC,支持高速数据采集。开发环境用的是 STM32CubeMX 6.15.0 和 H7 HAL 库 1.12.1,编译器是 Keil MDK。
选择这个版本是因为经过测试比较稳定,新版本有时会有兼容性问题。建议大家在开始项目前,先确定好工具链版本,避免中途升级带来的不必要的麻烦。硬件连接方面,三路电流信号分别接到 ADC1 的 IN3、IN10 和 IN15 引脚,采用单端输入模式。差分电压则使用 ADC2 和 ADC3 的差分输入通道。
STM32H743 的 ADC 时钟最高不能超过 36MHz,这一点要特别注意。我用的系统时钟配置是 ADC 时钟 64MHz 经过 2 分频后得到 32MHz 的工作频率,既满足了性能要求,又保证了稳定性。如果时钟配置超标,可能会导致采样数据不准甚至 ADC 模块工作异常。
3. CubeMX 关键配置详解
3.1 ADC 模块配置
打开 CubeMX 后,首先配置 ADC1 模块。在 Parameter Settings 标签页中,需要关注几个关键设

