USB虚拟串口

STM32 USB虚拟串口 串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出。很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发。本章节来简单概述STM32低端芯片上的USB虚拟串口的移植。在官方DEMO中已经提供了现成的程序,这里对修改方法做简单说明。 官方demo及驱动程序,我存放在百度盘: http://pan.baidu.com/s/1hq3mo... 阅读详情
现代嵌入式系统中,异步串行通信接口往往作为标准外设出现在单片机和嵌入式系统中。但是随着个人计算机通用外围设备越来越少地使用串口,串口正在逐渐从个人计算机特别是便携式电脑上消失。于是嵌入式开发人员常常发现自己新买来的计算机上没有串口,或者出现调试现场用户的计算机没有串口的尴尬局面。相反,现在的个人计算机普遍拥有4个以上的USB接口,能不能使用USB接口代替串口,完成PC机和嵌入式系统的通信呢?

  1.USB虚拟串口代替物理串口的可行性

  首先,越来越多带USB接口的器件涌现出来,如带USB接口的单片机,或独立的USB接口器件,而且这些器件的成本已经很接近于使用RS232电平转换芯片所带来的成本。

  其次,市场上也出现了一些USB接口转串口的芯片,这些芯片一头为串口,另一头为USB接口,在其内部完成串口到USB协议的转换。该芯片通过USB口连接到个人计算机后,在操作系统中表现为一个串口设备,这意味着USB接口对于传统的串口调试工具(HyperTerninal)和用户基于串口的应用程序是透明的,开发人员完全不用更改PC端的调试和应用程序。

  但是这些器件的USB类不属于标准的USB设备类,因此需要在Windows和Linux操作系统上安装额外的设备驱动。另外,由于不是操作系统自带的设备驱动,而且通信经过了由串口到串口,USB从设备到USB主机的多次转换,当调试遇到问题时常常无法确定是串口出了问题还是USB出了问题。因此,应该使嵌入式系统直接和PC通过USB总线接口连接(通过片上的USB接口或片外USB接口芯片),由单片机直接完成USB虚拟串口的协议转换。

  在USB标准子类中,有一类称之为CDC类,可以实现虚拟串口通信的协议,而且由于大部分的操作系统(Windows和Linux)都带有支持CDC类的设备驱动程序,可以自动识别CDC类的设备,这样不仅免去了写专用设备驱动的负担,同时简化了设备驱动的安装。

  2.什么是CDC类

  USB的CDC类是USB通信设备类(Communication Device Class)的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。根据CDC类所针对通信设备的不同,CDC类又被分成以下不同的模型:USB传统纯电话业务(POTS)模型,USB ISDN模型和USB网络模型。其中,USB传统纯电话业务模型,有可分为直接线控制模型(Direct Line Control Model)、抽象控制模型(Abstract Control Model)和USB电话模型(USB Telephone Model),如图1所示。本文所讨论的虚拟串口就属于USB传统纯电话业务模型下的抽象控制模型。

 

  通常一个CDC类又由两个接口子类组成通信接口类(Communication Interface Class)和数据接口类(Data Interface Class)。笔者主要通过通信接口类对设备进行管理和控制,而通过数据接口类传送数据。这两个接口子类占有不同数量和类型的终端点(Endpoints),如图2所示。
 

  对于前面所述的不同CDC类模型,其所对应的接口的终端点需求也是不同的。如所需要讨论的抽象控制模型对终端点的需求,通信接口类需要一个控制终端点(Control Endpoint)和一个可选的中断(Interrupt)型终端点,数据接口子类需要一个方向为输入(IN)的周期性(Isochronous)型终端点和一个方向为输出(OUT)的周期性型终端点。其中控制终端点主要用于USB设备的枚举和虚拟串口的波特率和数据类型(数据位数、停止位和起始位)设置的通信。输出方向的非同步终端点用于主机(Host)向从设备(Slave)发送数据,相当于传统物理串口中的TXD线(如果从单片机的角度看),输入方向的非同步终端点用于从设备向主机发送数据,相当于传统物理串口中的RXD线。

  3.AT89C5131的简单介绍

  基于单片机的嵌入式系统要实现USB总线通信,通常都是通过外扩专用的USB总线接口芯片(如飞利浦的D12)。但是这样的方案既增加了成本,又使PCB板的面积变大,所以使用Atmel公司的集成了USB2.0全速(Full Speed)从接口外设的51单片机AT89C5131。

  AT89C5131是一个基于52内核的单片机。在存储器方面,其内部集成了32KB的Flash存储器用于代码的存储,1KB的EEPROM存储器用于用户数据的存储,用户可以使用片上的Bootloader或Flash API通过USB接口或者其他接口(如UART和I2C总线)对Flash存储器和EEPROM存储器进行ISP或者IAP编程。 此外AT89C5131还集成了10位的ADC、I2C总线接口和PCA模块等丰富的外设。

 

  AT89C5131的USB2.0全速从接口的结构如图3所示,其包括USB D+/D-的接口缓冲,数字锁相环,串行接口引擎(SIE)和通用功能接口(UFI)。其中数字锁相环以单片机的时钟为输入,产生了USB接口其他部分所需的48MHz时钟。串行接口引擎完成USB通信物理层NRZI码的编码与解码,CRC生成以及校验与纠错。通用功能接口包含了一个双端口的数据存储器,其一端与串行接口引擎链接,另一端通过数据总线与单片机相连接,使单片机可以通过特殊功能寄存器完成对USB2.0从接口的控制与通信。

  AT89C5131的USB2.0全速从接口包含了7个终端点,其中0号终端点被配置成为默认的控制终端点。其他1~6号终端点都可以通过特殊寄存器配置为控制(Control),突发(Bulk),中断(Interrupt)和周期性(Isochronous)模式。由于每一个终端点都由一组独立的寄存器对该终端点进行控制、状态识别和数据的存取,则如果将这些寄存器直接映射到51单片机的特殊功能寄存器地址空间显然是容纳不下的。因此,这7个终端点的7组寄存器在单片机的地址空间中其实使用的是同一组寄存器的地址,而通过一个特殊功能寄存器(UEPNUM)来选择当前该组寄存器实际选择的是哪个终端点的寄存器组,这样就大大节省了所占用的地址空间,为集成其他特殊外设提供了可能。

  4.基于AT89C5131的CDC类的实现

  AT89C5131与USB接口的硬件连接很简单,选用一个Btype的USB插座,因为按照USB规范,从设备使用Btype的USB插座,主设备使用Atype的USB插座,将Btype的USB插座的D+和D-脚分别与AT89C5131上的D+和D-脚相连。然后再在电源和D+之间用一个1.5 kΩ的上拉电阻连接,因为按照USB规范,USB主设备是通过从设备在插入时D+和D-上的绝对电平来确定从设备是一个全速设备还是一个低速设备的,而AT89C5131是一个全速设备,所以需要将D+上拉。

  下面介绍虚拟串口的单片机软件设计与实现。首先来看一下终端点的分配,按照CDC类抽象控制模型对终端点的需求,将单片机0号终端点和1号终端点分配给通信接口子类,分别作为控制终端点(完成枚举和串口参数设置)和中断终端点,而将2号和3号终端点分配给数据接口子类,分别作为IN和OUT终端点,虚拟串口的数据主要从这两终端点来进行传送。

 

  由于各个终端点的行为相对独立,对于每个终端点的控制过程又有相似性,在这里以2号终端点即作为数据接口的IN终端点为例,说明软件是如何对终端点进行操作和控制的,其控制流程图如图4所示。2号终端点是一个IN的终端点,它的主要工作是模拟物理串口的TXD线,向主设备发送数据。当主设备发出IN的请求时,如果FIFO不空,就向主设备发送FIFO的内容;如果FIFO为空,则向主设备发送一个空包作为回应。AT89C5131在收到IN的请求时,会触发USB中断(如果被使能),在中断处理程序中,如图4所示,首先判断中断的触发源是哪个终端点,如果是2号终端点,将USB寄存器组映射到2号终端点的那一组,然后将需要发送的串口数据填入FIFO寄存器(UEPDATX),置位UEPSTAX的TXRDY位,表示FIFO中的数据已经准备好,这时USB接口就会自动响应IN请求,并将FIFO中的数据发送出去,程序则可退出中断服务程序。对于其他的终端点,其处理过程也是相似的。

  软件使用Keil C51为编译系统,为了便于和系统的其他程序集成,采用标准字符型设备的API接口usb_getc()和usb_putc(),使程序具有很好的移植性。应用程序层函数(usb_getc()和usb_putc())与USB中断处理程序通过两个先进先出FIFO循环队列(TX和RX)来交换数据,这样有效的起到收发缓冲的作用,防止缓冲溢出。

  5.总结

  在单片机上实现基于CDC类的USB虚拟串口很好的适应了当前计算机外设接口的发展,同时因为这样的接口在PC操作系统中仍然映射为一个串口,所以又避免了大量的PC端调试程序和应用程序的重新编写。

