使用Espressif IDE时ESP32-C2串口监视器显示乱码求助
ESP32-C2(ESP8684)串口监视器乱码及系统提示音问题
问题现象
- 刷入官方Hello World示例代码后,串口监视器显示乱码,更换Espressif VSCode扩展、基于Eclipse的Espressif IDE两种开发环境后问题依旧
- 两种环境下均尝试修改波特率,无改善
- 在Espressif IDE中打开串口监视器时,Windows会随机响起设备连接/断开类的系统提示音
- 操作流程:直接打开官方Hello World项目,选择正确设备与COM端口,编译刷入,未修改任何代码;多次重新安装所有软件后问题仍存在
- 串口监视器乱码截图:

可能的解决方法
1. 确认串口波特率与代码配置完全匹配
ESP-IDF默认串口波特率由sdkconfig中的CONFIG_ESP_CONSOLE_UART_BAUDRATE控制,默认值通常为115200,但部分ESP32-C2模块可能有特殊配置:
- 打开项目的
sdkconfig文件,搜索CONFIG_ESP_CONSOLE_UART_BAUDRATE,确认数值后将串口监视器波特率设置为完全一致的值 - VSCode环境下,可通过
Ctrl+Shift+P打开命令面板,输入ESP-IDF: SDK Configuration Editor,在Component config->ESP System Settings->Console UART baud rate中查看并修改
2. 检查硬件连接与串口模块兼容性
- 确认ESP32-C2的TX/RX引脚连接正确(模块TX接USB转串口模块RX,模块RX接USB转串口模块TX)
- 更换USB转串口模块(如CH340、CP2102)尝试,部分廉价模块可能存在波特率不准或电平不兼容问题
- 使用短且屏蔽良好的USB线,避免信号干扰
- 确保模块供电稳定,可尝试直接通过USB转串口模块的5V/3.3V引脚供电,避免面包板供电的不稳定情况
3. 关闭串口监视器的自动波特率检测
部分IDE的串口监视器默认开启自动波特率检测,可能导致识别错误:
- Espressif IDE中,打开串口监视器后关闭自动波特率选项,手动设置为与代码一致的波特率
- VSCode扩展中,在串口监视器面板右下角手动指定波特率,不要选择"AUTO"模式
4. 排查Windows串口驱动问题
- 卸载当前USB转串口驱动,重新安装官方最新驱动
- 打开设备管理器,检查COM端口是否有黄色感叹号,若有则右键更新驱动或卸载后重新插拔设备
- 尝试更换USB端口(优先使用主板后置USB端口,避免使用前置USB集线器)
5. 验证代码的串口输出配置
确保代码未修改默认串口输出配置,示例代码中printf默认使用UART0输出,检查sdkconfig中以下配置:
CONFIG_ESP_CONSOLE_UART_NUM设置为0(默认值)CONFIG_ESP_CONSOLE_UART_TX_GPIO和CONFIG_ESP_CONSOLE_UART_RX_GPIO与模块引脚对应(ESP32-C2默认TX为GPIO21,RX为GPIO20)
所用Hello World代码
/* * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: CC0-1.0 */ #include <stdio.h> #include <inttypes.h> #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_chip_info.h" #include "esp_flash.h" #include "esp_system.h" void app_main(void) { printf("Hello world!\n"); /* Print chip information */ esp_chip_info_t chip_info; uint32_t flash_size; esp_chip_info(&chip_info); printf("This is %s chip with %d CPU core(s), %s%s%s%s, ", CONFIG_IDF_TARGET, chip_info.cores, (chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "", (chip_info.features & CHIP_FEATURE_BT) ? "BT" : "", (chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "", (chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : ""); unsigned major_rev = chip_info.revision / 100; unsigned minor_rev = chip_info.revision % 100; printf("silicon revision v%d.%d, ", major_rev, minor_rev); if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) { printf("Get flash size failed"); return; } printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024), (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external"); printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size()); for (int i = 10; i >= 0; i--) { printf("Restarting in %d seconds...\n", i); vTaskDelay(1000 / portTICK_PERIOD_MS); } printf("Restarting now.\n"); fflush(stdout); esp_restart(); }
内容的提问来源于stack exchange,提问作者Manashap
相关产品推荐
相关产品推荐

