UART一对多通信的方法

2023-05-16

        通常,uart为单对单通信,当用到一对多时可以用RS485。然而有时候我们MCU的uart口只剩一个,又要接多个uart的外围芯片,这时如果转成RS485需要加多个485收发器,成本增加,布板空间也要增加。

        那么能不能像上图那样直接将多个uart外设接到MCU同一个uart口呢?显然不行。因为uart空闲电平为高电平。当要发送数据时,TX管脚将电平拉低。上图中,MCU发送数据时,MCU的TX管脚拉低电平,此时两个从机的RX均被MCU的TX拉低,意味着从机可以收到MCU发送的数据;但是当从机给MCU发送数据时就出问题了,U3的TX发送数据,将MCU的RX拉低,此时U2的TX未发送数据,仍然在维持高电平,这时MCU的RX所接的两个从机,一个拉低电平,一个拉高电平,显然会出问题。

        解决办法其实很简单,给从机的TX串一个二极管即可。如上图所示,当 U4的TX发送数据,将MCU的RX拉低,此时U5的TX未发送数据,仍然在维持高电平,但是由于二极管D2的存在,此时MCU的RX电平会被U4的TX正常拉低,所以此时从机U4可以正常给MCU发送数据了,同理U5也可以正常给MCU发送数据。

        这个电路电平逻辑看起来没问题了,但实际应用仍然有个问题,那就是MCU发送的数据所有的从机均可以收到,类似于MCU是以广播形式给从机发送数据。从机怎么确定MCU是不是给自己发送数据呢?这是就需要协议支持了,比如我们给U4定义地址为0X01,给U5定义地址为0X02,MCU发送数据时只需要在数据包中加上地址就可以了,从机收到数据后可以根据数据包中的地址字段来判断数据是不是发送给自己的。

        到这里看起来一切都解决了,其实不然。如果从机不支持协议呢?比如从机是同型号的一个uart口的温度传感器,只支持简单的查询命令,该怎么处理?

        如上图所示,我们还可以通过MCU的IO口 来控制给特定从机发送数据。当我们要给U8发送数据时,只需要让PA0输出高电平,PA1输出低电平。此时Q2导通,Q1截至;这样MCU的TX输出低电平时就只有U8的RX被拉低,U7的RX仍然维持低电平。反之,给U7发送数据时只需要让Q1导通,Q2截至即可。

        最后再啰嗦两句,一般芯片的uart口的TX和RX管脚内部都有上拉。如果芯片内部没有上拉,上面的两种电路都需要在RX管脚外部加上拉来确保空闲电平为高。如果所带从机过多,需要考虑主机TX的下拉能力够不够。

