精华内容
下载资源
问答
  • 随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是商业技术的...我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,比如我们使用的是 CH340T 这个...

    随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用 USB 转 UART 技术取代了 RS232 串口,绝大多数笔记本电脑已经没有串口这个东西了,那我们要实现单片机和电脑之间的通信该怎么办呢?

    我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,比如我们使用的是 CH340T 这个芯片,如下图所示。

    55628391a0bbf2caf60b18dd08672e31.png

    图中左下方 J1 和 J2 是两个跳线的组合,我们需要用跳线帽把中间和下边的针短接在一起。

    右侧的 CH340T 这个电路很简单,把电源、晶振接好后,6 脚和 7 脚的 DP 和 DM 分别接 USB 口的 2 个数据引脚上去,3 脚和 4 脚通过跳线接到了我们单片机的 TXD 和 RXD 上去。

    CH340T 的电路里 3 脚位置加了个 4148 的二极管,是一个小技巧。

    因为在 STC89C52 这个单片机下载程序时需要冷启动,就是先点下载后上电,上电瞬间单片机会先检测需要不需要下载程序。

    虽然单片机的 VCC 是由开关来控制,但是由于 CH340T 的 3 脚是输出引脚,如果没有此二极管,开关后级单片机在断电的情况下,CH340T 的 3 脚和单片机的 P3.0,即 RXD引脚连在一起。

    有电流会通过这个引脚流入后级电路并且给后级的电容充电,造成后级有一定幅度的电压,这个电压值虽然只有两三伏左右,但是可能会影响到正常的冷启动。

    加了二极管后,一方面不影响通信,另外一个方面还可以消除这种不良影响。这个地方可以暂时作为了解,大家如果自己做这类电路,可以参考一下。

    展开全文
  • 11.3 USB转串口通信

    2019-02-25 11:13:08
    随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是...我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,在我们的开发板上,我们使用的是 CH340T...

    随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用 USB 转 UART 技术取代了 RS232 串口,绝大多数笔记本电脑已经没有串口这个东西了,那我们要实现单片机和电脑之间的通信该怎么办呢?

    我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,在我们的开发板上,我们使用的是 CH340T 这个芯片,如图 11-5所示。
    在这里插入图片描述
    图 11-5 USB 转串口电路

    图中左下方 J1 和 J2 是两个跳线的组合,大家可以在我们板子左下方的位置找到,我们需要用跳线帽把中间和下边的针短接在一起。右侧的 CH340T 这个电路很简单,把电源、晶振接好后,6 脚和 7 脚的 DP 和 DM 分别接 USB 口的 2 个数据引脚上去,3 脚和 4 脚通过跳线接到了我们单片机的 TXD 和 RXD 上去。

    CH340T 的电路里 3 脚位置加了个 4148 的二极管,是一个小技巧。因为 STC89C52 这个单片机下载程序时需要冷启动,就是先点下载后上电,上电瞬间单片机会先检测需要不需要下载程序。虽然单片机的 VCC 是由开关来控制,但是由于 CH340T 的 3 脚是输出引脚,如果没有此二极管,开关后级单片机在断电的情况下,CH340T 的 3 脚和单片机的 P3.0(即 RXD)引脚连在一起,有电流会通过这个引脚流入后级电路并且给后级的电容充电,造成后级有一定幅度的电压,这个电压值虽然只有两三伏左右,但是可能会影响到正常的冷启动。加了二极管后,一方面不影响通信,另外一个方面还可以消除这种不良影响。这个地方可以暂时作为了解,大家如果自己做这类电路,可以参考一下。


    作者:seven-soft
    来源:CSDN
    原文:https://blog.csdn.net/softn/article/details/51847985
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • Android之USB转串口通信-基本流程

    千次阅读 2019-07-06 15:27:26
    背景:近期公司一个项目对接第三方支付设备(类似平板的设备外接usb转串口设备),需要使用usb转串口,实现通信和交互,今天记下过程。 有引用这个库https://github.com/mik3y/usb-serial-for-android,感谢开源的...

    背景:近期公司一个项目对接第三方支付设备(类似平板的设备外接usb转串口设备),需要使用usb转串口,实现通信和交互,今天记下过程。

    有引用这个库 https://github.com/mik3y/usb-serial-for-android,感谢开源的大佬。

    这个库已经集合了一般的芯片协议,就不需要自己再配置了。我们设备是用的ProlificSerialDriver.

    唯一要注意的是配置设备的参数:波特率,数据位,体制位,奇偶校验等。其中我就在奇偶校验的参数配置上坑了一把。

    只需要按照流程,注意些细节就能跑。

    贴下核心的几段代码:

    import android.hardware.usb.UsbDevice
    import android.hardware.usb.UsbDeviceConnection
    import android.hardware.usb.UsbManager
    import com.hoho.android.usbserial.driver.UsbSerialPort
    import com.hoho.android.usbserial.driver.UsbSerialProber
    
    class ZYDataSource(){
        var mUsbSeriaPortManager: USBSerialPortManager? = null
        private var usbDeviceConnection: UsbDeviceConnection? = null
        private var mDevice: UsbDevice? = null
        private var mUsbSerialPort: UsbSerialPort? = null
        private var usbPermissionReceiver: UsbPermissionReceiver? = null
    
        private var mUsbManager: UsbManager? = null
        
        /**
        * 初始化
        */
        override fun initCompletable(context: Context): Completable {
            return Completable.create() {
                mUsbManager = context.getSystemService(Context.USB_SERVICE) as UsbManager
                //查找所有设备
                val driversList = UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager)
                if (driversList == null || driversList.size == 0) {
                    throw Exception("未找到设备")
                }
                //直接取第一个.
                mDevice = driversList.first().device
    
                if (!mUsbManager?.hasPermission(mDevice)!!) {
                    usbPermissionReceiver = UsbPermissionReceiver()
                    //申请权限
                    val intent = Intent(ACTION_DEVICE_PERMISSION)
                    val mPermissionIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
                    val permissionFilter = IntentFilter(ACTION_DEVICE_PERMISSION)
                    context.registerReceiver(usbPermissionReceiver, permissionFilter)
                    mUsbManager?.requestPermission(mDevice, mPermissionIntent)
                } else {
                    this.openDeviceConnection(device = mDevice!!)
                }
    
                it.onComplete()
            }
        }
    
        inner class UsbPermissionReceiver : BroadcastReceiver() {
            override fun onReceive(p0: Context?, intent: Intent?) {
                val action = intent?.getAction()
                if (ACTION_DEVICE_PERMISSION.equals(action)) {
                    synchronized(this) {
                        val device = intent.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)
                        openDeviceConnection(device)
                    }
                }
            }
    
        }
        
        /**
        * 打开连接
        */
        fun openDeviceConnection(device: UsbDevice) {
            synchronized(this) {
                //授权成功,在这里进行打开设备操作
                val availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager)
                if (availableDrivers.isEmpty()) {
                    return
                }
    
                // Open a connection to the first available driver.
                val driver = availableDrivers[0]
                // Read some data! Most have just one port (port 0).
                mUsbSerialPort = driver.ports[0]
                try {
                    mUsbSeriaPortManager = USBSerialPortManager(mUsbSerialPort!!)
                    usbDeviceConnection = mUsbManager?.openDevice(device)
                    mUsbSerialPort?.open(usbDeviceConnection)
                    mUsbSerialPort?.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_EVEN)
                } catch (e: Exception) {
                    XLog.tag(TAG).e(e.message)
                    throw Exception("设备初始化失败")
                }
    
            }
        }
    
        /**
        * 实际通信调用方法-找卡
        */
        override fun searchCardSingle(requestData: ByteArray): Single<ByteArray>                     {
            return Single.just(requestData)
                .flatMap { data ->
                    val command = USBSerialPortManager.Command(data, data.size)
                    //通信
                    mUsbSeriaPortManager!!.execute(command)
                }
                .flatMap {
                    Single.just(it.rxBytes)
                }
        }
    }

    下面这个是USBSerialPortManager工具类

    import com.hoho.android.usbserial.driver.UsbSerialPort
    import io.reactivex.Single
    import io.reactivex.schedulers.Schedulers
    
    
    class USBSerialPortManager(private val usbSerialPort: UsbSerialPort,
                               private val writeTimeout: Int = 100,
                               private val readTimeout: Int = 50) {
        open class Command(val hex: String, var rxLength: Int = 0, var rx: String = "") {
            val bytes: ByteArray
                get() = hex.hexStringToByteArray()
            val rxBytes: ByteArray
                get() = rx.hexStringToByteArray()
    
            constructor(bytes: ByteArray, rxLength: Int) : this(bytes.toHex(), rxLength, "")
        }
    
        private fun runOnceSingle(command: Command, timeoutInMillis: Int = 2000): Single<Command> {
            return Single.create {
                XLog.tag(TAG).i("send data=${command.hex} to $usbSerialPort")
                val txBytes = command.hex.hexStringToByteArray()
                usbSerialPort.write(txBytes, writeTimeout)
    
                if (command.rxLength <= 0) {
                    command.rx = ""
                    it.onSuccess(command)
                    return@create
                }
    
                var times = 0L
                val interval = 2L
                val bytes = ByteArray(command.rxLength)
                var totalLength = 0
                while (totalLength < command.rxLength) {
                    val bytesToRead = ByteArray(command.rxLength - totalLength)
                    val n = usbSerialPort.read(bytesToRead, readTimeout)
                    if (n > 0) {
                        for (i in 0 until n) {
                            bytes[totalLength + i] = bytesToRead[i]
                        }
                        totalLength += n
                    }
                    Thread.sleep(interval)
                    times += interval
                    if (times > timeoutInMillis) {
                        XLog.tag(TAG).e("read data from $usbSerialPort timeout, expect ${command.rxLength} bytes")
                        it.onError(Exception("read data from $usbSerialPort timeout, expect ${command.rxLength} bytes"))
                        return@create
                    }
                }
                command.rx = bytes.toHex()
                XLog.tag(TAG).i("recv data=${command.rx} from $usbSerialPort")
                it.onSuccess(command)
            }
        }
    
        fun execute(command: Command, retryTimes: Long = 0L): Single<Command> {
            return runOnceSingle(command).retry(retryTimes).subscribeOn(Schedulers.single())
        }
    
        companion object {
            const val TAG = "USBSerialPortManager"
        }
    }

    代码是kotlin语言,没有写注释,目前项目已上线。工具类基本可以通用。

    展开全文
  • 随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是...我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,在我们的开发板上,我们使用的是 CH340T...

    随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用 USB 转 UART 技术取代了 RS232 串口,绝大多数笔记本电脑已经没有串口这个东西了,那我们要实现单片机和电脑之间的通信该怎么办呢?

    我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,在我们的开发板上,我们使用的是 CH340T 这个芯片,如图 11-5所示。

    图 11-5  USB 转串口电路
    图 11-5  USB 转串口电路


    图中左下方 J1 和 J2 是两个跳线的组合,大家可以在我们板子左下方的位置找到,我们需要用跳线帽把中间和下边的针短接在一起。右侧的 CH340T 这个电路很简单,把电源、晶振接好后,6 脚和 7 脚的 DP 和 DM 分别接 USB 口的 2 个数据引脚上去,3 脚和 4 脚通过跳线接到了我们单片机的 TXD 和 RXD 上去。

    CH340T 的电路里 3 脚位置加了个 4148 的二极管,是一个小技巧。因为 STC89C52 这个单片机下载程序时需要冷启动,就是先点下载后上电,上电瞬间单片机会先检测需要不需要下载程序。虽然单片机的 VCC 是由开关来控制,但是由于 CH340T 的 3 脚是输出引脚,如果没有此二极管,开关后级单片机在断电的情况下,CH340T 的 3 脚和单片机的 P3.0(即 RXD)引脚连在一起,有电流会通过这个引脚流入后级电路并且给后级的电容充电,造成后级有一定幅度的电压,这个电压值虽然只有两三伏左右,但是可能会影响到正常的冷启动。加了二极管后,一方面不影响通信,另外一个方面还可以消除这种不良影响。这个地方可以暂时作为了解,大家如果自己做这类电路,可以参考一下。

    展开全文
  • USB转串口与USB协议的区别

    千次阅读 2020-01-11 13:19:13
    关于SV613模块常见的问题:模块能不能做USB协议模块 在正常的数据传输系统中(如图1),传输...通过USB转串口电路通信的双方要遵守串口的通信协议,而串口是按照位(bit)来发送和接收数据的,包括起始位,数据位,奇...
  • 经朋友介绍接的一个外包,要求用USB和PLC设备通信,于是乎就有了本文。内容不深,权当做个记录整理一下当时的思路。 一、解决思路 ...在开放的外围接口中,只有USB可以使用,因此需要在外部加一个USB转串口...
  • USB转串口与虚拟串口相关

    千次阅读 2019-10-29 16:18:34
    二、USB转串口、虚拟串口概念 三、串口占用问题 四、其他:多个程序共享一个串口数据 五、COM、COM+和DCOM与COM端口无关 一、串口与并口 (一)串行接口(即COM口): 简称串口,也称串行通信接口。按电气...
  • USB转串口是最常见的通信设备,拥有广泛的用户群。它是一种操作简单、使用方便的通讯产品。然而,在使用中不可避免地会遇到一些问题。今天,给大家分享一下内行人调试串口线路时要注意什么,以及如何检查usb串口线路...
  • 1.COM com,好像是串口的一种, 关注串口是因为我的串口发现是直连的那种,通过这个玩意 连接的时候, 2.UART 3.USB口
  • USB转串口是最常见的通信设备,拥有广泛的用户群。它是一种操作简单、使用方便的通讯产品。然而,在使用中不可避免地会遇到一些问题。今天,给大家分享一下内行人调试串口线路时要注意什么,以及如何检查usb串口线路...
  • USB到串口通信

    2012-03-23 16:07:34
    主要介绍USB转串口通信 USB与串口通信之间的协议转换
  • 2、USB转TTL: 3、USB转232串口: 图片 扫盲 串口(USART)通信-串口通讯协议简介 物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬件部分。 ...
  • 串口:串口是一个泛称,UART,TTL,RS232,RS485都遵循类似的通信时序协议,因此都被通称为串口。 UART接口:又叫通用异步收发器,UART是串口收发的逻辑电路,这部分可以独立成芯片,也可以作为模块嵌入到其他芯片...
  • 通信协议又分为硬件层协议和软件层协议。硬件层协议主要规范了物理上的连线,传输电平信号及传输的秩序等硬件性质的内容。常用的硬件协议有串口,IIC, SPI, RS485, CAN和 USB。软件层协议则更侧重上层应用的规范...
  • USB-8501 工业级USB总线两线制RS485转换器提供了USB到RS485串行协议转换。...USB转485工业级两线制转换器广泛用于工控、安防、金融、智能交通、超市管理等领域。它是笔记本电脑现场编程调试的好帮手。 ...
  • CH9329 是一款串口标准设备(键盘、鼠标、自定义 HID)芯片,根据不同的...通过提供的上位机软件,用户也可自行配置芯片工作模式、串口通信模式、串口通信波特率、多种超时时间、VID、PID,以及各种 USB 字符描述符。
  • 串口是一种非常通用的设备通信协议(不要与通用串行总线Universal Serial Bus(USB)混淆)。 在C#中使用System.IO.Ports中的SerialPort类实现对串口的操作,包括设置端口号、波特率、数据位、校验位及停止位等参数...
  • 串口对于从事电子行业的朋友应该再也熟悉不过了,它是一种非常通用的设备通信协议,大多数台式机箱都有RS232-DB9的接口,而且还有多个USB接口。笔记本电脑通常只有3个USB口,而没有DB9端口,如果想使用串口功能,...
  • 产品本身可将自己的USB口或串口接到计算机后用配置程序进行串口和CAN的通信格式设定,然后用串口通信程序实现CAN协议通信。 硬件安装 将CAN232P型串口/CAN转换器通过配套的USB延长线...
  • 一、概述 名词解释 * 串口、COM指的物理接口形式(硬件) ...* PL2303、CP2102、CH340都是USB转TTL电平的芯片;MAX232,SP2323是TTL电平与232电平双向转换的芯片;MAX485是TTL电平与485电平双向转换的芯片 * 通
  • 串口通信

    2015-09-27 16:48:50
    接着上一篇,上一篇写的是产品模块通过...当然模块还可以直接和pc通过串口或者usb口通信,如果pc是笔记本的话,可以通过usb转串口的线来和模块通信,usb口的话直接连接就行了。 串口通信其实比较简单,android.serial
  • 调试时总是会遇到各种各样的接口,各种各样的转换板,...串口:串口是一个泛称,UART,TTL,RS232,RS485都遵循类似的通信时序协议,因此都被通称为串口。UART接口:通用异步收发器(Universal Asynchronous Receiv...
  • 调试时总是会遇到各种各样的接口,各种各样的转换板,...串口:串口是一个泛称,UART,TTL,RS232,RS485都遵循类似的通信时序协议,因此都被通称为串口。UART接口:通用异步收发器(Universal Asynchronous ...
  • 串口对于从事电子行业的朋友应该再也熟悉不过了,它是一种非常通用的设备通信协议,大多数台式机箱都有RS232-DB9的接口,而且还有多个USB接口。笔记本电脑通常只有3个USB口,而没有DB9端口,如果想使用串口功能,...
  • 串口(USART)通信-串口通讯协议简介 物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬件部分。 协议层:协议层主要规定通讯逻辑,统一收发双方的... USB转串口(TT...
  • 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial...同时,串口通信协议
  • USART串口通信接口

    2019-03-22 16:40:49
    一.串口通讯协议简介 1、RS232串口通讯结构图 RS232标准串口主要用于工业设备直接通信 ...USB转串口主要用于设备跟电脑通信 电平转换芯片一般有CH340、PL2303、CP2102、FT232 使用的时候电脑端需要安...
  • USB转I2C USB转I2C模块

    千次阅读 2018-06-12 16:50:18
    学习单片机的过程中,会接触各种各样的通信协议,类似串口、iic、spi、can等。... 下面推荐一块usb转iic的模块,同时也支持usb转串口。所以针对学习单片机的同学来说是非常好的工具了: 点击打开链接 ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 143
精华内容 57
关键字:

usb转串口通信协议