当前位置: 首页 > java >正文

ros2--串口通信

开源串口驱动库

链接

系统的串口

查看系统串口设备

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协议。

驱动步骤

    try{serial_.setPort("/dev/" + port_name);                            //选择要开启的串口号serial_.setBaudrate(115200);                                     //设置波特率serial::Timeout timeOut = serial::Timeout::simpleTimeout(2000);  //写入和读取超时等待,单位millisecondserial_.setTimeout(timeOut);                                     serial_.open();                                                  //开启串口}catch (serial::IOException &e){RCLCPP_ERROR(this->get_logger(), "originbot can not open serial port,Please check the serial port cable! "); //如果开启串口失败,打印错误信息}if (serial_.isOpen()){}

http://www.xdnf.cn/news/9611.html

相关文章:

  • Lesson 9 防火墙 iptables 和 firewalld
  • SpringBoot 自动装配原理深度解析:从源码到实践
  • csdn_export_md
  • Linux特殊符号
  • Linux下挂载目录如何进行操作
  • C# Datatable筛选过滤各方式详解
  • PCI SSC推出PIN合规服务商列表计划
  • WES(一)——文件准备
  • 机器学习:线性回归、损失函数、导数、偏导
  • 主题阅读输出-关于成年/成熟的认识-01-学习
  • vue3 项目运行 加载 白屏
  • 嵌入式JPEG图像加水印实战技巧
  • 自我觉察是成长的第一步,如何构建内心的平静
  • 仿真每日一练 | ABAQUS水滴入水分析
  • SWMM+HTWATER最新水文水动力模型应用
  • linux版本vmware修改ubuntu虚拟机为桥接模式
  • STM32:ESP8266 + MQTT 云端与报文全解析
  • 微信小程序关于截图、录屏拦截
  • 通义实验室开源针对RAG的预训练框架
  • P1923 【深基9.例4】求第 k 小的数
  • Sentinel限流熔断机制实战
  • 软件测试计划中时间与资源的估算
  • 探索Dify-LLM:构建自定义大模型应用的高效平台
  • IO进程(进程 Process)
  • COF材料前沿应用:多孔晶态材料的催化革新之旅 | 乐研试剂
  • 华南会议|AI驱动仿真未来 2025 Altair区域技术交流会华南站,报名开启!
  • 【人工智能】DeepSeek的AI狂想曲:从训练到应用的交响乐
  • 2025.05.28【Parallel】Parallel绘图:拟时序分析专用图
  • 创建型模式之 Builder (生成器)
  • 从跟跑到领跑:雷克赛恩17年创业历程