1. STM32内部温度传感器基础原理
STM32系列微控制器内部集成了一个温度传感器,这个传感器实际上是一个与芯片制造工艺相关的PN结温度传感器。它的工作原理基于半导体材料的温度特性:随着温度升高,PN结的正向压降会线性下降。这个特性被巧妙地集成在STM32芯片内部,通过ADC模块进行电压采集,再通过特定公式换算成温度值。
不同系列的STM32芯片,其内部温度传感器的特性参数略有差异。以常见的STM32F103系列为例:
- 传感器连接在ADC1的通道16上
- 典型测量范围:-40℃到125℃
- 在25℃时的典型输出电压:1.43V
- 温度系数:4.3mV/℃
- 精度:±1.5℃(这个精度受多种因素影响,我们后面会详细讨论)
温度计算的核心公式基于线性关系:
[ T = 25 + \frac{V_{25} - V_{sense}}{Avg_Slope} ]
其中:
- ( V_{25} )是25℃时的传感器输出电压
- ( V_{sense} )是当前测量的传感器电压
- ( Avg_Slope )是温度系数(单位:V/℃)
注意:这个公式中的参数值会因STM32系列不同而变化,例如STM32F4系列的V25是0.76V,Avg_Slope是2.5mV/℃。使用时务必查阅对应芯片的数据手册。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件准备与电路设计
2.1 最小系统要求
使用STM32内部温度传感器不需要任何外部电路,这是它最大的优势之一。但为了确保测量精度,我们需要关注以下几个硬件要点:
- 电源稳定性:VDDA(模拟电源)必须干净稳定,建议在VDDA和VSSA之间并联0.1μF和1μF的去耦电容
- 参考电压:ADC的参考电压直接影响测量精度,STM32F103的ADC参考电压就是VDDA
- PCB布局:虽然不需要外部传感器,但要避免将MCU放置在发热元件附近,以免影响温度测量准确性
2.2 内部温度传感器的使能
内部温度传感器和内部参考电压(Vrefint)共享同一个使能位(TSVREFE)。在标准库中,我们通过以下函数使能:
c复制ADC_TempSensorVrefintCmd(ENABLE);
这个调用必须在ADC初始化之前完成,否则温度传感器将无法正常工作。
3. 标准库函数实现详解
3.1 ADC初始化配置
以下是完整的ADC初始化代码,专门针对内部温度传感器进行了优化:
c复制void ADC1_TempSensor_Init(void) {
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 1. 开启相关外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
// 2. 配置ADC时钟(PCLK2的6分频,72MHz/6=12MHz)
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
// 3. 虽然内部传感器不占用GPIO,但仍需初始化ADC通道对应的GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 通道16对应PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 4. 使能内部温度传感器和Vrefint
ADC_TempSensorVrefintCmd(ENABLE);
// 5. ADC参数配置
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
A
