在使用Asio C++進行串口通信時,首先需要包含相應的頭文件:
#include <boost/asio.hpp>
#include <boost/asio/serial_port.hpp>
然后,創建一個io_service
對象和一個serial_port
對象:
boost::asio::io_service io;
boost::asio::serial_port serial(io);
接著,打開串口并設置相關參數:
serial.open("/dev/ttyUSB0"); // 串口設備路徑
serial.set_option(boost::asio::serial_port_base::baud_rate(9600)); // 波特率
serial.set_option(boost::asio::serial_port_base::character_size(8)); // 數據位
serial.set_option(boost::asio::serial_port_base::parity(boost::asio::serial_port_base::parity::none)); // 校驗位
serial.set_option(boost::asio::serial_port_base::stop_bits(boost::asio::serial_port_base::stop_bits::one)); // 停止位
最后,可以使用async_read
和async_write
函數進行異步讀寫操作:
char data[1024];
serial.async_read_some(boost::asio::buffer(data, 1024), [](const boost::system::error_code& error, std::size_t bytes_transferred) {
if (!error) {
// 處理讀取到的數據
}
});
serial.async_write_some(boost::asio::buffer("Hello, world!", 13), [](const boost::system::error_code& error, std::size_t bytes_transferred) {
if (!error) {
// 數據寫入成功
}
});
io.run(); // 運行 io_service
這樣就可以使用Asio C++進行串口通信了。需要注意的是,串口通信是一種底層操作,需要處理好錯誤處理和數據解析等問題。