matlab串口采集数据

来源:互联网 发布:成女脸型数据 编辑:程序博客网 时间:2024/06/05 06:28

底层stm32利用下面格式发送数据

sprintf(uartdata,"%2.4f",adcdata);UARTprintf(uartdata);UARTprintf("=");

matlab利用如下程序接收数据
参考http://blog.sina.com.cn/s/blog_6163bdeb0102e8qc.html

OpenSerial.m

%在matlab命令框中如下输入命令打开串口com2%scom =OpenSerial('com2', @ReadFcn_Com2);%输入如下命令发送数据%WriteSerial(scom, 'Hello!');%在如下函数中更改数据处理方式%ReadFcn_Com2.m%输入如下命令关闭串口%CloseSerial(scom);%打开串口  function scom = OpenSerial(sname, HReadFcn)  scom = serial(sname); scom.BaudRate = 9600;scom.BytesAvailableFcnMode = 'terminator';  scom.Terminator = '=';  scom.BytesAvailableFcn = HReadFcn;  try  fopen(scom);  catch err  fprintf('%s打开失败。\n', sname);  end  fprintf('%s成功打开。\n', sname);  end  

WriteSerial.m

% 写串口function WriteSerial(scom, str)fprintf(scom, str ,'async'); % 异步方式end

ReadFcn_Com2.m

% 读串口回调函数function ReadFcn_Com2(obj, ~)n = get(obj, 'BytesAvailable');if n>6a = fread(obj, n, 'uchar');c = char(a(end-5:end-1));x = num2double(c);fprintf('%f\n', x);endend

CloseSerial.m

% 关闭串口  function CloseSerial(scom)  try  fclose(scom);  catch err  fprintf('%s关闭失败。', scom.Name);  return  end  delete(scom);  end  

需要注意的是,当stm32发送数据过快时,接收缓冲区会有过多数据,本文中只使用了n>6的判断,当数据长度变化的时候会有问题。所以stm32最好指定好数据的长度。

matlab默认的结束符是两个字节{LF,LF},前一个字节是读取结束符,第二个字节是发送结束符。stm32可以通过UARTprintf(“%f\n”,x);来发送数据,这样matlab就不用更改结束符

\r = CR (Carriage Return) // Used as a new line character in Mac OS before X

\n = LF (Line Feed) // Used as a new line character in Unix/Mac OS X

\r\n = CR + LF // Used as a new line character in Windows

https://cn.mathworks.com/help/matlab/matlab_external/terminator.html

0 0
原创粉丝点击