iverson3ya 2020-04-08 17:53 采纳率: 0%
浏览 183

如何使用QT 實現LIN BUS 的封包

目前卡在到底如何發送第一個BYTE 實現13BIT
後面的portocal都已經寫好了
我本來想用baudrate切換地個BYTE使用13845BARDRATE來實現13BIT
之後的數據都用20000
但QT好像沒辦法及時切換BAUDRATE發送 會先放進暫存以最後的baudrate來丟
就算我用flush清暫存 13bit->0x55 之間會空約30MS的時間
請問各位高手 該如何解決?

void MainWindow::send_LIN_command(char cmd, char byte1)
{
    const SettingsDialog::Settings serial = m_settings->settings();
    QByteArray data;
    QString str;
    const uchar *p;
    bool test,test2;
    test = m_serial->setBaudRate(13845);
    qDebug()<<"test:"<<test;
    if(test)
    {
        data.resize(1);//Sets the size of the byte array to size bytes.
        data[0]  = char(0x00);  // SYNC
        test2 = m_serial->write(data,1);
        m_serial->waitForBytesWritten(1000);
        //m_serial->flush();
        test = m_serial->setBaudRate(serial.baudRate);
        qDebug()<<"test2:"<<test2;
    }
    else
        return;
    //m_serial->flush();//Flushes any buffered data waiting to be written to the device.

    qDebug()<<"test:"<<test;
    data.resize(2);
    data[0]  = char(0x55);  // SYNC
    data[1]  = cmd;  // CMD
    if(cmd == 0x14)
    {
       data.resize(5);
       data[2] = byte1;
       data[3] = char(0x00);
       data[4] = char(0x00);

       p = reinterpret_cast<const uchar*>(data.constData());
       data[4] = LINCalculateSUM(p, data.size(), 3);
       str.sprintf("send:%02x,%02x,%02x,%02x,%02x,%02x", p[0],p[1],p[2],p[3],p[4],p[5]);
    }

    m_LIN_CMD = cmd;
    m_serial->write(data);
    m_serial->flush();//Flushes any buffered data waiting to be written to the device.


    qDebug() << str;
}
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-04-08 20:19
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器