STM32的内部温度传感器

本文详细介绍了STM32内部温度传感器的工作原理及操作流程,包括通过ADC进行温度测量的方法,以及VDDA电压的规范,确保ADC在合适的工作范围内运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、STM32的内部温度传感器
   STM32内部温度传感器与ADC的通道16相连,与ADC配 合使用实现温度测量。测量范围–40~125℃,精度 ± 1.5℃
操作流程:
   1)、设置ADC相关参数
   // ADC1 configuration -----------------------------
   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
   ADC_InitStructure.ADC_NbrOfChannel = 1;
   ADC_Init(ADC1, &ADC_InitStructure);
   2)、选中ADC1的通道16作为输入,设置采样时间17.1us ( Ncycle × tADC = 17.1靤 )。
   // ADC1 regular channel16 Temp Sensor configuration
   ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);
   3)、设置寄存器ADC_CR2中的TSVREFE位激活温度传感器
   // Enable the temperature sensor and vref internal channel
   ADC_TempSensorVrefintCmd(ENABLE);
   4)、转换采样值为温度
   ADC转换结束以后,读取ADC_DR寄存器中的结果,转换温度值计算公式如下:
           V25 - VSENSE
   T(℃) = ------------  + 25
            Avg_Slope
      V25:  温度传感器在25℃时 的输出电压,典型值1.43 V。
     VSENSE:温度传感器的当前输出电压,与ADC_DR 寄存器中的结果ADC_ConvertedValue之间的转换关系为: 
                       ADC_ConvertedValue * Vdd
             VSENSE = --------------------------
                       Vdd_convert_value(0xFFF)
     Avg_Slope:温度传感器输出电压和温度的关联参数,典型值4.3 mV/℃。
     //Converted Temperature
     Vtemp_sensor = ADC_ConvertedValue * Vdd / Vdd_convert_value;
     Current_Temp = (V25 - Vtemp_sensor)/Avg_Slope + 25;
2、VDDA的电压范围
    STM32的数据手册规定,VDD与VDDA之间的压差不能大于300mV。ADC的工作电压范围在2.4V~3.6V,供电电压VDD范围在2.0V~3.6V.

### STM32 内部温度传感器工作原理 STM32微控制器系列集成了一个内部温度传感器,用于监测芯片及其周围环境的温度变化。这个传感器通过ADC(模数转换器)读取其输出电压并将其转化为数字信号以便进一步处理。 对于不同型号的STM32设备而言,温度传感的具体实现可能有所差异: - 对于STM32L151,在使用STM32L-DISCOVERY或STM32L152CDISCOVERY开发板上的内置微控制器进行温度测量时,可以通过配置相应的寄存器来启动温度传感器,并利用ADC完成数据采集过程[^1]。 - 而针对STM32F407这样的高性能MCU,则提供了更详细的参数描述:它拥有一个覆盖范围从-40°C至+125°C之间的宽广操作区间;当执行一次完整的AD转换周期时建议采用大约17.1μs作为最佳采样时间长度;在整个量程内能够达到约±1.5°C级别的绝对准确性[^2]。 为了确保高效节能的操作模式,某些版本允许开发者在不需要实时监控的情况下关闭温度感应功能以减少功耗。例如,在STM32F4系列中提到,如果要同时对多个特殊用途通道如温度传感器(VSENSE)和片上参考电压源(VREFINT)实施连续扫描的话,那么需要设置特定控制位(TSVREFE),从而激活这些辅助资源供后续运算所需[^3]。 下面是一个简单的C语言程序片段展示了如何初始化外设并通过调用`Get_Temprate()`函数获取当前检测到的温度数值,最后经由UART发送给外部终端显示出来[^4]: ```c #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" #include "tsensor.h" int main(void) { float temp; delay_init(); // 初始化延时库 uart_init(115200); // 配置串行通信波特率为115200bps LED_Init(); // 设置LED端口属性 Adc_Init(); // 启动ADC模块 while (true) { temp = Get_Temprate(); // 获取最新测得的温度值 printf("芯片温度:%.1f\n", temp); LED0 ^= 1; // 切换LED状态 delay_ms(500); // 等待半秒钟再重复上述动作 } } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值