《ESP32-S3使用指南—IDF版 V1.6》第四十四章 USB虚拟串口(Slave)实验

news/2025/10/28 15:45:06/文章来源:https://www.cnblogs.com/zdyz/p/19172005

第四十四章 USB虚拟串口(Slave)实验

1)实验平台:正点原子DNESP32S3开发板

2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6

3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子DNESP32S3开发板技术交流群:132780729

155537c2odj87vz1z9vj6l

155537nfqovl2gg9faaol9

本章,我们将向大家介绍如何利用USB在开发板实现一个USB虚拟串口,通过USB与电脑数据数据交互。
本章分为如下几个小节:
44.1 USB虚拟串口简介
44.2 硬件设计
44.3 程序设计
44.4 下载验证

44.1 USB虚拟串口简介
USB虚拟串口,简称VCP,是Virtual COM Port的简写,它是利用USB的CDC类来实现的一种通信接口。CDC(Communication Device Class)类是 USB2.0 标准下的一个设备类,定义了通信相关设备的抽象集合。
我们可以利用ESP32自带的USB功能,来实现一个USB虚拟串口,从而通过USB,实现电脑与ESP32的数据互传。上位机无需编写专门的USB程序,只需要一个串口调试助手即可调试,非常实用。
44.2 硬件设计
44.2.1例程功能
本实验利用ESP32自带的USB功能,连接电脑USB,虚拟出一个USB串口,实现电脑和开发板的数据通信。本例程功能完全同实验4(串口通信实验),只不过串口变成了ESP32的USB虚拟串口。当USB连接电脑(USB线插入USB_SLAVE接口),开发板将通过USB和电脑建立连接,并虚拟出一个串口。
LED闪烁,提示程序运行。USB和电脑连接成功后。
44.2.2硬件资源

  1. LED灯
    LED -IO0
    2.独立按键
    KEY0(XL9555) - IO1_7
    KEY1(XL9555) - IO1_6
    KEY2(XL9555) - IO1_5
    KEY3(XL9555) - IO1_4
  2. XL9555
    IIC_SDA-IO41
    IIC_SCL-IO42
  3. SPILCD
    CS-IO21
    SCK-IO12
    SDA-IO11
    DC-IO40(在P5端口,使用跳线帽将IO_SET和LCD_DC相连)
    PWR- IO1_3(XL9555)
    RST- IO1_2(XL9555)
  4. UART_NUM_0(U0TX、U0RX连接至板载USB转串口芯片上)
    U0TXD-IO43
    U0RXD-IO44
  5. USB
    44.2.3原理图
    本章实验使用USB接口与PC进行连接,开发板板载了一个USB接口,用于连接其他USB设备,USB接口与MCU的连接原理图,如下图所示:

image001

图44.2.3.1 USB接口与MCU的连接原理图
44.3 程序设计
44.3.1 程序流程图
程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:

image004

图44.3.1.1USB虚拟串口实验程序流程图
44.3.2 USB虚拟串口函数解析
ESP-IDF提供了一套API来配置USB。要使用此功能,需要导入必要的头文件:

#include"tinyusb.h"
#include"tusb_cdc_acm.h"

接下来,作者将介绍一些常用的ESP32-S3中的USB函数,这些函数的描述及其作用如下:
1,USB设备登记
该函数用给定的配置,来配置USB设备,该函数原型如下所示:

esp_err_ttinyusb_driver_install(consttinyusb_config_t *config);

该函数的形参描述如下表所示:

QQ截图20251028150636

表44.3.2.1tinyusb_driver_install ()函数形参描述
该函数的返回值描述,如下表所示:

QQ截图20251028150652

表44.3.2.2函数tinyusb_driver_install()返回值描述
该函数使用tinyusb_config_t类型的结构体变量传入,该结构体的定义如下所示:

QQ截图20251028150659

表44.3.2.3i2s_pin_config_t结构体参数值描述
完成上述结构体参数配置之后,可以将结构传递给 tinyusb_driver_install () 函数,用以安装USB驱动。
2,USB设备初始化
该函数用给定的配置,来初始化USB设备,该函数原型如下所示:

esp_err_ttusb_cdc_acm_init(consttinyusb_config_cdcacm_t *cfg);

该函数的形参描述如下表所示:

QQ截图20251028150707

表44.3.2.4tusb_cdc_acm_init ()函数形参描述
该函数的返回值描述,如下表所示:

QQ截图20251028150715

