• 正文
  • 相关推荐
申请入驻 产业图谱

APM32F4xx 内部温度传感器 TSENSOR 完整开发指南|AN1091 例程深度解读

17小时前
225
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

APM32F4xx 系列内部集成温度传感器,可实时监测芯片内核温度,广泛用于过热保护、功耗监测、环境温度估算等场景。AN1091 官方例程基于 ADC1_CH16 实现温度采集,并通过串口输出电压与温度值,简单稳定、可直接移植量产。本文完全依照官方手册,用最直白的工程化讲解,带你快速实现芯片内部温度采集。

资料获取:AN1091_APM32F4xx_TSensor demo例程

1. 内部温度传感器 TSENSOR 基础原理

APM32F4xx 内部温度传感器有以下关键特性:

  • 连接通道:ADC1_CH16(固定通道)
  • 测温范围:-40℃ ~ +125℃
  • 采样时间建议:≥17.1μs
  • 精度:典型误差 ±4℃ 以内
  • 供电:内部直接连接,无需任何外围电路

温度计算公式(官方实测校准)

T = (Vsensor - 0.7782) / 0.0024 + 28

  • Vsensor:温度传感器输出电压(V)
  • 0.7782V:28℃ 时的基准电压
  • 0.0024V/℃:温度斜率
  • 结果单位:℃

2. 硬件实现(零外围)

  • 无需任何外部电路
  • 使用 ADC1_CH16(内部自动连接)
  • 只需串口输出结果:USART1(PA9/PA10)

硬件完全免设计,直接跑例程即可测温。

3. 软件实现流程(官方标准步骤)

3.1 使能内部温度传感器

ADC_EnableTempSensorVrefint();

3.2 配置 ADC1

  • 分辨率:12 位
  • 对齐:右对齐
  • 转换模式:连续转换
  • 通道:ADC_CHANNEL_16
  • 采样时间:480 周期(保证精度)

3.3 配置 DMA

将 ADC 结果通过 DMA 搬运到内存,不占用 CPU

  • DMA2 Stream0 Channel0
  • 方向:外设 → 内存
  • 数据宽度:半字(16bit)
  • 循环模式使能

3.4 启动 ADC 转换

ADC_SoftwareStartConv(ADC1);

3.5 读取并计算温度

VSensorValue = (float)DMA_Buf / 4095 * 3.3;
Temperature = (VSensorValue - 0.7782f) / 0.0024f + 28;

3.6 串口打印输出

例程默认输出三项信息:

  • ADC 原始值
  • 传感器电压
  • 芯片温度(℃)

4. 最精简可移植代码(直接复制)

// ADC 初始化
void TSensor_ADC_Init(void)
{
    ADC_Config_T adcConfig;
    ADC_CommonConfig_T adcCommonConfig;

    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);

    adcCommonConfig.prescaler = ADC_PRESCALER_DIV4;
    ADC_CommonConfig(&adcCommonConfig);

    adcConfig.resolution = ADC_RESOLUTION_12BIT;
    adcConfig.dataAlign = ADC_DATA_ALIGN_RIGHT;
    adcConfig.scanConvMode = DISABLE;
    adcConfig.continuousConvMode = ENABLE;
    adcConfig.extTrigEdge = ADC_EXT_TRIG_EDGE_NONE;
    ADC_Config(ADC1, &adcConfig);

    ADC_ConfigRegularChannel(ADC1, ADC_CHANNEL_16, 1, ADC_SAMPLETIME_480CYCLES);
    ADC_EnableTempSensorVrefint();
    ADC_EnableDMA(ADC1);
    ADC_Enable(ADC1);
    ADC_SoftwareStartConv(ADC1);
}

// 温度计算
float Get_Chip_Temperature(uint16_t adc_val)
{
    float vol = (float)adc_val / 4095.0f * 3.3f;
    float temp = (vol - 0.7782f) / 0.0024f + 28.0f;
    return temp;
}

5. 例程运行效果

串口输出示例:

ADC REGDATA = 0x09D2
Voltage = 0.7812V
Temperature = 29.25℃

可直接用于:

  • 芯片过温保护
  • 设备工作状态监测
  • 散热系统控制
  • 低功耗设备温控

6. 注意事项(AN1091 重点强调)

  1. 必须使用 ADC1_CH16,不支持其他 ADC
  2. 采样时间必须 ≥17.1μs,推荐 480 周期
  3. 内部温度 ≈ 环境温度 + 芯片自身发热
  4. 基准电压按 3.3V 计算,如使用外部 VREF 需修正公式
  5. 误差 ±4℃ 属于正常范围,适合监控,不做精密测量

AN1091 是 APM32F4xx 内部温度传感器最简单、最稳定的官方例程,无需外围、无需校准、直接可用。只需配置 ADC + DMA,即可实时获取芯片温度,适合温控、保护、监测类项目快速落地。

相关推荐