STM32F103RC中ADC1和ADC2通道复用
以下是STM32F103RC中ADC1和ADC2通道复用的示意图及文字说明,帮助直观理解这种共享关系:
ADC1/ADC2引脚复用示意图
GPIO引脚       ADC1通道        ADC2通道
┌─────────┐   ┌─────────┐   ┌─────────┐
│  PA0    ├───┤ ADC1_IN0├─┬─┤ ADC2_IN0│
├─────────┤   ├─────────┤ │ ├─────────┤
│  PA1    ├───┤ ADC1_IN1├─┬─┤ ADC2_IN1│
├─────────┤   ├─────────┤ │ ├─────────┤
│  ...    │   │   ...   │ │ │   ...   │
├─────────┤   ├─────────┤ │ ├─────────┤
│  PC5    ├───┤ADC1_IN15├─┬─┤ADC2_IN15│
└─────────┘   └─────────┘ │ └─────────┘│
内部信号通道               │
┌─────────────────────┐   │
│ ADC1_IN16 (温度传感器)│  │
├─────────────────────┤   │
│ ADC1_IN17 (VREFINT)  │  │
└─────────────────────┘   │││
┌─────────────────────┐   │
│ ADC2_IN16 (温度传感器├───┘
├─────────────────────┤
│ ADC2_IN17 (VREFINT) │
└─────────────────────┘
以下是用简单示意图来帮助理解STM32F103RC的ADC1和ADC2外部通道与GPIO引脚关系:
整体框架图
 +---------------------+| STM32F103RC芯片    |+---------------------+|| (内部连接)|+---------------------+| ADC1模块           |+---------------------+|| (复用连接)|+---------------------+| GPIO引脚组(PA0 - PC5)|+---------------------+|| (复用连接)|+---------------------+| ADC2模块           |+---------------------+
具体通道对应关系展开图
| GPIO引脚 | ADC1通道 | ADC2通道 | 
|---|---|---|
| PA0 | IN0 | IN0 | 
| PA1 | IN1 | IN1 | 
| PA2 | IN2 | IN2 | 
| PA3 | IN3 | IN3 | 
| PA4 | IN4 | IN4 | 
| PA5 | IN5 | IN5 | 
| PA6 | IN6 | IN6 | 
| PA7 | IN7 | IN7 | 
| PB0 | IN8 | IN8 | 
| PB1 | IN9 | IN9 | 
| PC0 | IN10 | IN10 | 
| PC1 | IN11 | IN11 | 
| PC2 | IN12 | IN12 | 
| PC3 | IN13 | IN13 | 
| PC4 | IN14 | IN14 | 
| PC5 | IN15 | IN15 | 
这表示STM32F103RC芯片内,ADC1和ADC2的16个外部通道(IN0 - IN15 )在物理上都连接到了PA0 - PC5这些GPIO引脚上,在使用时可根据需求配置这些引脚作为ADC通道来采集模拟信号 。
关键点解析
-  外部通道共享 - 每个GPIO引脚(如PA0)同时连接到ADC1和ADC2的对应通道。
- 例如:PA0同时是ADC1_IN0和ADC2_IN0,但同一时间只能被一个ADC模块采样。
 
-  内部通道独立 - 温度传感器(IN16)和内部参考电压(IN17)在ADC1和ADC2中逻辑上独立,但物理上来自同一个传感器源。
 
-  冲突示例 - 若同时配置ADC1_IN0和ADC2_IN0采样PA0,会导致硬件竞争,结果不可预测。
 
- 若同时配置
实际电路等效模型
PA0引脚│├───[ADC1 MUX]─── ADC1_IN0│└───[ADC2 MUX]─── ADC2_IN0
- MUX(多路复用器):STM32内部通过电子开关切换ADC1或ADC2连接到引脚。
使用规则总结
-  允许的操作 - ADC1采样PA0,ADC2采样PA1(不同引脚)。
- ADC1和ADC2分时复用PA0(非同步)。
 
-  禁止的操作 - ADC1和ADC2同时采样PA0(硬件冲突)。
- ADC1和ADC2同时启用扫描模式并包含同一引脚。
 
代码示例(安全用法)
// 安全配置:ADC1用PA0,ADC2用PA1
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); // PA0
ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5); // PA1// 危险配置(冲突!)
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); // PA0
ADC_RegularChannelConfig(ADC2, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); // PA0
通过这种共享设计,STM32在有限的引脚下实现了多ADC灵活性,但需开发者注意合理分配资源。