STM32系列 USBCDC( 虚拟串口)详解 1、USBCDC就是虚拟串口,用途:在硬件板子(stm32)和外界设备交互的一种通信桥梁,类似串口,只要你看到芯片系列是STM32F103你就什么都不管,他就一个接口,它就只能作为USB Device,如果你的芯片是STM32F407,他就有两个USB接口,既可以作为HOST,又可以作为Device,还可以作为OTG接口。2、HOST、DEVICE、OTG、SLAVE是啥?三个知识点:DEVICE USB 该物理接口所接为host,做master control,如PC等大型设备。 阅读详情

相关推荐

USB虚拟串口的安装及使用方法

详细描述了如果将USB设备虚拟为串口,使用串口来和设备通信。特别是条码扫描枪的使用方法

USB 虚拟串口

USB 虚拟串口简介 USB虚拟串口简介 USB虚拟串口属于USB通信设备类。在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口。在系统内部,USB控制器提供了一个批量传输IN端点和一个批量传输的OUT端点,用于数据的接收和发送,模拟串口的RX和TX线。另外USB控制器还提供中断IN端点,发送当前串口的状态,实现对串口传输的控制。串口设备的数据,由系统的串口采集,在芯片内完成USB包的封装,通过USB总线上传至主机,再由相应的串口应用程序进行处理。对用户来说,看到的是基于串口的数据采集和传输

