1 Star 0 Fork 0

Gavin/libserialport

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT
# Serial Port Example ## 简介 该项目包含一个串口类 `serial_port` 和一个使用示例,旨在帮助用户在 Linux 环境下高效地进行串口通信。项目包括串口类的实现、数据编解码类 `data_codec` 以及一个演示如何接收和处理串口数据的示例程序。 ## 类说明 ### `serial_port` 类 `serial_port` 类提供了以下功能: - 打开串口 (`open_port`) - 关闭串口 (`close_port`) - 写入数据到串口 (`write_data`) - 从串口读取数据 (`read_data`) ### `data_codec` 类 `data_codec` 类用于数据的编码和解码,主要用于处理从串口接收到的数据包。 ## 使用方法 ### 依赖 - CMake 3.10 或更高版本 - g++ 或 clang++ 编译器 ### 编译和构建 在项目根目录中执行以下命令: ```bash mkdir build cd build cmake .. make ``` 编译完成后,您将在`build/bin`目录下找到生成的可执行文件`serial_port_example`。 ### 运行 ```bash ./build/bin/serial_port_example <port_name> [baud_rate] [ctsrts] ``` 例如: ```bash ./build/bin/serial_port_example /dev/ttyUSB0 115200 0 ``` - `<port_name>`: 串口设备名称(例如`/dev/ttyUSB0`) - `[baud_rate]`: 波特率(可选,默认为`115200`) - `[ctsrts]`: 硬件流控制(可选,`0`表示禁用,`1`表示启用,默认为禁用) ## 示例说明 示例程序会打开指定的串口端口,使用 data_codec 类解码接收到的数据,并输出解码后的数据包序列号。 ### 示例代码 ```C #include "serial_port.h" #include "data_codec.h" #include <iostream> #include <thread> #include <chrono> void serial_receiver_example(const std::string &port_name, int baud_rate, bool ctsrts) { try { serial_port sp(port_name, baud_rate, ctsrts); sp.open_port(); data_codec codec; while (true) { std::vector<uint8_t> data = sp.read_data(256); std::vector<std::unique_ptr<pkt_t>> decoded_packets = codec.decode(data); for (const auto &packet : decoded_packets) { // 处理解码后的数据包 std::cout << "Received Packet with Sequence: " << packet->seq << std::endl; } std::this_thread::sleep_for(std::chrono::milliseconds(100)); } sp.close_port(); } catch (const std::exception &e) { std::cerr << "Exception: " << e.what() << std::endl; } } int main(int argc, char *argv[]) { if (argc < 2) { std::cerr << "Usage: " << argv[0] << " <port_name> [baud_rate] [ctsrts]" << std::endl; return 1; } std::string port_name = argv[1]; int baud_rate = B115200; bool ctsrts = false; if (argc >= 3) { int baud = std::stoi(argv[2]); switch (baud) { case 9600: baud_rate = B9600; break; case 19200: baud_rate = B19200; break; case 38400: baud_rate = B38400; break; case 57600: baud_rate = B57600; break; case 115200: baud_rate = B115200; break; case 1000000: baud_rate = B1000000; break; default: std::cerr << "Unsupported baud rate. Using default 115200." << std::endl; break; } } if (argc >= 4) { ctsrts = std::stoi(argv[3]) != 0; } serial_receiver_example(port_name, baud_rate, ctsrts); return 0; } ``` ## 许可证 该项目使用 MIT 许可证,详情请参见 LICENSE 文件。 ## 作者 本项目由`Gavin`编写。如果您有任何问题或建议,请随时与我联系。

简介

c++, linux 展开 收起
C++ 等 2 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/aikoder/libserialport.git
git@gitee.com:aikoder/libserialport.git
aikoder
libserialport
libserialport
master

搜索帮助