/*
这是一段测试代码

*/
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
//为了防止系统判断推荐受影响

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UART一对多通信的方法 的相关文章

  • 串口通讯UART/RS232/RS485/RS-422笔记

    串口通讯详解笔记 串口通讯概述串口通讯传输数据帧的结构UARTRS232RS485RS 422RS 232 RS 422和RS 485的主要区别 xff08 重要 xff09 串口通讯概述 串口通讯是指数据按位 xff08 bit xff0
  • 【FPGA】FPGA实现UART串口通信回环

    目录 一 UART协议基础二 系统模块划分三 代码实现1 uart顶层设计模块2 uart rx串口数据接收模块3 control控制模块4 uart tx串口数据发送模块 四 仿真五 上板验证六 踩坑事项 一 UART协议基础 关于UAR
  • 串口UART

    目录 串口概念 串口rs232 数据格式 注意事项 总体结构图 代码verilog 接收模块 结构图 波形图 编辑 代码 verilog 发送模块 结构图 波形图 代码 verilog 串口rs485 串口概念 串口是异步 串行通信接口 x
  • Jetson Nano – UART

    There is a UART on the J41 GPIO Header of the NVIDIA Jetson Nano Developer Kit Useful when you need a little bit of extr
  • WK2114(一个异步串口UART 扩展为4个串口UART)

    WK2114是UART接口的4通道UART器件 WK2114将一个标准3线异步串口 xff08 UART xff09 扩展成为4个增强 功能串口 xff08 UART xff09 主接口UART在数据传输时主接口的UART可以通过引脚配置为
  • UART通信协议

    UART通信协议 一 UART是什么 xff1f 1 同步串口通信 vs 异步串口通信2 串行通信 二 通信协议三 工作原理四 特点 一 UART是什么 xff1f 通用异步收发传输器 xff08 Universal Asynchronou
  • UART一对多通信的方法

    通常 xff0c uart为单对单通信 xff0c 当用到一对多时可以用RS485 然而有时候我们MCU的uart口只剩一个 xff0c 又要接多个uart的外围芯片 xff0c 这时如果转成RS485需要加多个485收发器 xff0c 成
  • UART, IIC, SCI, SPI, 232, 485, 422, CAN, SDIO, GPIO, MODBUS, TCP/IP汇总简介

    UART IIC SCI SPI 232 485 422 CAN SDIO GPIO MODBUS TCP IP汇总简介 UART xff1a Universal Asynchronous Receiver Transmitter xff1
  • UART通信中流控RTS和CTS的理解

    一 流控 xff0c 顾名思义就是流量控制的意思 目的是协调收发双方 xff0c 使数据不会丢失 如果UART只有RX TX两个信号 xff0c 要流控的话只能是软流控 xff1b 如果有RX xff0c TX xff0c CTS xff0
  • arduino学习——UART串口通信

    Serial begin 初始化串口 用作串口的启动 xff0c 常放置在setup xff08 xff09 中 原型 xff1a Serial begin speed Serial begin speed config 参数 xff1a
  • C51_day5:串口通信UART

    3 1 串口基本认知 串行接口简称串口 xff0c 也称串行通信接口或串行通讯接口 xff08 通常指COM接口 xff09 xff0c 是采用串行通信方式的扩展接口 串行接口 xff08 Serial Interface xff09 是指
  • MCU-串口通信协议

    MCU 串口通信协议 一 介绍 串行通信就像单车道 所有数据得一个一个通行 并行就像多车道 一次可以通行多辆车 MCU常用到的串口通信模块主要有两种 UART和USART UART 全称是Universal Asynchronous Rec
  • Node.js笔记:SerialPort(串口)模块使用(基于9.x.x)

    文章目录 目的 模块安装 基础使用 扫描端口 打开端口 发送数据 接收数据 错误处理 数据解析器 SerialPort类 构造方法 属性 事件 方法 命令行工具 总结 目的 上位机与各种电路模块间常常采用串口进行通讯 Node js中可以使
  • 一起学nRF51xx 6 - uart

    前言 通用异步接收器 发送器提供快速 全双工 内置流量控制的异步串行通信 CTS RTS 在硬件方面支持高达1Mbps波特率 支持奇偶校验和第9位数据生成 用于每个UART接口线的GPIO可从芯片上的GPIO中任选 而且可独立配置 这使得芯
  • 【UART】Verilog实现UART接收和发送模块

    目录 写在前面 UART 工作原理 UART 接收部分 UART RX 模块图 UART RX 时序图 Verilog 实现 UART RX 模块 UART 发送部分 UART TX 模块图 UART TX 时序图 Verilog 实现 U
  • MicroPython串口数据转换技巧

    技巧一 还原从串口接收的HEX字符串 首先上官方文档 确认接收数据类型为bytes 串口读来的bytes类型HEX数据转换成HEX类型字符串转换函数 ByteToHex的转换 返回数据16进制字符串 def ByteToHex bins r
  • STM32CubeMX HAL库串口+DMA+IDLE空闲中断不定长度数据接收和发送

    本文开发环境 MCU型号 STM32F103ZET6 IDE环境 MDK 5 29 代码生成工具 STM32CubeMx 5 3 0 HAL库版本 STM32Cube FW F1 V1 8 0 STM32Cube MCU Package f
  • UART ISR Tx Rx 架构

    我让事情变得复杂了吗 我正在构建我的代码 以便通过 UART 从 8051 micro 与外围设备进行通信 外设响应主机的命令 一次只能响应一个命令 这是一个简单的发送和接收协议 tx1 rx1 tx2 rx2 tx3 rx3 每个 TX
  • STM32F4-Discovery (STM32F429ZIT6) 上的 RS232 (UART) 与 HAL 库?

    背景 这是我的一些背景 以便你们知道我有或没有哪些相关知识 我完全是这种嵌入式系统的新手 而且我对电子产品一无所知 我是一个纯粹的软件人员 我唯一的嵌入式系统经验是Raspberry Pi 它与STM32F4 Discovery有很大不同
  • 跨线程操作无效:从创建它的线程以外的线程访问控制“textBox1”[重复]

    这个问题在这里已经有答案了 我想使用 UART 将温度值从微控制器发送到 C 接口并显示温度Label Content 这是我的微控制器代码 while 1 key scan get value of temp if Usart Data

