STM32串口实现1-wire(二)

来源:互联网 发布:大连美工培训 编辑:程序博客网 时间:2024/05/10 14:55

STM32串口实现1-wire(二)

上一篇利用串口的半双工实现对1-wire协议的操作,利用单线半双工有个问题就是在读取1-wire总线设备(18B20)时,如果设备输出低电平时可能会造成电平不能完全拉到低电平,甚至烧掉TX管脚。
想法:既然内部将TX和RX相连接不好做,就再外部让TX和RX相连接。不利用stm32单线模式。通过一个二极管配合选通。
这里写图片描述
DATA连接到1-wire总线设备(DS18B20的DQ线)。

分析

  • TX输出0时,二极管导通,DATA应该在0.2V左右,此时1-wire总线设备(DS18B20)和STM32的RX能够正常收到数据0。
  • TX输出1时,二极管闭合,DATA被上拉成3.3V。1-wire总线设备(DS18B20)和STM32的RX能够正常收到数据1。
  • 对于读数据来说,需串口发送0xFF,STM32的TX位高电平,此时二极管都是截止的。STM32的RX线和1-wire总线设备(DS18B20)总线直接相连,能够正常收到1-wire总线设备(DS18B20)设备的数据。

代码修改

代码还是STM32串口实现1-wire(一)的代码,做如下修改:
- IO管脚需要加入对RX的配置。
- 不使能STM32单总线半双工模式(去掉USART_HalfDuplexCmd(USART2, ENABLE);函数调用)。

0 0