乐鑫技术交流
直播中

华强一条街

9年用户 728经验值
擅长:处理器/DSP
私信 关注
[问答]

ESP32-C3的USB Serial/JTAG Controller能作为通讯串口使用吗?

我这边使用的是ESP8685(我理解跟ESP32C3在这方面是一样的).
IDF是5.0版本.

我这边期望是:
我平时调试log与烧录通过默认的硬件串口实现.
与电脑上位机的通讯通过芯片自带的USB Serial/JTAG Controller中的虚拟串口功能实现.

目前问题:
目前测试下来(并根据你们的API指南),要让USB Serial正常收发通讯就得打开CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG宏.
但是这样会导致log也打印在USB Serial里,会干扰上位机的数据包解析.
我目前只能在打开CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG并关闭全部Log的情况下正常与上位机通讯.
所以想问下有没有办法可以做到log跟烧录在默认硬件串口,然后USB Serial完全交给我这边读写,不会插入log内容?

回帖(1)

石玉兰

2024-6-11 16:57:41
ESP32-C3的USB Serial/JTAG Controller确实可以作为通讯串口使用,但是根据您的描述,您遇到的问题是在打开`CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG`宏后,日志也会打印在USB Serial中,这会干扰上位机的数据包解析。

要解决这个问题,您可以尝试以下方法:

1. **使用不同的日志级别**:您可以在代码中设置不同的日志级别,例如使用`ESP_LOG_INFO`、`ESP_LOG_WARN`、`ESP_LOG_ERROR`等,然后在`esp_log_level_set()`函数中设置只输出特定级别的日志。这样,您可以在调试时开启日志输出,而在与上位机通讯时关闭或降低日志级别。

2. **使用日志过滤器**:您可以使用`esp_log_set_vprintf()`函数来设置一个自定义的日志输出函数,在这个函数中,您可以根据需要决定是否输出日志信息。例如,您可以在与上位机通讯时关闭日志输出,而在其他时候正常输出日志。

3. **使用软件串口**:如果硬件串口不足以满足您的需求,您可以考虑使用ESP32-C3的软件串口功能。这样,您可以将一个GPIO引脚配置为TX,另一个GPIO引脚配置为RX,从而实现软件串口通信。您可以使用`esp_serial_slave_link()`函数来配置和使用软件串口。

4. **使用任务调度**:您可以创建两个任务,一个用于与上位机通讯,另一个用于日志输出。通过合理的任务调度,可以避免日志输出干扰上位机的数据包解析。

5. **使用中断和标志位**:您可以使用中断和标志位来控制日志输出。在与上位机通讯时,设置一个标志位,当日志输出函数检测到这个标志位时,就暂时不输出日志。在通讯结束后,清除标志位,恢复正常的日志输出。

请注意,以上方法可能需要您对ESP-IDF进行一些定制和修改。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分