表44.3.2.5函数tusb_cdc_acm_init ()返回值描述
该函数使用tinyusb_config_cdcacm_t类型的结构体变量传入,该结构体的定义如下所示:

QQ截图20251028150724

表44.3.2.6tinyusb_config_cdcacm_t结构体参数值描述
完成上述结构体参数配置之后,可以将结构传递给 tusb_cdc_acm_init () 函数,用以实例化USB。
3,注册回调函数
该步骤用以注册回调函数,该函数原型如下所示:

esp_err_ttinyusb_cdcacm_register_callback(tinyusb_cdcacm_itf_titf,cdcacm_event_type_t event_type);

该函数的形参描述如下表所示:

QQ截图20251028150733

表44.3.2.7tinyusb_cdcacm_register_callback ()函数形参描述
该函数的返回值描述,如下表所示:

QQ截图20251028150741

表44.3.2.8 函数tinyusb_cdcacm_register_callback()返回值描述
4,发送数据1
该函数将数据从字节数组写入写入缓冲区,该函数原型如下所示:

size_ttinyusb_cdcacm_write_queue(tinyusb_cdcacm_itf_titf,const uint8_t *in_buf,size_tin_size);

该函数的形参描述如下表所示:

QQ截图20251028150749

表44.3.2.9tinyusb_cdcacm_write_queue ()函数形参描述
该函数的返回值描述,如下表所示:

QQ截图20251028150756

表44.3.2.10 函数tinyusb_cdcacm_write_queue()返回值描述
5,发送数据2
该函数从写缓冲区发送所有数据,该函数原型如下所示:

esp_err_ttinyusb_cdcacm_write_flush(tinyusb_cdcacm_itf_titf,uint32_ttimeout_ticks);

该函数的形参描述如下表所示:

QQ截图20251028150803

表44.3.2.11tinyusb_cdcacm_write_flush ()函数形参描述
该函数的返回值描述,如下表所示:

QQ截图20251028150811

表44.3.2.12 函数tinyusb_cdcacm_write_flush()返回值描述
44.3.3 USB虚拟串口驱动解析
在IDF版的33_usb_uart例程中,作者在33_usb_uart\components路径下新增了USB驱动文件。
这里我们只讲解核心代码,详细的源码请大家参考光盘本实验对应源码。
本实验,我们将相TinyUSB库文件拷贝到components文件夹下,在APP文件夹下的文件则是我们基于TinyUSB自行编写的代码。最终得到如下图所示的工程:

image005

图44.3.3.1 USB虚拟串口工程分组
上图中位于components文件夹下的是我们自己编写的一些外设驱动,main文件夹下包含了一个APP文件与一个后缀为.yml的文件。APP文件夹下包含的是USB模拟串口代码,而后缀为.yml的文件其主要作用是将项目中各组件的依赖项定义在单独的清单文件中,并以上图所示的方式进行命名。在我们的例程中提现出的作用就是简化了整个工程结构。我们在编译的过程中,系统便会帮我们自动生成USB外设所需要的依赖库:espressif_esp_tinyusb以及espressif_tinyusb。做到了即能简化项目工程,又能有效规避了在编译中遇到的错误,但前提是运行时得确保个人的电脑处于联网状态。
44.3.4 CMakeLists.txt文件
打开本实验BSP下的CMakeLists.txt文件,其内容如下所示:

set(src_dirsIICLCDLEDSPIXL9555)
set(include_dirsIICLCDLEDSPIXL9555)
set(requiresdriver)
idf_component_register(SRC_DIRS${src_dirs}
INCLUDE_DIRS ${include_dirs}REQUIRES ${requires})
component_compile_options(-ffast-math -O3 -Wno-error=format=-Wno-format)

该路径下的CmakeList文件并没有新增内容,主要变化在于main文件。
打开本实验main文件下的CMakeLists.txt文件,其内容如下所示:

idf_component_register(SRC_DIRS".""app"INCLUDE_DIRS".""app")

上述的红色app驱动需要由开发者自行添加,以确保USB驱动能够顺利集成到构建系统中。这一步骤是必不可少的,它确保了USB驱动的正确性和可用性,为后续的开发工作提供了坚实的基础。
44.3.5 实验应用代码
打开main/main.c文件,该文件定义了工程入口函数,名为app_main。该函数代码如下。

