matlab功能强大,串口操作也非常easy。相信看过下面两个实验你就能掌握咯!
開始吧!
实验1:
从电脑COM2口读取数据。并将数据保存在TXT文件里,方便数据分析,以下是M脚本:
%名 称:Matlab串口-Lab1
%描 述:串口读,并写入txt文件里
s=serial('com2');
s.BytesAvailableFcnMode='byte'; % 串口设置
s.InputBufferSize=4096;
s.OutputBufferSize=1024;
s.BytesAvailableFcnCount=100;
s.ReadAsyncMode='continuous';
s.Terminator='CR';
fopen(s); %打开串口
out=fread(s,10,'uint8'); %一次读出10个字符
fprintf('%3c',out); %一个字符占三位输出,%c字符,%d整型 fid=fopen('serial_data.txt','w+'); % 'a+'读写方式打开,将文件指针指向文件末尾。 假设文件不存在则尝试创建之
fprintf(fid,'%3c',out); % 写入文件里
fclose(fid); fclose(s);
delete(s);
实验2:
相同的功能。用函数写更规范,代码例如以下:
% 打开串口
function scom = OpenSerial(sname, HReadFcn)
scom = serial(sname);
scom.BytesAvailableFcnMode = 'terminator';
scom.Terminator = '.';
scom.BytesAvailableFcn = HReadFcn;
try
fopen(scom);
catch err
fprintf('%s打开失败。 \n', sname);
end
fprintf('%s成功打开。\n', sname);
end
% 写串口
function WriteSerial(scom, str)
fprintf(scom, str ,'async'); % 异步方式
end
% 读串口回调函数
function ReadFcn_Com2(obj, ~)
n = get(obj, 'BytesAvailable');
if n
a = fread(obj, n, 'uchar');
c = char(a');
fprintf('%s\n', c);
end
end
% 关闭串口
function CloseSerial(scom)
try
fclose(scom);
catch err
fprintf('%s关闭失败。 ', scom.Name);
return
end
delete(scom);
end
仿真例如以下,使用虚拟串口连接串口2和3。打开串口调试助手,以默认方式打开com3
在matlab命令框中例如以下输入命令打开串口com2
>> scom =OpenSerial('com2', @ReadFcn_Com2);
com2成功打开。
向com2写
>>WriteSerial(scom, 'Hello!');
串口调试助手收到信息
用串口调试助手回复matlab。点上图中的手动发送(发送的信息已英文句号.结束),matlab中收到信息
Hello, Matlab.
>>
关闭串口
>> CloseSerial(scom)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VvbXV0aWFuOTEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
部分參考:http://blog.sina.com.cn/s/blog_6163bdeb0102e8qc.html
通过这两个实验。你学会使用了吗?呵呵...