串口单线半双工转换电路

news2024/12/22 22:22:12

用来把单线半双工模式的串口转换成双线,然后才能连接到普通的双线USB 串口模块,比如CH340 之类的。电路设计来自大佬的博客:AVR half-duplex software UART supporting single pin operation。他在Arduino 上用软件模拟串口功能,利用这个电路,可以进一步减少串口占用的引脚,ARM 单片机一般都有硬件单线半双工模式,就不用折腾软件时序了,不过软件串口可以在所有IO 引脚上实现通信,某些情况下还是方便的。

电路

在这里插入图片描述

左边的RTX 连接到单片机的单线串口引脚,右边TXDRXD 分别连接到另一端的对应引脚,比如,可以按下面这种方式连接:

在这里插入图片描述
这个电路要求:

  1. RXD 引脚固定为输入模式,有内部上拉;
  2. TXD 引脚在空闲时输出高电平;
  3. RTX 引脚在输出和输入模式之间切换,输入模式要有内部上拉;

RTX 端发送数据时,RTX 引脚为推挽输出模式,CH340 端的TXD 引脚必须保持高电平空闲状态。此时三极管基极跟随TXD 引脚保持高电平。如果RTX 输出高电平,三极管不会导通,RXD 内部上拉为高电平;如果RTX 输出低电平,三极管导通,RXD 被拉低。为了避免短路,RTX 引脚上串了个限流电阻。

RTX 端接收数据时,RTX 引脚设为上拉输入模式。当TXD 输出高电平,二极管不导通,RTX 保持高电平,RXD 也保持高电平 ;TXD 输出低电平,就通过二极管把RTX 拉低,此时三极管基极也是低电平,不会导通,所以RXD 仍然是高电平,CH340 的输出不会干扰它自身的输入。

可见,核心逻辑是利用TXD 作为控制RXD 的使能信号,从而阻止回环;引脚利用内部上拉保持默认状态,输出引脚基本上只负责输出低电平。这个电路以及配套的软件串口代码我在Arduino 上测试过,完全OK。不过,稍微有个问题:要是通信双方的信号电平不一致怎么办?

如果电平不一致

比如,RTX 端的单片机是3.3V 电平,CH340 则是5V 电平,1.7V 的压差足以导通二极管和三极管,必须重新考虑一下上面的电路原理。

RTX 为接收状态,TXD 通过二极管输出低电平时,情况和之前一样;TXD 输出的5V 高电平则会通过三极管的BE 节跑到RTX 那边去,因为这时候RTX 电压比较低,于是三极管导通。

一方面,这会让RTX 被输入的5V 电平拉高,有1k + 100 的限流电阻,问题不大,不会冒烟;单片机的3.3V 电源轨可能会收到干扰,但是问题应该也不大,5V 经过两个二极管之后就接近3.3V 了。另一方面,此时三极管导通了,那么RXD 的电压肯定会被略微拉低,应该不足以直接拉到低电平。

RTX 为发送状态,输出低电平时情况没有异常,而高电平时,就如上面所说,TXD 上的5V 会跑过去、RXD 会被三极管略微拉低,总的来说应该是可以兼容的。

可以把三极管换成NMOS,比如SI2300,电路接成这样:

在这里插入图片描述
这样一来,CH340 一侧的5V 就不会再冲到单片机一侧了。SI2300 的GS 阈值电压很低,1.7V 就足以导通,所以RXD 还是会被拉低到3.3V,要是再换成阈值比较高的2N7002,就基本没问题了。用NMOS 的话,1K 限流电阻也可以去掉。

如果单片机是5V,而CH340 是3.3V,这种情况看着倒是更危险一点,因为RTX 的5V 电平会直接冲到TXD,而串联的限流电阻却不能太大,否则波特率就要降低。估计CH340 的引脚是有5V 耐受能力的吧~

要是上面这些估计“问题不大”的地方实际都不行的话,就只能考虑另外附加电平转换电路,呃,这可有点烦人了,不如调整一下CH340 这边的供电,让它和单片机那边一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1639301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【火猫DOTA2】电竞世界杯DOTA2项目将在7月份的前三周举办

1、电竞世界杯将于今年7月3日至8月25日在沙特利雅得举办。近日主办方公布了各个项目的举办时间,其中DOTA2项目将在7月份的前三周举办。转载:火猫TV资讯https://www.huomaotv.com/ 目前Falcons、XG、GG和Liquid这五支赢得了足够EPT积分的队伍已经确定直邀沙特。剩下的三个名额还…

nginx的前世今生(二)

书接上回: 上回书说到,nginx的前世今生,这回我们继续说 3.缓冲秘籍,洪流控水 Nginx的缓冲区是其处理数据传输和提高性能的关键设计之一,主要用于暂存和管理进出的数据流,以应对不同组件间速度不匹配的问题…

图片高效批量美化,支持将图片进行旋转180度并生成浴室玻璃图片,让图片瞬间焕然一新!

图片已成为我们生活与工作中不可或缺的一部分。然而,一张张手动美化图片却是一项既耗时又耗力的任务。为了帮助您轻松应对这一挑战,我们推出了一款高效批量美化图片的工具,并支持将图片旋转180度及生成浴室玻璃效果,让您的图片瞬间…

安装英伟达nvidia p4计算卡驱动@FreeBSD14

FreeBSD也能跑cuda AI训练拉! 在FreeBSD安装好pytorch和飞桨cpu版本后,尝试安装英伟达nvidia p4计算卡驱动。毕竟全靠cpu速度太慢了,还是GPU快啊!在磕磕绊绊几天后,终于成功成功安装好nvidia p4的cuda驱动&#xff0c…

