我正在通过MATLAB从串口读取数据。串行端口由XBee模块连接。
我已经成功地读取了数据并且还可以正确地发送数据。这是代码;这很简单:
s = serial('COM4', 'BaudRate', 9600, 'Terminator', 'CR', 'StopBit', 1, 'Parity', 'None');
fopen(s);
while(1)
while(s.BytesAvailable==0)
end
fprintf(s,'1');
fscanf(s)
s.BytesAvailable
end
因此,正如您在主循环的第一阶段所看到的那样,我正在等待输入缓冲区中的数据可用。代码检测到数据后,立即发送一个字符。然而执行并不像我预期的那么快。使用示波器,Xbee DIN和DOUT上的探头,在数据发送到PC和数据来自PC之间的时间间隔为34 ms。
对于我的应用程序,34毫秒是关键时刻。
我该如何解决这个问题?
答案 0 :(得分:2)
为什么以9600波特率使用USRT(通用串行接收器/发送器)?
您的USRT设置,“'BaudRate',9600,'StopBit',1”表示一个字节(8位)的数据通过线路传输10位(1个起始位,8个数据位和1个停止位)其速度为每秒9600位,因此每秒960字节是数据的最大速度。
大约每毫秒一个字节(毫秒)。
XBee使用5个字节作为标头,因此其标头开销约为5 ms。
如果使用25-28字节的数据,则34 ms并不是那么糟糕。如果您只使用几个字节的数据,则可能会遇到其他问题。
要改善此问题,您应该使用更高的USRT费率。
如果使用以下设置,则可在3 ms - 4 ms内完成数据传输。
s = serial('COM4', 'BaudRate', 115200, 'Terminator', 'CR', 'StopBit', 1, 'Parity', 'None');
我只想在你的代码中将波特率从9600改为115200。