esp32开发与应用(esp32-s3的usb转串口功能)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

很多模块都有和pc通信的需求,比如需要用pc操作某个模块,进而间接对某个外设做操作。这种情况下,模块怎么和pc进行通信呢,大家自然而然想到的就是串口,但是一般的串口速度有限制。所以,这个时候大家就会转到usb,有没有办法通过usb直接转串口的方法,使得pc和模块之间可以直接交流呢,那么一个方法就是把模块仿真成为一个串口设备。

1、esp32-s3带有usb口

不是所有esp32都支持usb,这里我们选择了esp32-s3。

2、选择usb_serial_jtag_echo这个demo

实际配置usb相关功能的时候,很容易配置错。与其这样,不如通过everything找到usb_serial_jtag_echo这个example,把目录里面全部的内容都拷贝过来即可。

3、工程设置为esp32-s3

这个时候,就可以通过idf.py设置为esp32-s3项目了,

复制代码
idf.py set-target esp32s3

4、关键一步,设置输出为usb

到了这里,就到了关键的一步,即需要把printf等输出内容导出到usb口。输入idf.py menuconfig,接着继续查找Console Uart,搜索USB Serial/Jtag Controller这个选项,找到了就选上。这一步非常关键。

5、用vs打开项目、编译项目

上面都做好了,就可以用visual studio code打开项目,依次编译、烧录和查看了。有兴趣的话,可以看一下下面这个源代码,即usb_serial_echo_main.c文件,

复制代码
/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/usb_serial_jtag.h"
#include "sdkconfig.h"
#include "esp_log.h"
#include "esp_check.h"

#define BUF_SIZE (1024)
#define ECHO_TASK_STACK_SIZE (4096)

static void echo_task(void *arg)
{
    // Configure USB SERIAL JTAG
    usb_serial_jtag_driver_config_t usb_serial_jtag_config = {
        .rx_buffer_size = BUF_SIZE,
        .tx_buffer_size = BUF_SIZE,
    };

    ESP_ERROR_CHECK(usb_serial_jtag_driver_install(&usb_serial_jtag_config));
    ESP_LOGI("usb_serial_jtag echo", "USB_SERIAL_JTAG init done");

    // Configure a temporary buffer for the incoming data
    uint8_t *data = (uint8_t *) malloc(BUF_SIZE);
    if (data == NULL) {
        ESP_LOGE("usb_serial_jtag echo", "no memory for data");
        return;
    }

    while (1) {

        int len = usb_serial_jtag_read_bytes(data, (BUF_SIZE - 1), 20 / portTICK_PERIOD_MS);

        // Write data back to the USB SERIAL JTAG
        if (len) {
            usb_serial_jtag_write_bytes((const char *) data, len, 20 / portTICK_PERIOD_MS);
            data[len] = '\0';
            ESP_LOG_BUFFER_HEXDUMP("Recv str: ", data, len, ESP_LOG_INFO);
        }
    }
}

void app_main(void)
{
    xTaskCreate(echo_task, "USB SERIAL JTAG_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL);
}

6、测试验证

测试的时候,需要换一下usb口。因为esp32-s3模块中,有两个usb口,一个是连接wch芯片的,这边不是我们测试的地方,所以需要把usb口换到esp32-s3模块的另外一边,这样重新插上后,模块立马上电。继而打开xcom,软件就会发现出现了新com口,打开这个com口,发现无论输入什么,都有回显,效果如下,

复制代码
12345678I (32372) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38                           |12345678|
12345678I (33482) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38                           |12345678|
12345678I (34032) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38                           |12345678|
12345678I (34202) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38                           |12345678|
12345678I (34372) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38                           |12345678|
12345678I (34522) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38                           |12345678|
12345678I (34682) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38                           |12345678|
12345678I (34832) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38                           |12345678|
12345678I (34992) Recv str: : 0x3fceb4e4   31 32 33 34 35 36 37 38     

这一点和usb_serial_echo_main.c中的内容是一致的。其实usb转串口好处很多,不仅节约一个wch芯片,速度还快。实际wch本身只是一个转换芯片,串口速度也远远没有这个快。因为瓶颈不在wch,而在于esp32-s3的tx/rx本身。

试想一下,如果esp32-s3这边再次把tx/rx接出去,比如对接stm32,那么是不是esp32-s3本身也是一个wch模块呢。功能上其实很类似,就是相比wch,价格贵了点。

相关推荐
章老师说15 分钟前
BFE v1.8.6 正式发布:AI 网关计费精细化、Claude 协议与会话亲和性升级
运维·人工智能·ai·负载均衡·ai-native
Brilliantwxx30 分钟前
【Linux】 进程(10) 进程控制深度解析:创建、终止与等待
linux·运维·服务器·c语言·开发语言·网络
ai小陈35 分钟前
FramePack图生视频云端部署实战:从单图输入到视频输出的完整流程
服务器·人工智能·安全·ai·音视频·gpu算力
欧米欧1 小时前
Linux基础指令上
linux·运维·服务器
爱喝水的鱼丶2 小时前
SAP-ABAP:BAdI 上下文数据获取与交互:标准数据读取与修改逻辑实现
运维·性能优化·sap·abap·增强·经验交流·badi
ARM|X86+FPGA工业主板厂家2 小时前
基于嵌入式 GPU 的智能服务机器人
linux·运维·arm开发·fpga开发·机器人
sulikey2 小时前
Linux 粘滞位(Sticky Bit)完全指南:为什么共享目录需要“防删除“?
linux·服务器
mengge.cloud2 小时前
网络技术基础小白教程
linux·服务器·网络·云计算
pt10433 小时前
网络自动化Python课程:Python与Linux密钥和敏感信息管理介绍
运维·自动化
严谨的麻辣烫3 小时前
2026 年静态 IP 为什么重新受到关注?从住宅代理安全问题看固定网络出口
运维·服务器·tcp/ip·网络安全