嵌入式与人工智能 1万+

Sourcetree与Gitee的搭配使用

初次将gitee与sourcetree联合起来使用,还是遇到了不少问题,其中最让人烦恼的就是在我修改了一下用户名之后,便无法在Sourcetree直接推送到gitee,很是让人郁闷。本文处理Sourcetree与gitee搭配使用过程中的问题:Sourcetree身份验证失败,无法推送;Sourcetree推送时,无法显示要推送的分支;Sourcetree远端上面有感叹号。

年少时的棉花糖 4434

USB 虚拟串口简介

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33767813的博客 1110

从零构建SOEM主站:基于STM32的EtherCAT伺服控制实战指南

本文详细介绍了如何从零构建基于STM32的SOEM主站系统,实现EtherCAT伺服电机的高精度控制。通过硬件选型、SOEM协议栈移植、PDO/SDO配置优化等实战步骤,帮助开发者掌握工业自动化中的关键运动控制技术,特别适用于23位编码器伺服电机的应用场景。

weixin_29186249的博客 666

【社区分享】从零开始学习 TinyML,建立 TensorFlow 深度学习模型(技术优化篇)

本文来自社区投稿与征集,作者王玉成,ML&IoT Google Developers Expert,温州大学智能锁具研究院总工程师。 了解更多:https://blog.youkuaiyun.com/wfing 经过前面几章的讨论,我们了解了TinyML 的概念,完成了一个最简单的TinyML 的模型并且运行在微控制器上,得出最基本的结果。但是在实际的工程应用中,模型建立之后,也需要再进一步结合许多优化方面的技术,这就是我们接下来想要探讨的。 5. 优化 TinyML 这本书也详细的向我...

tensorflowforum的博客 1万+

USB转串口设备在不同通信协议下的性能表现如何?

设备时,应考虑通信协议的要求、传输速率、距离、抗干扰能力以及操作系统的支持等因素。例如,对于需要高速数据传输和长距离通信的应用,可能需要选择支持RS-485或高速USB 2.0接口的。而对于一般的应用,如简单的数据采集或短距离通信,普通的RS-232或VCP模式下的设备可能就足够了。设备的性能表现在不同的通信协议下有所差异,选择合适的设备和配置对于确保通信的稳定性和效率至关重要。设备在不同通信协议下的性能表现主要取决于其硬件设计和驱动程序的支持。以下是对几种常见通信协议下。

