这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 如何精准读取STM32内部温度传感器数据

共1条 1/1 1 跳转至

如何精准读取STM32内部温度传感器数据

菜鸟
2025-11-28 14:22:51     打赏

作为一名嵌入式工程师,监控芯片温度是保证系统稳定运行的重要任务。大多数STM32微控制器内部都集成了温度传感器,但如何正确读取并获取准确数值却暗藏玄机。

本文将深入探讨STM32内部温度传感器的工作原理、实现方法。

STM32 系列 MCU 内部温度传感器是一枚二极管型传感器,其输出电压与温度成线性关系。

温度传感器的输出经片内多路复用进入 ADC 通道,再由 ADC 转换为数字值。

厂商在数据手册中提供了两点标定值(在 30°C 和 130°C 时 ADC 采样值 TS_CAL1 与 TS_CAL2,要根据芯片数据手册确定)及对应温度,读出 ADC 值后,可使用线性插值公式计算当前温度:


图片



图片


  • TS_CAL2是在 TS_CAL2_TEMP温度下获取的温度传感器校准值(有关 TS_CAL2 的具体值,请参阅数据手册)。

  • TS_CAL1是在TS_CAL1_TEMP温度下获取的温度传感器校准值(有关 TS_CAL1 的具体值,请参阅数据手册)。

  • TS_DATA是模数转换器(ADC)转换后的实际温度传感器输出值。

正确配置ADC是获取温度数据的基础,在CubeMX的Analog选项卡中,选择ADC模块,勾选“Temperature Sensor Channel”。

对于STM32H7/U5等系列,还需启用内部通道转换(设置VSENSESEL位)。并且配置采样通道。


图片


在启动 ADC 转换前,进行一次 ADC 校准:

ADC1->CR2 |= ADC_CR2_RSTCAL;          // 复位校准寄存器
while (ADC1->CR2 & ADC_CR2_RSTCAL);   // 等待完成
ADC1->CR2 |= ADC_CR2_CAL;             // 启动校准
while (ADC1->CR2 & ADC_CR2_CAL);      // 等待完成

在 STM32 的 Flash 内,地址 TS_CAL1(0x1FFF75A8)、TS_CAL2(0x1FFF75CA )存放对应 30°C 和 110°C 时的校准 ADC 值。

注意,不同STM32系列的温度传感器通道和校准值地址有差异。


图片


设计驱动程序如下:

float Read_Temperature(void) {
    HAL_ADC_Start(&hadc1);
    while (HAL_ADC_GetState(&hadc1) != HAL_ADC_STATE_READY);
    uint32_t adc_value = HAL_ADC_GetValue(&hadc1);
    uint16_t ts_cal1 = *(__IO uint16_t *)0x1FFF75A8;
    uint16_t ts_cal2 = *(__IO uint16_t *)0x1FFF75CA;
    float temperature = (float)(130 - 30) / (ts_cal2 - ts_cal1) * (adc_value - ts_cal1) + 30;
    return temperature;
}





关键词: STM32     传感器    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]