STM32(野火指南者)_DS18B20的溫度資料為固定值
問題現象:開發板為野火指南者,使用配套的DS18B20串口列印溫度例程,初始溫度一直為85度,且改變環境溫度資料無變化,如下圖所示(下面會解釋為什么圖片是28.1度):

問題分析:從DS18B20的資料上手冊上查到,溫度資料轉換需要時間,如下圖所示,使用12位采集精度時溫度資料轉換時間最大為750ms,
如果在溫度資料轉換的程序中沒有充分延時,資料就不能正常寫入溫度暫存器,野火的DS18B20串口列印溫度例程中,資料轉換程式后無延時程式,所以DS18B20的暫存器中一直是原始資料85℃,下圖為資料手冊上的原話“上電復位時溫度暫存器中的值為+85℃”,文章開頭的圖片是因為添加了延時程式,溫度資料正常轉換,溫度暫存器中預設值85℃被覆寫,之后又屏蔽了延時程式,所以顯示是28.1℃,

解決方法:
參考另一位博主關于DS18B20初始化時候讀出85攝氏度(51系列)的解釋:
原文出處:https://blog.csdn.net/hubukaixuan/article/details/7933575
在dsp_ds18b20.c的float DS18B20_GetTemp_MatchRom ( uint8_t * ds18b20_id )函式中,在溫度資料轉換程式后加入延時程式,添加位置如下圖所示:

實驗效果:使用手指輕捏傳感器,觀察資料變化,如下圖所示:

注意事項:
(1)注意延時程式添加位置
(2)關于延時時間,ms級的延時,時間越小溫度反饋越滯后,經測驗延時100ms時,溫度反饋比較理想,下圖是延時10ms時的溫度反饋(串口列印速率500ms)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/64771.html
標籤:其他