fctel的博客 881

双通道中频信号数字下变频及相位差估计(FPGA)

双通道中频信号数字下变频及相位差估计实验 一、上框图(通俗易懂) 二、实验要求 1、 用点频信号模拟中频信号:中频信号由DDS1和DDS2产生。具体产生方法见第2点。 2、 DDS1和 DDS2:调用IPcore里的数字信号处理中的NCO模块,工作时钟为100MHz,数据率即为100MHz,DDS1和DDS2的频率为:(学号后三位+500)Khz+f0(可设为20MHz);输出为16位;DDS1...

qq_39809425的博客 6941

USB gadget serial and storage and ethernet

USB 虚拟串口简介 1. USB虚拟串口简介 2.usb gadget 串口(serial)的配置和使用 3.USB中CDC-ECM的了解和配置 1. USB虚拟串口简介 USB虚拟串口属于USB通信设备类。在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口。在系统内部,USB控制器提供了一个批量传输IN端点和一个批量传输的OUT端点,用于数据的接收和发送,模拟串口的RX和TX线。另外USB控制器还提供中断IN端点,发送当前串口的状态,实现对串口传输的控制。串口设备的数据,由系统的串

canwang的博客 5962

49、非合作目标运动参数估计与状态滤波方法研究

本文研究了非合作空间目标的运动参数估计与状态滤波方法。通过分析目标的章动运动特性,建立了运动方程,并分别提出了基于最小二乘法的质心运动参数估计方法和旋转运动参数估计方法。同时,设计了误差状态卡尔曼滤波器(ESKF)用于姿态滤波和角速度估计,以提高估计精度。仿真实验验证了所提方法的有效性,能够准确估计目标的运动参数和状态信息,为在轨服务提供了技术支持。

gpt4scribbler的博客 89

YOLOv11 改进 - 注意力机制 | 空间增强注意力SEAM(Spatially Enhanced Attention Module)提升遮挡场景检测鲁棒性

本文介绍了分离与增强注意力模块(SEAM)在YOLOv11中的结合应用。SEAM模块旨在增强面部特征学习能力,特别是处理面部遮挡问题。它采用多头注意力机制强调面部区域、抑制背景区域,第一部分使用深度可分离卷积减少参数并学习通道重要性,通过1x1卷积增强通道联系,利用两层全连接网络融合通道信息,经指数归一化后作为注意力权重与原始特征相乘。我们将SEAM集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,该方法有助于提升模型检测性能。

魔改工程师的博客 1664

STM32:USB 虚拟串口以及使用usb->dfu进行iap

USB虚拟串口不仅简化了硬件设计,避免了传统串口电平转换芯片的使用,还能提供更稳定的通信速率和更远的传输距离。对于调试信息输出、数据采集与监控等应用场景来说,USB虚拟串口是一种非常实用的技术方案。此外,通过USB实现DFU功能,使得用户可以在不依赖额外硬件工具的情况下,方便快捷地对STM32设备进行固件更新,极大地提高了产品的可维护性和用户体验。提示:以下是本篇文章正文内容,下面案例可供参考。

weixin_53950683的博客 3007

手把手教你学Simulink--基于Simulink的高增益DC-DC变换器仿真建模

特点高电压增益:可以在不使用变压器的情况下实现较大的电压升压比。适用于低电压源:如太阳能电池板、燃料电池等提供的低压直流电源。效率问题:设计时需特别注意提高效率,减少能量损失。挑战电路复杂性:通常涉及多个电感和电容,以及复杂的开关模式。元件选择:合适的元件参数对于达到理想性能至关重要。控制策略:确保高效稳定运行的同时,适应负载变化。首先明确要模拟的任务内容。实现特定的电压增益比(例如从24V升至380V)。根据预期的输入输出电压确定合适的电路拓扑和元件值。

MHD0815的博客 173

STM32 之 USB 虚拟串口

        在现代个人电脑的USB是几乎所有外设的标准通信端口。然而许多工业应用软件仍然使用经典的串口(UART)。USB虚拟串口提供了绕过这个问题的一个简单的解决方案。         为了让USB被视为一个COM端口,USB设备必须根据通信设备类(CDC)规范来实现两个接口: 1.抽象控制模型通信,在端点中有1个中断:在我们...

