Matlab串行缓冲区问题

时间:2016-06-01 02:51:26

标签: matlab serial-port

我正在尝试使用以下Arduino代码从我的Simblee Rfduino通信到Matlab:

char testing[] = {1,2,3,4,5,6,7,8,'\0'};

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(6,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(6,LOW);
  Serial.flush();
  testing(EMG);
  Serial.flush();
  digitalWrite(6,HIGH);
}

在Python中,我能够以正确的顺序正确地读取1-8。

然而,在Matlab中,它不断改变顺序,没有一致性,使用以下代码:

function serial()
global ser 
ser = serial('COM5', 'BaudRate', 9600, 'FlowControl', 'hardware');
fopen(ser);

end 
function serial_callback(~, ~)
    global ser
    time = tic;
    fread(ser,1) % pull in data from serial port
    toc(time);    
end

我认为串口缓冲区可能存在一些问题。 您能否就如何始终如一地让Matlab按顺序读取数据提供一些指导?有其他人能够让Matlab可靠地从串口读取吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将FlowControl设置为软件(xOn和xOff标志)。仅当您具有“硬件资源”时,才可以使用硬件。

matlab的输入缓冲区通常符合fifo原理。

fopen()之后,您必须等待一秒钟。因为某些微控制器(如arduino uno ...)在uart接口初始化后会重新启动。

-> 暂停(1);