串口输出乱码或没有输出——断点在哪一环
本页回答的问题:“串口监视器里全是乱码,或者什么都没有——板坏了吗?”
几乎从来不是。先弄清你的板卡走哪条串口路径,再核对端口选择和波特率约定。本站收录的三类板暴露串口的方式各不相同,把它们混用是最常见的原因。
第 1 步——你的板卡走哪条串口路径?
| 板卡 | 到电脑的串口路径 | 对你意味着什么 |
|---|---|---|
| ESP32-DevKitC | 仅有 USB 转 UART 桥(一个 micro-USB 口,桥速率最高 3 Mbps) | 固件输出经芯片的 UART 引脚进入桥——这是一条有波特率约定的物理 UART 链路 |
| ESP32-S3-DevKitC-1 | 两个口:桥(micro-USB)和原生 USB OTG(USB-C) | 输出走哪个口取决于固件构建——见首次烧录;工具里选错端口就什么都看不到 |
| Pico / Pico 2 | 没有桥——芯片自己的 USB 控制器(BOOTSEL 驱动器、USB 串口 REPL) | USB 连接是虚拟串口;USB 路径上不存在独立的桥 UART |
第 2 步——乱码:波特率约定
物理 UART 没有时钟线——两端必须约定同一速率。工具与固件不一致时,你能看到字符,但内容是错的。这适用于:
- 两块 Espressif 板的桥口(芯片 UART 以固件设定的固定速率与桥通信);
- 你自己接线的任何物理 UART 引脚(UART/I2C/SPI 指南解释了 UART 链路是什么)。
修复并不神秘:把串口工具设为固件实际打印的速率(查你工程的串口初始化),然后复位板卡、从第一行开始看。
USB CDC 连接——Pico 的 USB 串口 REPL,或 S3 原生 USB 口在固件使用 USB CDC 时——是虚拟串口:多数工具里的波特率栏只是兼容性存在,并不约束链路速率。在那里出现乱码不是波特率问题;应去查端口选择和线缆。
第 3 步——完全无声:端口与模式
- 两个口、一个工具。 ESP32-S3-DevKitC-1 上,工具监听桥口而固件经原生 USB 打印(或相反)时什么都没有。确认固件用哪个口,并在工具里选中那个设备。
- 从第一行就无声? 启动信息在复位后立刻出现。在监视器打开的状态下按 EN/Reset(Espressif)或重新插拔(Pico)——链路正常就应捕获到启动输出。
- 根本没有串口设备? 那不是波特率问题——是识别链路:先走 USB 识别不到板卡。
- 板活着但不说话? 用可观察的证据核实:Pico 的 BOOTSEL 驱动器与固件无关地证明 USB 链路;Espressif 板的电源灯只证明供电,不证明固件。板在运行而串口安静,通常是固件没在你监听的那条路径上打印。
本页不能告诉你的
- 我们没有在这里的硬件上复现这些故障。 本页把官方事实(桥的存在与速率、S3 的两个口、BOOTSEL 驱动器、USB 串口 REPL)编排成诊断顺序;顺序本身是 MCUID 的编辑工作,不是厂商流程。
- 各框架默认波特率对照表。 默认值属于各框架并随版本变化;你自己工程的串口初始化才是权威。本页不冻结一张会漂移的表。
- 桥芯片料号——固定版本指南只写"a USB-to-UART bridge chip",未给型号;我们不猜。
来源
- ESP32-DevKitC V4 用户指南——单一 USB 转 UART 桥口、桥速率最高 3 Mbps(commit
5c06bf18) - ESP32-S3-DevKitC-1 v1.1 用户指南——两个 USB 口(USB 转 UART 桥与 USB OTG)(commit
5c06bf18) - MicroPython 拖放文档——Pico / Pico 2 的 BOOTSEL 大容量存储驱动器与 USB 串口 REPL(commit
21d772e7)