Neil驱动的博客 5773

DirectX function “GetDeviceRemovedReason“ failed with DXGI_ERROR_DEVICE_HUNG (“The GPU will not resp

游戏报错"DXGI_ERROR_DEVICE_HUNG"的解决方案 在使用RTX 40系显卡运行FIFA 23等游戏时,可能出现DirectX报错导致游戏崩溃。这主要由于最新显卡驱动与DirectX 12的兼容性问题。解决方法包括: 降级显卡驱动版本 修改游戏配置文件,将DIRECTX_SELECT设为1 在显卡控制面板中关闭垂直同步、抗锯齿、DLSS 3等功能 调整电源模式为性能优先 这些操作可以有效解决因驱动兼容性导致的游戏崩溃问题。

猿小白的博客 3888

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android usb虚拟串口,USB 虚拟串口简介

1. USB虚拟串口简介USB虚拟串口属于USB通信设备类。在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口。在系统内部,USB控制器提供了一个批量传输IN端点和一个批量传输的OUT端点,用于数据的接收和发送,模拟串口的RX和TX线。另外USB控制器还提供中断IN端点,发送当前串口的状态,实现对串口传输的控制。串口设备的数据,由系统的串口采集,在芯片内完成USB包的封装,通过USB...

weixin_42557537的博客 2447

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

STM32 -- USB虚拟串口通信

USB(Universal Serial Bus)即通用串行总线,是一种应用广泛的外部总线标准。它具有高速、可靠、支持热插拔等优点。USB通信基于主机 - 设备架构,主机(通常是计算机)负责管理和控制USB总线上的设备。通过以上步骤,我们可以实现基于STM32的USB虚拟串口通信。在实际应用中,可以根据需求对代码进行扩展,实现更复杂的数据处理和通信功能。同时,需要注意USB通信的稳定性和兼容性,确保在不同的主机环境下都能正常工作。以上代码仅为示例,实际开发中可能需要根据具体的硬件平台和需求进行调整。

duierrorshuobu的博客 2740

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【STM32 + CubeMX】 USB 虚拟串口通信

通过CubeMX + Keil,配置STM32作为USB设备端,与电脑进行通信(CDC); 通用带USB功能的 STM32 芯片 (如F1、F4等,系统时钟配置不同,代码通用)。

qq_49053936的博客 4万+

STM32F103 USB实现虚拟串口

STM32F103 USB实现虚拟串口。

qq_23313467的博客 9163

STM32 USB 系列之 虚拟串口(VPC)

STM32 USB系列之虚拟串口 这段时间缓慢更新一下stm32 usb系列的博客,前段时间在多个地方零零散散的学习和使用USB协议,在网上查找的资料也是零零散散的,整理一下写成博客。 1. 开发环境 使用stm32f103c8t6,HAL库,使用CUBE自带的USB库。工程使用vscode+gcc编译,工程文件在文末链接下载,提供makefile和keil两个版本。 2. 功能介绍 使用stm32 USB功能完成USB转串口功能,使用引脚配置如下: 使用USART1作为调试信息输出,USART2作为串

非 典型技术宅的博客 2万+

STM32F103实现USB虚拟串口

新建STM32CubeMX工程今天分享一下STM32F103如何实现虚拟串口,目标是让新手也能上手,如果谁没看懂或者照着做功能没有实现可以私信我,只要我看到一定回复。新建STM32CubeMX工程本次使用的是STM32F103C8T6核心板,按以下步骤新建一个STM32CubeMX工程。步骤一 :先输入MCU型号搜索芯片,软件支持模糊搜索,然后在右侧选中正确的MCU后,点击“next”到下一步;

Silas1750的博客 6890

STM32F407驱动USB实现虚拟串口

使用USB虚拟串口,用起来很爽,波特率能跑很高,主要可以应用在同ROS主机通讯上;具体细致学习,可以参考开源Dap-link的代码。dap-link另外想使用DMA的话,F4的还没实现,H7的可以,速度应该可以跑很高。

m0_64213554的博客 7521
上一篇: 实现 SPY++ 的 FindWindow Tool 的高亮
下一篇: vc串口枚举类
vrix
博客等级 码龄24年 673粉丝 167原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值