随机推荐

  • 在import scipy.misc 后找不到 imsave

    在想把CIFAR 10 的16进制数据转为图像的时候需要用到imsave xff0c 但是在import scipy misc 之后显示该库内没有imsave 后来发现还需要安装 Pillow这个包 解决 xff1a pip install
  • 基于adaboost的车辆检测总结【OS X 下基于python实现】

    最近在忙着用opencv的adaboost做物体检测 xff0c 开始的时候有一些疑问让我一时不知道该怎么实现 xff0c 那么现在就总结一下adaboost算法以及如何基于opencv的boost容器实现adaboost及联分类器 弱分类
  • 对于void* 的理解

    void 是一个特殊的指针 xff0c 它的意义为无类型指针 xff0c 他可以被赋值为任意类型的指针 xff0c 但是仅限当作一个指针使用 void 是不能直接被 访问地址的内容 xff0c 因为还不知道具体要读多少个字节 xff1b 而
  • sql的datetime 数据类型

    sql的datetime 格式如 2018 6 13 13 02 23 但是有时候我们不需要这么多内容 xff0c 比如说我们只需要匹配日期 xff0c 不管具体的时刻 这时候我们就可以使用 DATE 函数 面对如上数据 xff0c 想要获
  • 【网段】【vlan】【广播域】关于网段,vlan和广播域的关系的个人理解

    广播域是一个二层概念 xff0c 所有能够接收到同一个广播的设备处于同一广播域 而所有的三层以下的设备 xff08 不包括第三层 xff09 都是不能隔离广播的 xff0c 所以所有由交换机 xff0c 网桥 xff0c 集线器连接起来的设
  • git 创建远程库

    首先是git的配置 git config global user name 34 your name 34 git config global user email 34 your mail 34 这两个配置信息是用来记录你的git操作 x
  • python 创建二维列表的方法

    使用python创建二维列表有以下两种方式 xff1a 1 列表复制法 xff1a a 61 0 width height 但是这种方法会导致如下问题 xff1a gt gt gt a 61 0 3 4 gt gt gt a 0 0 0 0
  • 各种接插头名称汇总

    杜邦线插头 JST接线端子 SH1 0MX1 25ZH1 5PH2 0HY2 0XH2 54贴片座子 T型插头 XT60型插头 SM插头 未完待续
  • GA-B85M-D3V PLUS 1150安装win10后的蓝屏问题汇总

    通过windbg来定位出错的sys文件 下面是安装技嘉官方驱动后依然频繁出现的蓝屏 尝试方案fltmgr sys sfc scannow chkdsk c f r dxgmms2 syssystem service exception dx
  • 超声波风速风向传感器

    OSA 1F1 超声波风速风向传感器 1 概述 OSA 1F1超声波风速风向传感器是一款迷你型全数字化传感器 xff0c 高度集成超声波风速 风向传感器 xff0c 体积小巧 xff0c 集成度高 xff0c 质量轻 xff0c 坚固耐用
  • Loggernet软件新手入门(一)

    loggernet软件新手入门 xff08 一 xff09 安装与简单操作 一 xff0e 软件及驱动安装安装 1 1 打开软件安装包 xff0c 点击 exe应用程序图标 xff0c 然后在弹出的对话框中 xff0c 选择 Install
  • Loggernet软件新手入门(二)

    一 xff0e 创建一个程序 在loggernet软件中 xff0c 创建一个程序有两种方式 xff1a Short Cut以及CRBasic Editor xff0c 这两种方式都可以在Program目录下找到 1 1Short Cut
  • PC200W-简版loggernet软件

    一 xff0e 解压缩PC200W文件夹 xff0c 双击下图图标 xff0c 可以打开PC200W 二 xff0e 创建一个连接 打开软件后 xff0c 会弹出一个关于创建连接的对话框 xff0c 如果没有弹出 xff0c 可以在Netw
  • 示例一:CR300接CS655

    Public PTemp Batt volt Public CS655 3 Alias CS655 1 61 vwc Alias CS655 2 61 ec Alias CS655 3 61 T Units vwc 61 Units ec
  • 日本原装COM 3600F专业型空气负离子检测仪 --CR1000采集

    Public PTemp Batt volt Public instring string As String 36 Public Num spilt 3 As String 3 Alias Num spilt 1 61 ION FM Pu
  • java FlowLayout示例

    java FlowLayout示例 xff1a import java awt FlowLayout import javax swing JLabel import javax swing WindowConstants import j
  • Get 一个显示界面,与数采串口通信

    程序第一步 xff1a 显示 数据来源 xff0c CR1000数据采集器 xff0c 5秒采集并存储上传 第二步 xff1a 存储 TXT文档存储 xff0c 逗号分隔 xff0c 每月创建一个新的文件 xff0c 可以另存为excel文
  • UART通信协议

    UART通信协议 一 UART是什么 xff1f 1 同步串口通信 vs 异步串口通信2 串行通信 二 通信协议三 工作原理四 特点 一 UART是什么 xff1f 通用异步收发传输器 xff08 Universal Asynchronou
  • win10右下角的通知区域

    属性 gt 通知和操作 gt 选择在任务栏上显示哪些图标 gt
  • UART一对多通信的方法

    通常 xff0c uart为单对单通信 xff0c 当用到一对多时可以用RS485 然而有时候我们MCU的uart口只剩一个 xff0c 又要接多个uart的外围芯片 xff0c 这时如果转成RS485需要加多个485收发器 xff0c 成