概述
STM32F40x有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。
该温度传感器在内部和ADCx_IN16(F40xx/F41xx)或者ADCx_IN18(F42xx/F43xx)输入通道相连接,此通道把传感器输出的电压转换成数字值。
温度传感器模拟输入推荐采样时间是17.1us。
STM32的内部温度传感器支持的温度范围为:-40~125度。精度为土1.5℃左右。
内部温度传感器适合于检测温度的变化,不是测量绝对温度。测量绝度温度使用外部温度传感器。
使用注意事项
先激活ADC的内部通道:ADC_CCR的TSVREFE位(bit23)设置为1,即启用内部温度传感器
计算温度
内部温度传感器固定的连接在ADC的通道16上,即读取通道16的值就是温度传感器返回来的电压值
公式:T(℃)={(V25-Vsense ) /Avg_Slope}+25
V25=Vsense在25度时的数值(典型值为:0.76)。
Avg_Slope=温度与Vsense曲线的平均斜率(单位为mv/℃或
uv/℃)(典型值为2.5MV/℃)。
开启内部温度传感器步骤
①选择ADC_IN16或者ADC_IN16输入通道。
②设置采样时间大于17.1us.
③设置ADC__CCR的TSVREFE位,打开内部温度传感器。
④设置ADC_CR2的SWSTART位启动转换。
⑤读取ADC结果。
⑥计算。
实验程序
使能内部温度传感器
ADC_TempSensorVrefintCmd(ENABLE);
计算温度值
short Get_Temprate(void)
{
u32 adcx;
short result;
double temperate;
adcx=Get_Adc_Average(ADC_Channel_16,10); //10次取平均值
temperate=(float)adcx*(3.3/4096); //电压值
temperate=(temperate-0.76)/0.0025 + 25; //转换温度值
result=temperate*=100; //扩大100倍
return result;
}
main函数
int main(void)
{
short temp;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);
uart_init(115200);
LED_Init();
LCD_Init();
Adc_Init(); //内部温度传感器初始化
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"Temperature TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2014/5/6");
POINT_COLOR=BLUE;//设置字体颜色
LCD_ShowString(30,140,200,16,16,"TEMPERATE: 00.00C");//先在固定位置显示小数
while(1)
{
temp=Get_Temprate(); //得到温度值
if(temp<0)
{
temp=-temp;
LCD_ShowString(30+10*8,140,16,16,16,"-"); //显示负号
}else LCD_ShowString(30+10*8,140,16,16,16," "); //无符号
LCD_ShowxNum(30+11*8,140,temp/100,2,16,0); //显示整数部分
LCD_ShowxNum(30+14*8,140,temp%100,2,16,0); //显示小数部分
LED0=!LED0;
delay_ms(250);
}
}