STM32F103RC 芯片中,ADC(模数转换器)的18个复用通道包括16个外部模拟输入通道(对应GPIO引脚)和2个内部信号通道(温度传感器和内部参考电压)。
的18个ADC通道包括16个外部引脚+2个内部信号,通过复用器分时采样。内部通道(温度/VREFINT)无需外部电路,但需注意采样时间和校准。多通道应用时,优先使用扫描模式+DMA以提高效率。
·
在 STM32F103RC 芯片中,ADC(模数转换器)的18个复用通道包括16个外部模拟输入通道(对应GPIO引脚)和2个内部信号通道(温度传感器和内部参考电压)。以下是详细解析:
1. 16个外部通道(IN0~IN15)
-
作用:测量外部模拟信号(如传感器、电位器、电池电压等)。
-
对应引脚(以ADC1为例):
通道编号 引脚 复用功能 ADC1_IN0 PA0 外部信号输入0 ADC1_IN1 PA1 外部信号输入1 … … … ADC1_IN9 PB1 外部信号输入9 ADC1_IN10 PC0 外部信号输入10 ADC1_IN11 PC1 外部信号输入11 … … … ADC1_IN15 PC5 外部信号输入15 📌 注意:
- STM32F103RC的ADC1和ADC2共享这16个外部通道,ADC3有独立通道(部分型号支持)。
- 实际可用引脚需参考芯片数据手册的引脚定义表(如PC2~PC5可能用于其他功能)。
-
关键特性:
- 输入电压范围:0~VREF+(通常接3.3V)。
- 支持单次/连续转换、扫描模式、DMA传输。
2. 2个内部通道(IN16和IN17)
无需外部引脚,直接测量芯片内部信号:
-
温度传感器(IN16)
- 功能:监测芯片内部温度(精度约±1.5℃)。
- 启用方法:
ADC_TempSensorVrefintCmd(ENABLE); // 开启内部通道 - 采样要求:
因高阻抗特性,需设置较长采样时间(推荐239.5周期):ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5); - 温度计算公式(参考数据手册):
[
T(℃) = \frac{(V_{25} - V_{Sense})}{Avg_Slope} + 25
]
其中:- (V_{25}):25℃时的传感器电压(典型值1.43V)。
- (Avg_Slope):温度系数(4.3mV/℃)。
-
内部参考电压(IN17)
- 功能:测量芯片内部基准电压(典型值1.2V),用于校准或电源监测。
- 使用方法:
ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 1, ADC_SampleTime_239Cycles5); - 应用场景:
- 检测VDDA电压波动(通过比较VREFINT与理论值)。
- 提高ADC测量精度(动态校准参考电压)。
3. 通道复用机制
-
分时复用:通过多路开关(MUX)切换通道,同一时间仅一个通道被采样。
-
配置方式:
- 规则组(Regular Group):用于常规多通道采样(按顺序转换)。
- 注入组(Inject Group):用于高优先级中断采样(可打断规则组)。
-
示例代码(扫描模式测量IN0、IN5、IN16):
// 配置规则组通道 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); // PA0 ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_55Cycles5); // PA5 ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 3, ADC_SampleTime_239Cycles5); // 温度传感器 // 启用扫描模式 ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_NbrOfChannel = 3; ADC_Init(ADC1, &ADC_InitStructure); // 启动DMA传输(可选) ADC_DMACmd(ADC1, ENABLE);
4. 关键注意事项
-
参考电压(VREF+)
- 若需高精度测量,建议外接低噪声基准电压源(如2.5V或3.0V)到VREF+引脚。
- 默认情况下,VREF+与VDDA(3.3V)相连。
-
采样时间选择
信号类型 推荐采样时间 原因 外部低阻抗信号 55.5周期 快速稳定(如电位器) 内部通道 239.5周期 高阻抗信号需更长采样时间 -
校准与精度
- 上电后需执行ADC校准:
ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); - 避免在ADC转换期间操作相关寄存器。
- 上电后需执行ADC校准:
5. STM32F103RC的ADC通道总结
| 通道类型 | 通道编号 | 信号源 | 典型应用场景 |
|---|---|---|---|
| 外部通道 | IN0~IN15 | PA0~PC5 | 传感器电压、电池监测 |
| 温度传感器 | IN16 | 芯片内部温度 | 过热保护、环境监测 |
| 内部参考电压 | IN17 | VREFINT(≈1.2V) | ADC校准、电源稳定性检测 |
6. 常见问题解答
Q1:如何判断某个引脚是否支持ADC?
A1:查阅芯片数据手册的引脚定义表(Pinout and Pin Definitions),标注"ADCx_INy"的引脚即为ADC通道(如PC3标注"ADC1_IN13"表示支持ADC1通道13)。
Q2:内部温度传感器的测量值为何不准确?
A2:
- 温度传感器出厂未校准,仅适合监测相对温度变化。
- 确保采样时间≥239.5周期,并参考数据手册的公式计算。
Q3:能否同时使用ADC1和ADC2采样?
A3:可以!ADC1和ADC2可独立工作(需注意通道冲突),例如:
- ADC1测量IN0(PA0)和IN16(温度)。
- ADC2测量IN1(PA1)和IN17(VREFINT)。
7. 代码示例:内部温度传感器读取
float Read_ChipTemperature(void) {
ADC_TempSensorVrefintCmd(ENABLE); // 开启内部通道
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
uint16_t adcValue = ADC_GetConversionValue(ADC1);
// 计算温度(公式参考数据手册)
float V_sense = adcValue * 3.3f / 4095; // 假设VREF+=3.3V
float temperature = (1.43f - V_sense) / 0.0043f + 25.0f;
return temperature;
}
总结
- STM32F103RC 的18个ADC通道包括16个外部引脚+2个内部信号,通过复用器分时采样。
- 内部通道(温度/VREFINT)无需外部电路,但需注意采样时间和校准。
- 多通道应用时,优先使用扫描模式+DMA以提高效率。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)