onewire踩坑
简单介绍下onewire的原理,看图.
onewire翻译过来叫"单总线协议",是美国dallas/maxim公司出的外围串行扩展总线技术,一根线要同时传输时钟和数据.
如果用STM32写onewire驱动就是GPIO模拟实现onewire协议就ok了,不要用maxim/dallas他们出的i2c转onewire芯片,奇贵无比.
接线需要采用寄生电源模式,注意上拉电阻
像stm32这种能配置gpio上拉的还好,否则需要接外部的上拉电阻!
onewire的输出模式用GPIO推拉输出就好了,输入模式用GPIO上拉输入.

然后写代码(C猪脚快乐时刻,但是注意硬件的代码仅供参考,能不能行需要观众老爷们自己去试)
微秒/毫秒级别的延时参考正点原子的代码"delay.c"去写就行.
简单用结构封装下gpio不过分吧
配置onewire模式(输出模式isout为非零,输入模式isout为0)
我用的HAL库,标准库类似.
向onewire器件写一字节, LSB First.注释是另外一个不太规范的写法,对于ds18b20也是能正常工作的,对于别的onewire器件不保证有效(比如说ds2431 onewire eeprom就不行).
从onewire器件读一字节 LSB First.
复位onewire总线
下面就是ds18b20的驱动了.返回值是温度乘100的结果.