Matlab使用串口功能时,发现发送数据会让下位机重启,检测发现有自动下载电路的单片机,一般会让DTR位通过三极管控制下位机的EN位或者RST位以达到复位的效果。
delete(instrfindall); %关闭所有串口
handlesUart = serial('Com5'); %创建串口对象
%初始化串口
set(handlesUart,'BaudRate',115200,'DataBits',8,'Parity','none','Stopbits',1);
set(handlesUart,'Terminator','CR');%设置终止符号为CR
set(handlesUart,'InputBufferSize',1024);%输入缓存区为1024B
set(handlesUart,'OutputBufferSize',2048);%输出缓存区为2048B
% 设置串口数据最大读写时间,如果超过这个时间,仍读取不到数据,那么则终止读写
set(handlesUart,'Timeout',10000);
set(handlesUart,'BytesAvailableFcnMode','byte');%设置串口中断响应模式,byte是达到一定字节数,terminator是某个按键
set(handlesUart,'BytesAvailableFcnCount',1);%接受缓存区接受到2B,触发回调函数
set(handlesUart,'BytesAvailableFcn',{@instrcallback});%得到回调函数句柄
handlesUart.DataTerminalReady='on'; %设置DTR,一般的单片机一键下载功能是把DTR位设置为低达到复位单片机
handlesUart.RequestToSend='off';
fopen(handlesUart);%打开串口
str = '123456';
fwrite(handlesUart,str);%发送数据
%回调函数
function instrcallback(obj,event)
TWM = fscanf(obj);%读取出来的就是字符
disp(TWM);
end
%下面是关闭串口,但是执行了这几条语句就无法执行回调函数,因此注释
%fclose(handlesUart);%关闭串口操作
%delete(handlesUart);
%clear handlesUart;