使用matlab

时间:2016-10-16 01:04:50

标签: matlab protocols uart serial-communication

我正在研究从我的uart线出来的数据; 我有一个与uart连接的PSoC 4,它发送得很好(所有时间,每个数据之间有20ms的延迟),然后我有matlab接收数据。

我正在使用fscanf(s, '%d')函数,它返回uart发送的大约3个数字,例如下面的例子:

s = serial('COM3'); %assigns the object s to serial port

set(s, 'InputBufferSize', 1024); %number of bytes in inout buffer
set(s, 'FlowControl', 'hardware');
set(s, 'BaudRate', 115200);
set(s, 'Parity', 'none');
set(s, 'DataBits', 8);
set(s, 'StopBit', 1);
set(s, 'Timeout',0.5);
%clc;

disp(get(s,'Name'));
prop(1)=(get(s,'BaudRate'));
prop(2)=(get(s,'DataBits'));
prop(3)=(get(s, 'StopBit'));
prop(4)=(get(s, 'InputBufferSize'));

disp(['Port Setup Done!!',num2str(prop)]);

         %opens the serial port
disp('Running');
fopen(s);
b = fscanf(s, '%d') 

-------------------------------------------------------------------------------------------
Matlab terminal:
b  = 
-213
-205
-215

该程序获取3个数字,我只想获取第一个(-213) 顺便说一下,这个数字可以是16000到-16000之间的任何数字

祝你好运

1 个答案:

答案 0 :(得分:0)

您可以使用fread读取特定数量的字节,而不是使用fscanf。

https://uk.mathworks.com/help/matlab/ref/serial.fread.html

在s = serial('COM3')的情况下,要写入一个字节,你会写:

b = fread(s, 1, 'uchar');

其中参数为:obj,size,'precision'

P.S。完成后不要忘记fclose(s)串口,这样你可以再次运行程序而不会出现“Obj已被打开”错误:))

一切顺利......