使用 Rust 与 Windows 串口通信这篇记一下在香橙派5Plus上用 Rust 做串口通信,然后和 Windows 端打通的过程。参考了OrangePi_5_Plus_RK3588_用户手册_v2.1.pdf的 3.18.5. 40 pin 的 UART 测试 部分。
一、硬件确认
先查一下 40pin 引脚定义,找 UART1(/dev/ttyS1):
UART1 对应引脚 27 (TX) 和 28 (RX)。
二、权限配置
把自己的用户加到 dialout 组,否则打不开串口:
三、Rust 串口通信实现
之前用的是标准库多线程版本,这次改成 tokio 异步 + tracing 日志的版本。echo 逻辑:收到什么就回写什么,方便测试通路。
Cargo.toml
依赖变化:
- 加了
tokio:异步运行时,为后续扩展(网络、并发)打基础
- 加了
tracing+tracing-subscriber:结构化日志,比println!更灵活
main.rs
关键代码说明:
Arc<Mutex<>>:串口句柄需要在异步任务间共享(虽然当前只有一个 loop,但为后续拆分读写任务留余地)
timeout(20ms):防止阻塞,让 tokio 调度器有机会切走
String::from_utf8_lossy:二进制数据转字符串,非法字符用 代替,不 panic
drop(guard):显式释放锁,让其他异步任务有机会拿到串口
四、编译运行
看到日志
serial_echo started on /dev/ttyS1 就是跑起来了。五、Windows 端连接测试
USB 转 TTL 模块接线:
USB转串口模块 | 香橙派5Plus 40pin |
TXD | 引脚 28 (RX) |
RXD | 引脚 27 (TX) |
GND | GND |
注意交叉:模块 TX → 香橙派 RX,模块 RX → 香橙派 TX。
Windows 打开串口助手(如 PuTTY、SSCOM):
- 波特率:115200
- 数据位:8
- 停止位:1
- 校验:无
发送任意文本,应该能立即收到一模一样的回显。同时香橙派端会打印:
六、常见问题
现象 | 排查 |
权限不足 | 确认在 dialout 组,或临时用 sudo |
收不到数据 | 检查 TX/RX 是否接反;确认波特率一致 |
乱码 | 波特率不匹配,或流控设置不一致 |
程序卡住 | 串口被其他程序占用(如之前的调试进程) |
参考:
OrangePi_5_Plus_RK3588_用户手册_v2.1.pdf
【有关此项目其他内容,欢迎在下方留言(我会收到邮件通知),留言我会以邮件回复。或联系我的QQ。】
- 作者:L_Z_J
- 链接:https://www.mcoi.top/article/Post-rust-serial-demo
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。