i2c_obj_ti2c0_master;
/**
* @brief      程序入口
* @param      无
* @retval     无
*/
voidapp_main(void)
{esp_err_t ret;ret =nvs_flash_init();                             /* 初始化NVS */if (ret ==ESP_ERR_NVS_NO_FREE_PAGES ||ret == ESP_ERR_NVS_NEW_VERSION_FOUND){ESP_ERROR_CHECK(nvs_flash_erase());ret =nvs_flash_init();}ESP_ERROR_CHECK(ret);led_init();                                           /* 初始化LED */i2c0_master =iic_init(I2C_NUM_0);                    /* 初始化IIC0 */spi2_init();                                          /* 初始化SPI */xl9555_init(i2c0_master);                               /* 初始化IO扩展芯片 */  lcd_init();                                           /* 初始化LCD *//* 显示实验信息 */lcd_show_string(30, 50, 200, 16, 16, "ESP32-S3", RED);lcd_show_string(30, 70, 200, 16, 16, "USBUSART TEST", RED);lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);tud_usb_usart();                                     /* USB初始化 */while(1){LED_TOGGLE();vTaskDelay(500);}
}

此部分代码比较简单,通过tud_usb_usart()等函数初始化USB,在该函数中需要注册一个调用CDC事件的回调函数。此时,如果回调已经注册,那么它将会被覆盖。同时,LCD显示实验信息,LED闪烁以示程序正在运行。

44.4 下载验证
本例程的测试,不需要安装特定的USB驱动,开发者只需用数据线将USB接口(不是UART接口)与PC端连接起来即可,并打开串口助手,选择对应的端口号进行数据发送操作。我们打开设备管理器(我用的是WIN10),在端口(COM和LPT)里面可以发现多出了一个COM8的设备,这就是USB虚拟的串口设备端口,如图44.3.1所示:

image007

图44.4.1 通过设备管理器查看USB虚拟的串口设备端口
如图44.4.1,ESP32通过USB虚拟的串口,被电脑识别了,端口号为:COM8(可变),字符串名字为:USB串行设备(COM8)。此时,开发板的LED闪烁,提示程序运行,如图44.4.2所示:

image009

图44.4.2 USB虚拟串口连接成功
然后我们打开XCOM,选择COM8(需根据自己的电脑识别到的串口号选择),并打开串口(注意:波特率可以随意设置),就可以进行测试了,如图44.4.3所示:

image011

图44.4.3 ESP32虚拟串口通信测试
可以看到,我们的串口调试助手,按发送按钮,可以收到电脑发送给ESP32的数据(原样返回),说明我们的实验是成功的。
至此,USB虚拟串口实验就完成了,通过本实验,我们就可以利用ESP32的USB,直接和电脑进行数据互传了,具有广泛的应用前景。

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

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

相关文章

2025年云南芒市旅游租车公司最新标杆服务商:腾冲佳旅汽车租赁,云南旅游包车|租车|汽车租赁|跨城出行新体验

在云南旅游市场个性化出行需求持续升级的 2025 年,腾冲市佳旅汽车租赁有限公司凭借对滇西旅游出行赛道的深度布局与服务深耕,成为众多游客与团体出行采购清单中的 “优选品牌”。自 2016 年成立以来,公司始终以 “打…

撒数据建模及特征处理方式,基于差分的思想基于数据处理,挖掘基于工艺历史数据的多recipe多变量参数差异变化与spec协同变化进行综合建模分析: for i in range(len(X)): try: dist = compute_hamming_distance_vecto…

如何穿越进程边界就是一个startActivity请求

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年小型风力发电机厂家权威推荐榜单:水平轴风机发电机/风光储一体化系统/垂直轴风机发电机源头厂家精选

全球小型风力发电机市场预计2035年将增长至103亿美元,这三家企业以创新技术开启分布式能源新纪元 小型风力发电机作为分布式能源系统的核心组成部分,以其灵活部署、适用多种风况的特点,在偏远地区供电、社区微电网及…

AI Agent 框架实测:AutoGen、CrewAI、LangGraph 有何不同?

​ 2025 年,AI 从「聊天」走向「行动」,智能体(Agent)成为新的爆点。但在众多 Agent 框架中,哪一款更适合你?我实际体验了 AutoGen、CrewAI、LangGraph 三大热门框架,本文带你一次看懂它们的差异与适用场景。一…

Everything下载安装教程:中文免费版下载 + 图文安装步骤(2025最新版)

