STM32F407 ADC 3通道硬件触发配置指南
1. 时钟使能与GPIO配置
- 使能ADC和GPIO时钟:
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // 使能ADC1时钟 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // 使能GPIOA时钟 - 配置GPIO为模拟输入模式(以通道0/1/2为例):
// PA0(Ch0), PA1(Ch1), PA2(Ch2) 设为模拟模式 GPIOA->MODER |= (3 << (0*2)) | (3 << (1*2)) | (3 << (2*2));
2. ADC基础配置
- 设置独立模式与扫描模式:
ADC1->CR1 &= ~ADC_CR1_DUALMOD; // 独立模式 ADC1->CR1 |= ADC_CR1_SCAN; // 扫描模式 - 配置数据对齐(右对齐):
ADC1->CR2 &= ~ADC_CR2_ALIGN; // 右对齐数据
3. 硬件触发配置
- 选择触发源(以定时器2触发为例):
ADC1->CR2 |= ADC_CR2_EXTEN_0; // 上升沿触发 (EXTEN[1:0]=01) ADC1->CR2 |= ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_3; // EXTSEL[3:0]=1100 (TIM2_TRGO) - 使能外部触发:
ADC1->CR2 |= ADC_CR2_EXTTRIG; // 硬件触发使能
4. 通道与序列配置
- 设置规则序列长度(3通道):
ADC1->SQR1 &= ~ADC_SQR1_L; // 清除长度位 ADC1->SQR1 |= (2 << 20); // L[3:0]=0010 (3通道转换) - 配置转换序列(例:通道0→1→2):
ADC1->SQR3 = (0 << 0) | (1 << 5) | (2 << 10); // SQ1=Ch0, SQ2=Ch1, SQ3=Ch2
5. 采样时间配置
- 设置各通道采样周期(例:480周期):
ADC1->SMPR2 |= (7 << 0) | (7 << 3) | (7 << 6); // SMP0=SMP1=SMP2=111(480周期)
6. 启动ADC
- 使能ADC并启动转换:
ADC1->CR2 |= ADC_CR2_ADON; // 开启ADC HAL_Delay(1); // 等待稳定 ADC1->CR2 |= ADC_CR2_SWSTART; // 首次启动转换
7. 关键寄存器说明
| 寄存器 | 功能 | 配置值 |
|---|---|---|
| CR2 | 触发控制 | EXTTRIG=1 EXTEN[1:0]=01 EXTSEL[3:0]=1100 |
| SQR1 | 规则序列长度 | L[3:0]=0010 |
| SQR3 | 通道序列 | SQ1=0 SQ2=1 SQ3=2 |
| SMPR2 | 通道0/1/2采样时间 | SMPx=111 |
注意:
- 硬件触发源需同步配置定时器(例:TIM2->CR2 |= TIM_CR2_MMS_1 输出TRGO)
- 转换结果通过DMA或中断读取,需单独配置
- 使用前需执行ADC校准(参考手册12.4节)
1800

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



