2016-09-07 71 views
1

我使用MBED(在線IDE &庫)用於我的應用程序,主機板NUCLEO-411RE和4D Systems觸摸顯示器通過全雙工串行通信連接。 我能夠成功地從主機發送數據以正確顯示。但是,當從顯示器向主機發送數據時,我正在丟失數據。 將波特率降至9600並不能解決問題。MBED串行丟棄數據

主機處理器保持超級循環,第一個動作是檢查LCD是否發送串行數據(lcd4d.readable())。主機然後每次接收一個字符(lcd4D.getc()),通過USB回顯給PC(pc.printf(& recChar))並進行一些進一步的處理。

我也在一個單獨的終端會話上監視物理主機接收引腳。使用這個我確定LCD正確地發送數據,但是這個數據沒有被主機處理器正確接收和迴應(PC的回聲僅用於調試目的)。

參見超級環路的代碼片斷:

do { 
    if (lcd4D.readable()) { 
     recChar = lcd4D.getc(); 
     pc.printf(&recChar); 
     lcd4D_intr_Rx(); 
    } 

也可參考附絲網印刷表示終端離開PC回波(數據丟失)和終端正確的硬件針顯示器(確認正確地發送的數據)。

實現SerialRX中斷也不能幫助仍然發生數據丟失的情況。

感謝您的任何建議;我沒有想法。 enter image description here

回答

1

我已經解決了這個問題。 問題在於主機處理器需要對收到的串行數據作出足夠快的響應。我基本上實現了一個快速串行接收緩衝區,並確保接收到的字符在中斷後立即被緩衝。

+0

您是否嘗試在串行通信線路上啓用流量控制? –