欢迎光临散文网 会员登陆 & 注册

onewire踩坑

2022-06-22 18:48 作者:会整活的剑人  | 我要投稿

简单介绍下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的结果.


onewire踩坑的评论 (共 条)

分享到微博请遵守国家法律