没想到因为网络不便把一次年前的实验拖到了现在,不过还好,一切顺利,在此把要点和心得跟大家分享一下。也欢迎做过这个实验的同学跟我一起交流经验、探讨问题~
下面言归正传,首先修正一下上篇文章的参数。

如上表所示,为STM32F103ZET6系列的温度传感器标准电气参数表,可以当做参考数据。
由以上数据,再根据公式:
温度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25
首先将数据进行比例转化,可以使用微软系统自带的计算器,根据参考电压3.3V在12位AD转换对应最大值0xFFF可知,1.42V对应0x6E2(1762D),而斜率每摄氏度4.35mV对应每摄氏度0x05,故此时公式可以修正为:温度(°C) = {(0x6E2- VSENSE) / 5} + 25
综上所述,芯片的温度已经可以通过计算存入变量,在经过相应的位处理就可以显示在LCD上。
本人使用的代码仅供参考,如下:
//变量声明部分略去
mytemp = (0x6E2- ADC_ConvertedValue_Bak) / 0x05 + 25;
for (v2=3;v2;v2--)
{
v1=mytemp%10;
mytemp/=10;
LCD_DrawChar(3,(v2-1)<<3,HexValueOffset[v1]);
}
最后,还需要提示一下,在使用的时候不要忘记唤醒温度传感器(默认处于休眠状态),也就是需要设置ADC控制寄存器2(ADC_CR2)的TSVREFE位为1,否则会得到一个几乎为零的极小AD值,通过公式得到一个远远超出范围的温度值,显然是错误的。
给控制寄存器置位可以使用直接置位的方法,但为了增强程序的模块化程度,我建议使用STM32预定义的函数ADC_TempSensorVrefintCmd(ENABLE);
在初始化ADC后和开始转换前的代码段中调用该函数,即可唤醒温度传感器的检测。
实验结果:在初步开机后芯片温度在25°C左右,经过一段时间逐步升温至30°C左右,并保持相对稳定。
最后,祝各位好运~!