Boost串口通信 boost::asio::serial_port基本使用
Boost串口通信 boost::asio::serial_port基本使用
boost库有一个asio,支持串口通信。
步骤:
1、产生一个boost::asio::io_service(前摄模式,类似于完成端口,不过,可以针对不同IO对象)
2、构造一个boost::asio::serial_port,有两种方法:
boost::asio::serial_port m_serialPort(m_IoService, "COM1");
//或者
boost::asio::serial_port m_serialPort(m_IoService);
m_serialPort.open("COM1");
例如:
using namespace boost::asio;
io_service iosev;
serial_port sp(iosev, "/dev/ttyUSB0");
注意这种方式打开,如果串口没有准备好,会导致程序抛异常,导致程序崩溃,所以应该要try{} catch包含,或者使用如下的方式
boost::system::error_code ec;serial_port sp(iosev);m_serialPort.open("COM1", ec);if (ec) return;
//还可以用另一种方式
try{boost::asio::serial_port m_serialPort(m_IoService);m_serialPort.open("COM1");}catch (exception& err){}
3、设置串口参数:波特率、奇偶校验 位、停止位、字符大小和流量控制,通过set_option方法
boost::asio::serial_port::baud_rate
//波特率boost::asio::serial_port::parity
//奇偶校验,可以为serial_port::parity::none / odd / even。boost::asio::serial_port::flow_control
//流量控制, 可以为serial_port::flow_control::type,enum类型,可以是none software hardwareboost::asio::serial_port::stop_bits
//停止位,可以为serial_port::stop_bits::one /onepointfive /twoboost::asio::serial_port::character_size
//字符大小
4、数据读写
read_some
write_some
async_read_some
async_write_some
5、同步读取例子
io_service iosev;boost::system::error_code ec;serial_port sp(iosev);sp.open("COM1", ec);if (ec) return;sp.set_option(serial_port::baud_rate(9600));sp.set_option(serial_port::flow_control(serial_port::flow_control::none));sp.set_option(serial_port::parity(serial_port::parity::none));sp.set_option(serial_port::stop_bits(serial_port::stop_bits::one));sp.set_option(serial_port::character_size(8));std::string strCompleteMsg;boost::asio::streambuf content_sb;int bytes = 0;while (1){strCompleteMsg = "";bytes = 0;while (strCompleteMsg.find("\r\n") == std::string::npos){bytes += boost::asio::read(sp, content_sb, boost::asio::transfer_exactly(1), ec);if (ec) break;boost::asio::streambuf::const_buffers_type cont_bufs = content_sb.data();strCompleteMsg = std::string(boost::asio::buffers_begin(cont_bufs), boost::asio::buffers_begin(cont_bufs) + bytes);}}
参考
https://www.cnblogs.com/kernel0815/p/3624632.html
Boost串口通信 boost::asio::serial_port基本使用相关推荐
- linux串口boost,Boost串口通信第一课 boost::asio::serial_port基本使用
boost库有一个asio,支持串口通信. 步骤: 1.产生一个boost::asio::io_service(前摄模式,类似于完成端口,不过,可以针对不同IO对象) 2.构造一个boost::asi ...
- ros中使用serial包实现串口通信
一.Ubuntu下的串口助手cutecom 1.安装cutecom并打开: sudo apt-get install cutecom sudo cutecom 2.查看电脑链接的串口信息(名称): d ...
- ros与下位机通信常用的c++ boost串口应用
一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我下载的是boost_1_6_0版本, 解压. 2. 进入解压后目录: cd boost_1_6_0, 执 ...
- boost网络串口通信库
一.前言 前面我写了一篇<boost开发网络库>一文,该文章介绍了使用boost库开发一个高效.稳定的网络通信库,其中用到了c++准标准库boost的asio网络通信模块,本文将要讲的是使 ...
- [Boost基础]并发编程——asio网络库——定时器deadline_timer
asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求使用多线程和锁定,有些的避免了多线程编程带来的诸多有害副作用(如条件竞争 ...
- Boost:基于Boost的管道pipeline通信
Boost:基于Boost的管道pipeline通信 实现功能 C++实现代码 实现功能 boost::asio模块,基于Boost的管道pipeline通信 C++实现代码 #include < ...
- Boost:基于boost::asio的延迟udp服务器测试程序
Boost:基于boost::asio的延迟udp服务器测试程序 实现功能 C++实现代码 客户端源码 服务端源码 实现功能 boost::asio模块,基于boost::asio的延迟udp服务器测 ...
- Boost:基于boost::asio的延迟tcp服务器测试程序
Boost:基于boost::asio的延迟tcp服务器测试程序 实现功能 C++实现代码 客户端源码 服务端源码 实现功能 boost::asio模块,基于boost::asio的延迟tcp服务器测 ...
- Boost:基于boost::asio单元测试的测试程序
Boost:基于boost::asio单元测试的测试程序 实现功能 C++实现代码 实现功能 boost::asio模块,基于boost::asio单元测试的测试程序 C++实现代码 #ifndef ...
最新文章
- MyEclipse修改jsp模板文件
- 递归锁,死锁,使用递归锁解决死锁,信号量
- 第四周实践项目4 建立算法库——双链表
- 认识与设计Serverless(二)
- SAP GraphQL console UI的实现原理
- jp在java中无法编译_JPanal上加图片的问题!
- 如何把创建ECS(CreateInstance)作为触发器来触发函数计算
- Hive 导入CSV文件
- Linux内核深入理解中断和异常(5):外部中断
- 【JAQS】jaqs与DataCore 框架安装,学习笔记(一)
- 大数据开发笔记(七):Kafka分布式流式处理
- 多媒体计算机图形,计算机图形学几何造型多媒体可视化虚拟现实.DOC
- 研发中,问题以界面开发人员为解决负责人
- css 适配mac 字体,CSS:仅在mac上使用字体
- 种草功能在电商app源码中发挥的作用和价值
- 对冲策略及Python实现
- Nginx代理静态页面
- vue中使用clipboard实现点击复制功能
- 显卡超了100测试软件黑屏,win10更新后,桌面窗口管理器间歇性占用GPU3D 100%,此时系统卡顿,黑屏...
- pandas 用均值填充缺失值NaN —— fillna 方法解析