2012-12-21 2 views
-1

Привет, ребята, я использую qextserialport для последовательной связи в Qt. Что происходит, когда я отправляю данные с моей платы контроллера, он считывает данные, но продолжает читать данные, даже если я выключу плату. Это означает, что он читается очень медленно, и когда я выключаю плату, все еще остаются байты для чтения на терминале. Как решить эту проблему?Как сделать qextserialport быстрее читать байты в Qt?

При выключении платы он должен прекратить чтение байтов.

+0

Вероятность того, что вам не хватает настройки для последовательного порта на вашей плате, особенно значения часов/бит. Вам нужно сообщить о том, как управлять метрикой на последовательном порту. – user1849534

ответ

0

Проверка четности в вашем последовательном порту неверно сконфигурирована.

  • Если вы уже попробовали другое серийное терминальное программное обеспечение, и это работает должным образом, Тогда вы неверно отконфигурировало qextserialport драйвера.

вы должны следовать этому типу инициализации:

... 

    bool uart_openPort(QString name, PortSettings *setting) { 

     static bool port_created = false; 

     if (port_created == false) { 
      port = new QextSerialPort(); 
      port->setQueryMode(QextSerialPort::Polling); 
      port_created = true; 
     } 

     if (connection_ready) { 
      uart_closePort(); 
      connection_ready = false; 
     } 

     port->setPortName(name); 
     port->setBaudRate (setting->BaudRate); 
     port->setDataBits(setting->DataBits); 
     port->setStopBits(setting->StopBits); 
     port->setParity(setting->Parity); 
     port->setFlowControl(setting->FlowControl); 
     port->setTimeout(1); 

     if (port->open(QextSerialPort::ReadWrite)) { 
      connection_ready = true; 
      qDebug("INFORMATION (UART OPEN PORT): Port open Successful!"); 

     } else { 
      connection_ready = false; 
      qDebug("CRITICAL (UART OPEN PORT): Error open Port!"); 
     } 

     return(connection_ready); 
    } 

    ... 

или вы могли бы провести некоторые фиксированные параметры в этом режиме

... 

    port->setPortName("/dev/ttyUSB0"); 
    port->setBaudRate(BAUD9600); 
    port->setDataBits(DATA_8); 
    port->setStopBits(STOP_1); 
    port->setParity(PAR_NONE); 
    port->setFlowControl(FLOW_OFF); 
    port->setTimeout(1); 

... 
  • Если вы не получите надлежащее функционирование в любом программном обеспечении, вы должны проверить свои контрольные настройки четности на своей плате;

  • Если вы используете поток uart, генерируемый программным обеспечением, в последовательной последовательности должен убедиться, что правильное размещение стартового бита и в конце передачи одного байта достаточно места для одного стопового бита.

+0

/struct PortSettings {BaudRateType BaudRate; DataBitsType DataBits; ParityType Parity; StopBitsType StopBits; FlowType FlowControl; ulong Timeout_Sec; ulong Timeout_Millisec;}; PortSettings portSettings = {BAUD19200, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 0, 500}; m_ptrSerialCommunicator = новый SerialCommunicator («COM1», portSettings); if (! (M_ptrSerialCommunicator-> OpenSerialPort («COM1», QIODevice :: ReadWrite))) { exit (0); } – Amar

+0

while (1) {if (m_ptrSerialCommunicator-> IsSerialPortOpen()) {ui-> StatusLabel-> setText (tr ("Последовательный порт открыт.")); if (m_ptrSerialCommunicator-> IsDataAvailable (6,3000)) { m_ptrSerialCommunicator-> read (szTemp, 6); count ++; szTemp [6] = '\ 0'; Данные = QString (szTemp) .toDouble(); plotdata = данные; emit Signal_For_Serial_Port (szTemp); } delay (10); // miliseconds } else {ui-> StatusLabel-> setText (tr ("Последовательный порт не открыт.")); } Данные = 0; } – Amar

+0

Этот код, который я использую для чтения 6 байтов каждый раз, я отправляю 6 байтов из моей платы контроллера. – Amar

Смежные вопросы