我的应用程序使用MBED (在线IDE和库),主板NUCLEO-411RE和4D系统触摸屏通过全双工串行通信连接。我能够成功地将数据从主机发送到显示器,而不会出现错误。但是,在将数据从display发回主机时,我丢失了数据。将波特率降低到9600不能解决问题。
主机处理器保持在超级循环中,第一个动作是检查LCD是否发送串行数据( lcd4d.readable() )。然后,主机一次接收一个字符( lcd4D.getc() ),通过usb ( pc.printf(&recChar) )将其回送到PC,并进行一些进一步的处理。
我还在一个单独的终端会话上监控物理主机接收引脚。使用此功能,我可以确定LCD正确发送数据,但是主机处理器不能正确接收和回显该数据(回显到PC仅用于调试目的)。
参考超级循环代码片段:
do {
if ( lcd4D.readable() ) {
recChar = lcd4D.getc();
pc.printf(&recChar);
lcd4D_intr_Rx();
}另请参阅所附屏幕打印,显示终端左侧PC回应(数据丢失)和终端右侧硬件引脚监视器(确认数据正确发送)。
在仍然发生数据丢失的情况下,实现SerialRX中断也没有帮助。
谢谢你的建议,我没有主意了。

发布于 2016-09-13 16:22:48
我已经解决了这个问题。问题是主机处理器需要对接收到的串行数据做出足够快的响应。我基本上实现了一个快速的串行接收缓冲区,并确保在中断时立即缓冲接收到的字符。
https://stackoverflow.com/questions/39380082
复制相似问题