拆单算法交易(Algorithmic Trading)

TWAP TWAP交易时间加权平均价格Time Weighted Average Price 模型,是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时间进行均匀分割,并在每个分割节点上将拆分的订单进行提交。例如,可以将某个交易日的交易时间平均分为N 段&am…

密码学基础练习五道 RSA、elgamal、elgamal数字签名、DSA数字签名、有限域(GF)上的四则运算

1.RSA #include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <time.h>#define PRIME_MAX 200 //生成素数范围#define EXPONENT_MAX 200 //生成指数e范围#define Element_Max 127 //加密单元的…

26版SPSS操作教程(高级教程第十八章)

目录 前言 粉丝及官方意见说明 第十八章一些学习笔记 第十八章一些操作方法 经典判别分析 数据假设 具体操作 结果解释 判别结果的图形化展示 结果解释 判别效果验证 结果解释 适用条件的判断 结果解释 贝叶斯判别分析 具体操作 结果解释 逐步判别法 结束语…

Redis---------实现查询缓存业务

目录 数据库与缓存之间的工作业务逻辑&#xff1a; 接下来看查询缓存代码实现&#xff0c;主要是捋清楚业务逻辑&#xff0c;代码实现是死的&#xff1a; Controller: Service: P37作业实现&#xff1a;总体逻辑跟上面的业务逻辑差不多 Controller&#xff1a; Service&#…

【项目构建】04:动态库与静态库制作

OVERVIEW 1.编译动态链接库&#xff08;1&#xff09;编译动态库&#xff08;2&#xff09;链接动态库&#xff08;3&#xff09;运行时使用动态库 2.编译静态链接库&#xff08;1&#xff09;编译静态库&#xff08;2&#xff09;链接静态库&#xff08;3&#xff09;运行时使…

数字身份管理:Facebook如何利用区块链技术?

随着数字化进程的加速&#xff0c;个人身份管理已成为一个关键议题。在这方面&#xff0c;区块链技术正在逐渐展现其巨大潜力。作为全球最大的社交媒体平台&#xff0c;Facebook也在积极探索和应用区块链技术来改进其数字身份管理系统。本文将深入探讨Facebook如何利用区块链技…

【Docker学习】docker start深入研究

docker start也是很简单的命令。但因为有了几个选项&#xff0c;又变得复杂&#xff0c;而且... 命令&#xff1a; docker container start 描述&#xff1a; 启动一个或多个已停止的容器。 用法&#xff1a; docker container start [OPTIONS] CONTAINER [CONTAINER...] 别名&…

【软件工程】需求分析

目录 前言需求分析UML概述用例图用例图的组成用例图中的符号和含义包含的两种使用场景 用例图补充&#xff1a;“系统”用例模型建模确定系统参与者确定系统用例 用例文档用例文档组成部分 活动图组成元素初始节点和终点活动节点转换决策与分支、合并分岔与汇合 类图类的表示类…

【DevOps】怎么找合适的Docker镜像?

目录 一、Docker Hub介绍 主要特点和功能 使用场景 二、怎么找合适的镜像 步骤 1: 访问 Docker Hub 步骤 2: 使用搜索功能 步骤 3: 分析搜索结果 步骤 4: 阅读详细描述 步骤 5: 下载并使用镜像 例子 三、怎么样使用国内镜像加速 常用的国内 Docker 镜像加速器地址 …

2023下半年软件设计师上午题——冒泡排序

快速排除法&#xff0c;根据冒泡排序特性&#xff0c;每一趟排序都会确实最大/最小值&#xff0c;故升序两趟后&#xff0c;最后两个元素应该是已经排序好的第二大&#xff0c;和最大的元素&#xff0c;所以排除B,D&#xff0c;再因为每次排序都会两两交换&#xff0c;所以排除…

C语言-调试技巧

目录 一、调试介绍1.1 Debug和Release的介绍1.2 Windows环境调试介绍1.2.1 学会快捷键1.2.2 查看临时变量的值1.2.3 查看内存信息1.2.4 查看调用堆栈1.2.4 查看汇编信息1.2.5 查看寄存器信息 二、编程常见的错误2.1 编译型错误2.2 链接型错误2.3 运行时错误 三、易于调试的代码…

如何配置和使用Apollo的component里的plugin

关于如何使用Apollo的Component里的plugin&#xff0c;在Apollo的文档里只有如果和开发的说明却没有找到一个清楚完整说明怎么把plugin跑起来的说明&#xff0c;例如我想把lidar_detection_filter按我们的需求对目标过滤算法作修改然后编译完后&#xff0c;执行 cyber_launch …

刷题训练之位运算

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握位运算算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

菜鸡学习netty源码(一)——ServerBootStrap启动

1.概述 对于初学者而然,写一个netty本地进行测试的Server端和Client端,我们最先接触到的类就是ServerBootstrap和Bootstrap。这两个类都有一个公共的父类就是AbstractBootstrap. 那既然 ServerBootstrap和Bootstrap都有一个公共的分类,那就证明它们两个肯定有很多公共的职…

代码随想录算法训练营第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

977.有序数组的平方 题目链接https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ int* sortedSquares(int* nums, int numsSize, int* returnSize) {/…

【Vue中的Ajax配置代理slot插槽】

Vue脚手架配置代理 安装命令 npm install axios vue.config.js 是一个可选的配置文件 如果项目的(和package . json同级的)根目录中存在这个文件&#xff0c; 那么它会被vue/cli-service自动加载 你也可以使用package.json中的 [vue字段&#xff0c;但是注意这种写法需要你严格…