linux串口boost,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");
注意這種方式打開,如果串口沒有準備好,會導致程序拋異常,導致程序崩潰,所以應該要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"); s
}
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 hardware
boost::asio::serial_port::stop_bits ? ? ? ? ?停止位, ? ?可以為serial_port::stop_bits::one /onepointfive /two
boost::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);
}
}
?著作權歸作者所有:來自51CTO博客作者fengyuzaitu的原創作品,如需轉載,請注明出處,否則將追究法律責任
你的鼓勵讓我更有動力
總結
以上是生活随笔為你收集整理的linux串口boost,Boost串口通信第一课 boost::asio::serial_port基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu如何安装linux驱动程序,
- 下一篇: linux查看所有磁盘信息fdisk,L