本文详细介绍 Everything 下载安装全过程,提供官方中文免费版安装包下载地址,并包含 2025 最新图文安装教程与使用技巧。Everything 是 Windows 上最强的文件搜索神器,实现“输入即结果”的秒级搜索体验,完美替代系…

模型天天变,不变的是数据沉淀|OpenCSG 的开源哲学

一、模型焦虑时代的思考 AI 世界的变化速度远超想象: 模型架构在变、算法范式在变、算力平台在变。 企业面对纷繁的技术更新,常常陷入“追不上的焦虑”。 但 OpenCSG 认为,真正能穿越技术周期的,不是短期的模型性能…

2025冷弯型钢品牌 top 10 推荐

文章摘要 冷弯型钢作为现代建筑和工业领域的关键材料,近年来在高铁站、体育场馆等大型工程中应用广泛,行业呈现高速增长趋势。本文基于市场调研和用户反馈,为您推荐2025年冷弯型钢品牌前十名,其中华力冷弯型钢凭借…

软件测试必须知道的方法和知识

“软件测试技术是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先…

2025年口碑好的冷弯型钢品牌:华力冷弯型钢深度解读

文章摘要 本文深入解读2025年冷弯型钢市场中的口碑品牌——华力冷弯型钢,从技术优势、应用案例和公司实力角度分享经验。江苏华力钢管有限公司作为行业领先者,以其高质量产品、广泛合作网络和参与重大项目的信誉,为…

【数据结构】堆、计数、桶、基数排序的实现 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025口碑好的冷弯型钢品牌/厂家推荐

文章摘要 本文探讨2025年口碑好的冷弯型钢品牌,重点介绍江苏华力钢管有限公司(华力冷弯型钢)的技术优势、应用案例和行业地位。基于经验分享,分析冷弯型钢在大型建筑项目中的关键作用,强调华力公司的产品质量、合…

2025冷弯型钢源头厂家榜单前十

文章摘要 本文深入解读冷弯型钢的技术优势及其在现代建筑中的应用,重点介绍江苏华力钢管有限公司作为源头厂家的核心竞争力。通过分析华力冷弯型钢在大型项目如北京大兴机场中的实战案例,分享其产品质量、合作网络及…

2025年光伏支架钢管品牌全面解析与行业趋势

文章摘要 光伏支架钢管行业随着可再生能源的快速发展,在2025年迎来创新高峰,品牌竞争加剧,注重产品质量、定制化服务和可持续性。本文基于市场调研和行业数据,解析顶尖品牌排名,并提供详细的选择参考表单,帮助用…

2025年冷弯型钢品牌

文章摘要 本文探讨2025年冷弯型钢品牌的发展趋势,重点分析江苏华力钢管有限公司作为行业领先者的技术优势、项目案例和市场定位。华力冷弯型钢以其高质量产品、广泛合作网络和参与大型工程的经验,为建筑行业提供可靠…

2025年光伏支架钢管品牌排行榜

文章摘要 本文深入探讨2025年光伏支架钢管品牌的发展趋势,重点介绍江苏华力钢管有限公司在光伏支架钢管领域的专业优势。基于公司丰富的项目经验和严格的质量标准,文章分享华力光伏支架钢管在大型工程中的应用案例和…

2025年光伏支架钢管品牌排名前十推荐

摘要 光伏支架钢管行业随着全球可再生能源的快速发展而持续增长,预计到2025年,市场规模将突破百亿元,驱动因素包括政策支持、技术进步和成本下降。本文基于市场调研、用户评价和行业数据,整理出排名前十的光伏支架…

Zotero说明

本文主要介绍zeotero如何安装,以及相关的配置Zotero说明 压缩包下载:https://wwyy.lanzouu.com/iSb6p39jkp8f 1.软件安装 网址:Zotero | Your personal research assistant 安装时,电脑端需要安装,浏览器使用插件…

2025年光伏支架钢管品牌权威排名

摘要 随着全球可再生能源的快速发展,光伏支架钢管作为太阳能发电系统的关键支撑结构,行业需求持续增长,预计到2025年市场规模将突破百亿元。本文基于市场调研和行业数据,为您呈现排名前十的光伏支架钢管品牌综合评…

今天的实习可以把新出的中小厂的岗位都投一遍

今天的实习可以把新出的中小厂的岗位都投一遍今天的实习可以把新出的中小厂的岗位都投一遍大家好,我是jobleap.cn的小九。 2025.10.28-秋招实习要先投新出的中小厂。 小红书集团-电商运营实习生-源头好物团队 燃石医学…