企业网站建设代码,厨房装修图片,2W网站建设的作用,创建微信公众号平台用来把单线半双工模式的串口转换成双线#xff0c;然后才能连接到普通的双线USB 串口模块#xff0c;比如CH340 之类的。电路设计来自大佬的博客#xff1a;AVR half-duplex software UART supporting single pin operation。他在Arduino 上用软件模拟串口功能#xff0c;利…用来把单线半双工模式的串口转换成双线然后才能连接到普通的双线USB 串口模块比如CH340 之类的。电路设计来自大佬的博客AVR half-duplex software UART supporting single pin operation。他在Arduino 上用软件模拟串口功能利用这个电路可以进一步减少串口占用的引脚ARM 单片机一般都有硬件单线半双工模式就不用折腾软件时序了不过软件串口可以在所有IO 引脚上实现通信某些情况下还是方便的。
电路 左边的RTX 连接到单片机的单线串口引脚右边TXD 和RXD 分别连接到另一端的对应引脚比如可以按下面这种方式连接 这个电路要求
RXD 引脚固定为输入模式有内部上拉TXD 引脚在空闲时输出高电平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 这边的供电让它和单片机那边一致。