【问题标题】:Boost serial write wrong data sendBoost串口写错数据发送
【发布时间】:2013-02-06 08:23:23
【问题描述】:

我正在使用 boost asio 串行函数通过串行端口发送数据。我过去曾使用过它,它按我的意愿工作。但现在它的行为很奇怪。这是我用来发送数据的代码:

int data = 97;    //represents 'a'
string sendThis = "0";
sendThis[0] = (char)data;
cout<<sendThis<<" "<<data<<endl;
boost::asio::write(serial,boost::asio::buffer(sendThis,1));

问题是:当我发送大于 128 的数据时,我得到的正是我发送的数据。但是当我尝试发送小于 128 的字符时;在另一边,我得到了 128,这是 225 的“a”。由于这个问题,我总是在 128 到 255 之间。我尝试了不同的发送方法,结果总是相同的。欢迎提出任何建议。

【问题讨论】:

  • 您的问题中缺少一些信息。串口是怎么设置的?多少数据位?
  • 波特率 115200 我没有更改其他值。所以我认为它是默认值 8 位,没有奇偶校验。明天我会尝试自己设置它们。默认值可能有问题。
  • 我设置了数据位选项并且它起作用了。感谢您的关注。

标签: boost serial-port boost-asio


【解决方案1】:

我解决了我的问题。问题是前面在评论中提到的数据位选项。所以永远不要相信默认值,尤其是在它可以保护以前的状态的情况下。所以我认为数据位选项以某种方式发生了变化,并且它总是使用该值。我通过摘要设置选项:

serial_port_base::character_size x(8);
serial_port serial(io,"COM58");
serial.set_option(x);

之后它起作用了。比我通过评论设置选项再次尝试。它再次奏效了。所以我想它保护了以前的状态。所以要小心使用默认值。 它们可能不再是默认值了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多