MATLAB解析GPS数据程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

% 注:本程序可直接在MATLAB2017a 中运行

%该脚本文件用于学习GPS数据得读取,需要做其她用途请自行修改代码

%本脚本文件得前面几行代码就是要设置得一些参数

%默认使用3(需视情况修改)

%波特率设为GPS模块默认得38400

%下面为程序源码

clear

num_execute= 100; %执行次数

num_SingleRead = 150;%单次从串口读取得字节数(最好设置足够大(最低大概设为80),保证单次读取得数据包含一条完整得GPS数据)

Timedelay =0、2;%用于延时读取串口数据

BaudRate=38400; % 读取数据得波特率

Terminator = 'CR';

num_MaxTry= 5; %打开串口得最多尝试次数

BytesAvailableFcnCount = 1000;

%% 设置参数

%delete(instrfindall); %串口打开失败时使用此句

% delete(s);clear s % 串口打开失败时使用此句

serial3 =serial('3');

% 串口设置

serial3、BytesAvailableFcnMode = ’byte';

% serial3、InputBufferSize = 38400; % 输出波特率

serial3、BaudRate= BaudRate;% 读入波特率

% serial3、OutputBufferSize =1024;

serial3、BytesAvailableFcnCount= BytesAvailableFcnCount;

serial3、ReadAsyncMode = 'continuous’;

serial3、Terminator = Terminator;

%%打开串口

count_opentimes=1;

while contains(serial3、status,’closed')〉 0 &&count_opentimes 〈 num_MaxTry

fopen(serial3); %打开串口

count_opentimes = count_opentimes+1;

end

if contains(serial3、status,’open')< 1

disp(’open failed!');

return

end

%%读取并处理数据

% 初始化

GPS_Data = GPS_Init();

while(num_execute〉 0)

GPS_DataStrs = fread(serial3,num_SingleRead,'char’);%一次读出10个字符

GPS_DataStrs = reshape(GPS_DataStrs,1,[]);

GPS_DataStrs =split_str2strs(GPS_DataStrs);

GPS_Data_tmp= get_GPS_specificData(GPS_DataStrs);

GPS_Data = Updata_GPU_Data(GPS_Data,GPS_Data_tmp);

show_GPS_Data(GPS_Data);

pause(Timedelay); %延时

num_execute=num_execute—1;

end

% fprintf(s,'abcd');%给串口得发送数据

% fscanf(s); %从串口得接收缓存读数据

%%关闭串口并删除相关数据

fclose(serial3); %关闭串口

delete(serial3);

clear serial3

%%

%将字符串根据'\r\n'划分成多个子字符串,同时去掉首尾无用得残余字符串function out_strs=split_str2strs(StrData)

if contains(class(StrData),’char')

uint8(StrData);

end

record = get_pos_enterflag(StrData);

if StrData(1) == uint8('$') %开头为'$’得情况

flag_start= 1;

else

if size(record,2) >0

flag_start = record(1)+2;

else

out_strs = cell(0,0);

return

end

end

if StrData(end)== 13

flag_end =length(StrData)—1;

else

if size(record,2) 〉 0

flag_end = record(end)-1;

end

end

if flag_start 〉= flag_end

out_strs = cell(0,0);

return

end

StrData =StrData(flag_start:flag_end); %截取有效数据,方便下面划分子字符串

record = get_pos_enterflag(StrData);

num_strs = size(record,2)+1;

out_strs =cell(num_strs,1);

if num_strs 〉 1

out_strs{1,1} = char(StrData(1:record(1)—1));

if num_strs== 2

out_strs{num_strs,1} = char(StrData(record(1)+2:end));

else

fori = 2 :num_strs-1

out_strs{i,1}= char(StrData(record(i—1)+2:record(i)-1));

end

相关文档
最新文档