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基本使用相关推荐

  1. linux串口boost,Boost串口通信第一课 boost::asio::serial_port基本使用

    boost库有一个asio,支持串口通信. 步骤: 1.产生一个boost::asio::io_service(前摄模式,类似于完成端口,不过,可以针对不同IO对象) 2.构造一个boost::asi ...

  2. ros中使用serial包实现串口通信

    一.Ubuntu下的串口助手cutecom 1.安装cutecom并打开: sudo apt-get install cutecom sudo cutecom 2.查看电脑链接的串口信息(名称): d ...

  3. ros与下位机通信常用的c++ boost串口应用

    一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我下载的是boost_1_6_0版本, 解压. 2. 进入解压后目录: cd boost_1_6_0, 执 ...

  4. boost网络串口通信库

    一.前言 前面我写了一篇<boost开发网络库>一文,该文章介绍了使用boost库开发一个高效.稳定的网络通信库,其中用到了c++准标准库boost的asio网络通信模块,本文将要讲的是使 ...

  5. [Boost基础]并发编程——asio网络库——定时器deadline_timer

    asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求使用多线程和锁定,有些的避免了多线程编程带来的诸多有害副作用(如条件竞争 ...

  6. Boost:基于Boost的管道pipeline通信

    Boost:基于Boost的管道pipeline通信 实现功能 C++实现代码 实现功能 boost::asio模块,基于Boost的管道pipeline通信 C++实现代码 #include < ...

  7. Boost:基于boost::asio的延迟udp服务器测试程序

    Boost:基于boost::asio的延迟udp服务器测试程序 实现功能 C++实现代码 客户端源码 服务端源码 实现功能 boost::asio模块,基于boost::asio的延迟udp服务器测 ...

  8. Boost:基于boost::asio的延迟tcp服务器测试程序

    Boost:基于boost::asio的延迟tcp服务器测试程序 实现功能 C++实现代码 客户端源码 服务端源码 实现功能 boost::asio模块,基于boost::asio的延迟tcp服务器测 ...

  9. Boost:基于boost::asio单元测试的测试程序

    Boost:基于boost::asio单元测试的测试程序 实现功能 C++实现代码 实现功能 boost::asio模块,基于boost::asio单元测试的测试程序 C++实现代码 #ifndef ...

最新文章

  1. MyEclipse修改jsp模板文件
  2. 递归锁,死锁,使用递归锁解决死锁,信号量
  3. 第四周实践项目4 建立算法库——双链表
  4. 认识与设计Serverless(二)
  5. SAP GraphQL console UI的实现原理
  6. jp在java中无法编译_JPanal上加图片的问题!
  7. 如何把创建ECS(CreateInstance)作为触发器来触发函数计算
  8. Hive 导入CSV文件
  9. Linux内核深入理解中断和异常(5):外部中断
  10. 【JAQS】jaqs与DataCore 框架安装,学习笔记(一)
  11. 大数据开发笔记(七):Kafka分布式流式处理
  12. 多媒体计算机图形,计算机图形学几何造型多媒体可视化虚拟现实.DOC
  13. 研发中,问题以界面开发人员为解决负责人
  14. css 适配mac 字体,CSS:仅在mac上使用字体
  15. 种草功能在电商app源码中发挥的作用和价值
  16. 对冲策略及Python实现
  17. Nginx代理静态页面
  18. vue中使用clipboard实现点击复制功能
  19. 显卡超了100测试软件黑屏,win10更新后,桌面窗口管理器间歇性占用GPU3D 100%,此时系统卡顿,黑屏...
  20. pandas 用均值填充缺失值NaN —— fillna 方法解析

热门文章

  1. Firefox for Android 代理设置
  2. matlab实例静电场,浅析Matlab模拟静电场三维图与恒定电流场模拟静电场
  3. 赴美生子诚实签的五大谣言!!
  4. 申请高新技术企业认定需要多少专利?
  5. 李翰卿治疗小儿五更咳嗽经验
  6. 人为何有指纹【转自生物谷】
  7. 没错,我们和美帝的差距就是这么大!
  8. JavaScript 精选:哪些能提高开发效率的es6 新语法糖
  9. 如何将英文文献完整翻译?公式都可以快速完整插入,比淘宝上的机翻要强一百倍!
  10. LC30 Substring with Concatenation of All Words