STM32开发板DS18B20的温度数据为固定值

                            STM32(野火指南者)_DS18B20的温度数据为固定值

问题现象:开发板为野火指南者,使用配套的DS18B20串口打印温度例程,初始温度一直为85度,且改变环境温度数据无变化,如下图所示(下面会解释为什么图片是28.1度):

                                                  STM32开发板DS18B20的温度数据为固定值_第1张图片

问题分析:从DS18B20的数据上手册上查到,温度数据转换需要时间,如下图所示,使用12位采集精度时温度数据转换时间最大为750ms。

STM32开发板DS18B20的温度数据为固定值_第2张图片如果在温度数据转换的过程中没有充分延时,数据就不能正常写入温度寄存器。野火的DS18B20串口打印温度例程中,数据转换程序后无延时程序,所以DS18B20的寄存器中一直是原始数据85℃,下图为数据手册上的原话“上电复位时温度寄存器中的值为+85℃”。文章开头的图片是因为添加了延时程序,温度数据正常转换,温度寄存器中缺省值85℃被覆盖,之后又屏蔽了延时程序,所以显示是28.1℃。

 

                            STM32开发板DS18B20的温度数据为固定值_第3张图片

解决方法:

参考另一位博主关于DS18B20初始化时候读出85摄氏度(51系列)的解释:

原文出处:https://blog.csdn.net/hubukaixuan/article/details/7933575

在dsp_ds18b20.c的float DS18B20_GetTemp_MatchRom ( uint8_t * ds18b20_id )函数中,在温度数据转换程序后加入延时程序,添加位置如下图所示:

                STM32开发板DS18B20的温度数据为固定值_第4张图片

实验效果:使用手指轻捏传感器,观察数据变化,如下图所示:

                                STM32开发板DS18B20的温度数据为固定值_第5张图片

注意事项:

(1)注意延时程序添加位置

(2)关于延时时间,ms级的延时,时间越小温度反馈越滞后。经测试延时100ms时,温度反馈比较理想。下图是延时10ms时的温度反馈(串口打印速率500ms)

                                      STM32开发板DS18B20的温度数据为固定值_第6张图片

你可能感兴趣的:(stm32学习,stm32,经验分享)