ros2--串口通信

发布于:2025-05-29 ⋅ 阅读:(22) ⋅ 点赞:(0)

开源串口驱动库

链接

系统的串口

查看系统串口设备

ls /dev/ttyS* /dev/ttyUSB* /dev/ttyACM*

eg:

ls /dev/ttyS*
/dev/ttyS0   /dev/ttyS11  /dev/ttyS14  /dev/ttyS17  /dev/ttyS2   /dev/ttyS22  /dev/ttyS25  /dev/ttyS28  /dev/ttyS30  /dev/ttyS5  /dev/ttyS8
/dev/ttyS1   /dev/ttyS12  /dev/ttyS15  /dev/ttyS18  /dev/ttyS20  /dev/ttyS23  /dev/ttyS26  /dev/ttyS29  /dev/ttyS31  /dev/ttyS6  /dev/ttyS9
/dev/ttyS10  /dev/ttyS13  /dev/ttyS16  /dev/ttyS19  /dev/ttyS21  /dev/ttyS24  /dev/ttyS27  /dev/ttyS3   /dev/ttyS4   /dev/ttyS7

你的系统列出了多个 ttyS* 设备,但这并不代表你的电脑真的有这么多物理串口。这是 Linux 内核的常见行为,原因如下:

  1. 内核预分配机制
    Linux 内核会预先创建一组 ttyS* 设备节点(通常 0-31),即使没有对应的物理硬件。这是为了:

    • 兼容可能存在的硬件(如多串口卡)

    • 避免动态创建设备节点的开销

如何确认哪些是真实可用的串口?

# 查看物理串口信息
sudo dmesg | grep ttyS

输出示例(真实串口会显示详细信息):

[    0.123456] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.654321] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
  • 只有显示具体信息的才是真实存在的串口。

串口名称

ttyS3 是什么?

ttyS3 是 Linux 系统中串行端口(Serial Port)的设备名称,也可以理解为内核给物理串口分配的标识符,通常对应物理 UART 串口(如 RS-232)。

  • 命名规则

    • ttyS0ttyS1, ...:linux中的物理串口(如windows上的 COM1、COM2)。

    • ttyUSB0ttyUSB1, ...:USB 转串口设备(如 PL2303、CH340 等芯片)。

    • ttyACM0ttyACM1, ...:USB CDC ACM 设备(如某些 Arduino、STM32 的 USB 虚拟串口)。

COM 和 ttyS 的区别与关系**

1. COM*(Windows 系统)
  • 定义
    COM1COM2 等是 Windows 系统对串行端口(Serial Port)的命名,对应物理硬件(如主板上的 RS-232 接口)或虚拟串口(如 USB 转串口设备)。

  • 特点

    • 名称固定:COM1COM2...(最大到 COM256)。

    • 直接关联硬件:COM1 通常对应主板上的 9 针串口(DB9 接口)。

    • 虚拟串口:USB 转串口设备会被分配为 COM3COM4 等。

2. ttyS*(Linux 系统)
  • 定义
    ttyS0ttyS1 等是 Linux 系统对物理串口的设备节点命名,位于 /dev/ttyS*

  • 特点

    • 名称动态:ttyS0ttyS1...(内核预分配,可能多达 ttyS31)。

    • 物理串口:ttyS0 通常对应主板上的 UART 端口(如 Intel 8250/16550 兼容芯片)。

    • 虚拟串口:USB 转串口设备在 Linux 中命名为 ttyUSB0ttyUSB1 等(非 ttyS*)。

串口不是USB口

链接

串口使用的是串口通信协议,即(TX--RX接线);

USB使用的是USB协议。

驱动步骤