stm32h7ADC
时间: 2025-07-08 12:48:00 浏览: 8
### STM32H7 ADC 配置与使用指南
STM32H7系列微控制器集成了高性能的模数转换器(ADC),支持多通道、高精度模拟信号采集。该系列MCU通常配备多个12位ADC模块,具有多种采样模式和触发方式,适用于工业控制、传感器数据采集等场景。
#### 1. ADC 主要特性
- **分辨率**:12位,支持8位、10位、12位和14位过采样模式。
- **采样率**:高达5 MSPS(具体取决于配置和时钟设置)[^1]。
- **通道数量**:最多支持36个外部通道,支持规则组和注入组两种转换序列。
- **触发源**:支持软件触发、定时器触发、外部中断等多种触发方式。
- **低功耗模式**:支持待机、休眠和断电模式以降低功耗。
#### 2. ADC 引脚配置
在STM32H7中,ADC的输入引脚通常与其他外设共享多功能引脚。需要通过GPIO配置将引脚设置为模拟输入模式。例如,在使用ADC1_INP1时,需将PA0引脚配置为`GPIO_ANALOG`模式:
```c
stm32_configgpio(GPIO_ADC1_INP1); // 假设已定义 GPIO_ADC1_INP1 为 PA0
```
引脚映射信息可在`stm32h7x3xx_pinmap.h`头文件中找到,确保每个引脚功能定义正确。
#### 3. ADC 初始化步骤
以下是一个典型的初始化流程:
##### (1) 启用ADC时钟
通过RCC寄存器启用相应ADC模块的时钟:
```c
modifyreg32(STM32_RCC_AHB4ENR, 0, RCC_AHB4ENR_ADCEN);
```
##### (2) 配置ADC时钟源
STM32H7的ADC时钟可来源于系统时钟(SYSCLK)、PLL2或PLL3输出,需根据应用需求选择合适的预分频系数。
##### (3) 配置ADC模式
设置单次/连续转换模式、数据对齐方式、扫描方向等参数:
```c
adc->CR &= ~ADC_CR_ADVREGEN; // 关闭电压调节器
adc->CR |= ADC_CR_ADVREGEN_0; // 启动调节器
```
##### (4) 设置通道序列
配置规则组通道顺序及采样周期:
```c
adc->SQR1 = ADC_SQR1_L(0) | ADC_SQR1_SQ1(ADC_CHANNEL_1); // 单通道,转换一次
adc->SMPR1 |= ADC_SMPR1_SMP1(ADC_SAMPLETIME_24CYCLES); // 设置采样时间
```
##### (5) 校准ADC
在首次使用前进行校准操作以提高精度:
```c
adc->CR |= ADC_CR_ADCAL;
while ((adc->ISR & ADC_ISR_EOCAL) == 0); // 等待校准完成
adc->ISR |= ADC_ISR_EOCAL; // 清除标志位
```
##### (6) 启动ADC
使能ADC并开始转换:
```c
adc->CR |= ADC_CR_ADEN;
while (!(adc->ISR & ADC_ISR_ADRDY)); // 等待ADC就绪
```
##### (7) 读取转换结果
从数据寄存器中获取转换值:
```c
uint16_t result = adc->DR;
```
#### 4. 中断与DMA支持
对于高速或多通道采集,推荐使用DMA自动传输转换结果,避免CPU负担过高。同时,可通过EOC(End of Conversion)中断实现异步通知机制。
示例DMA配置代码如下:
```c
dma_channel_setup(DMA_STREAM, DMA_CHANNEL_ADC, (uint32_t)&adc->DR, (uint32_t)buffer, BUFFER_SIZE);
dma_enable(DMA_STREAM);
adc->CFGR |= ADC_CFGR_DMAEN; // 启用DMA
```
#### 5. 常见问题排查
- **ADC不工作**:检查时钟是否启用,GPIO是否配置为模拟输入。
- **转换值异常**:确认参考电压是否稳定,是否进行了校准。
- **DMA未触发**:检查DMA通道是否正确绑定ADC,并确认DMA中断是否开启。
- **采样率不足**:优化采样周期设置,考虑使用过采样或硬件触发。
---
阅读全文
相关推荐


















