stm32f103vet6芯片内嵌3个12位的模拟/数字转换器(ADC),分别为ADC1、ADC2、ADC3。
STM32的ADC多达18 个通道,其中外部的 16 个通道就是框图中的 ADCx_IN0 、 ADCx_IN1 … ADCx_IN5 。那么这16 个通道对应着不同的 IO 口?或者说每个通道到底对应哪个引脚呢?
(1)16个外部通道:
简单的说就是芯片上有16个引脚是可以接到模拟电压上进行电压值检测的。16个通道不是独立的分配给3个转换器(ADC1、ADC2、ADC3)使用,有些通道是被多个转换器共用的。
(2)内部通道:
其 ADC1/2/3 还有2个内部通道:一个是内部温度传感器,一个是内部参考电压。
ADC1 的通道 16 连接到了芯片内部的温度传感器, 通道17连接到了Vrefint ;
ADC2 的模拟通道16 和 17 连接到了内部的 VSS;
ADC3 的模拟通道 9 、 14 、 15 、 16 和 17 连接到了内部VSS 。
具体参考下图:
下面看看16个通道在固件库的宏定义:
/** @defgroup ADC_channels */
#define ADC_Channel_0 ((uint8_t)0x00)
#define ADC_Channel_1 ((uint8_t)0x01)
#define ADC_Channel_2 ((uint8_t)0x02)
#define ADC_Channel_3 ((uint8_t)0x03)
#define ADC_Channel_4 ((uint8_t)0x04)
#define ADC_Channel_5 ((uint8_t)0x05)
#define ADC_Channel_6 ((uint8_t)0x06)
#define ADC_Channel_7 ((uint8_t)0x07)
#define ADC_Channel_8 ((uint8_t)0x08)
#define ADC_Channel_9 ((uint8_t)0x09)
#define ADC_Channel_10 ((uint8_t)0x0A)
#define ADC_Channel_11 ((uint8_t)0x0B)
#define ADC_Channel_12 ((uint8_t)0x0C)
#define ADC_Channel_13 ((uint8_t)0x0D)
#define ADC_Channel_14 ((uint8_t)0x0E)
#define ADC_Channel_15 ((uint8_t)0x0F)
#define ADC_Channel_16 ((uint8_t)0x10)
#define ADC_Channel_17 ((uint8_t)0x11)
#define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16)
#define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17)
16个通道的引脚都在上面的图中,拿其中的一个进行说明:
ADC123_IN10:字母“ADC”不用多说,模拟/数字转换器,“123”代表它被3个(ADC1、ADC2、ADC3)转换器共用的引脚,“10”对应刚才那张宏定义图里面的ADC_Channel_10,这样就能找到每个通道对应的引脚了。