onewire踩坑
簡單介紹下onewire的原理,看圖.
onewire翻譯過來叫"單總線協(xié)議",是美國dallas/maxim公司出的外圍串行擴(kuò)展總線技術(shù),一根線要同時傳輸時鐘和數(shù)據(jù).
如果用STM32寫onewire驅(qū)動就是GPIO模擬實(shí)現(xiàn)onewire協(xié)議就ok了,不要用maxim/dallas他們出的i2c轉(zhuǎn)onewire芯片,奇貴無比.
接線需要采用寄生電源模式,注意上拉電阻
像stm32這種能配置gpio上拉的還好,否則需要接外部的上拉電阻!
onewire的輸出模式用GPIO推拉輸出就好了,輸入模式用GPIO上拉輸入.

然后寫代碼(C豬腳快樂時刻,但是注意硬件的代碼僅供參考,能不能行需要觀眾老爺們自己去試)
微秒/毫秒級別的延時參考正點(diǎn)原子的代碼"delay.c"去寫就行.
簡單用結(jié)構(gòu)封裝下gpio不過分吧
配置onewire模式(輸出模式isout為非零,輸入模式isout為0)
我用的HAL庫,標(biāo)準(zhǔn)庫類似.
向onewire器件寫一字節(jié), LSB First.注釋是另外一個不太規(guī)范的寫法,對于ds18b20也是能正常工作的,對于別的onewire器件不保證有效(比如說ds2431 onewire eeprom就不行).
從onewire器件讀一字節(jié)?LSB First.
復(fù)位onewire總線
下面就是ds18b20的驅(qū)動了.返回值是溫度乘100的結(jié)果.
標(biāo)簽: