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

发布时间:2026/6/13 0:37:28

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 esp32s34、关键一步设置输出为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价格贵了点。

相关新闻