“玩板”+ 共享单车控制板-GPS模块ublox MAX-M8Q
<div class='showpostmsg'><p><span style="font-size:20px;">这种板子上的GPS模块有两种,一种是ublox的 MAX-M8Q,还有一种是LYNQ的N10,调试的时候我还是选择的ublox的 MAX-M8Q。</span></p><p>.</p>
<p><span style="font-size:20px;">测试的时候使用串口透传模式,打通UART2<--->UART3,GPS模块是接在UART3上,波特率是9600. 上位机使用u-box的u-center软件,还是挺方便的。</span></p>
<p><br />
<span style="font-size:20px;">接下来将考虑一下,如何解析这些数据,继续加油。</span></p>
<p> </p>
<p><span style="font-size:20px;">上传一些 MAX-M8Q的参考资料:</span></p>
<p><br />
<br />
<b><font color="#5E7384">此内容由EEWORLD论坛网友<font size="3">chenzhufly</font>原创,如需转载或用于商业用途需征得作者同意并注明出处</font></b></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>很好!</p>
<p>收到的格式类似这样的</p>
<p>// $GNRMC,092846.400,A,3029.7317,N,10404.1784,E,000.0,183.8,070417,,,A*73</p>
<p>/*<br />
$GNRMC,<br />
092846.400, // UTC时间,hhmmss.sss(时分秒.毫秒)格式<br />
A, // 定位状态,A=有效定位,V=无效定位<br />
3029.7317,N, // 纬度<br />
10404.1784,E, // 经度<br />
000.0, // 地面速率<br />
183.8, // 地面航向<br />
070417, // UTC日期<br />
, // 磁俯角<br />
, // 磁方向角<br />
A*73 // 模式指示<br />
*/</p>
<p>通过UART3接收GPS的数据,然后解析精度和维度,解析GNRMC 协议帧</p>
<pre>
<code>uint8_t parseGpsData(char* buffer, GPS_INFO* gps, GPS_DATA_TYPE type)
{
uint8_t ch, status, tmp;
char* buf = buffer;
int len = 0;
int commaCount = 0;
while (buf != '\0')
{
if (buf == ',')
{
commaCount++;
}
len++;
}
if (commaCount != 12)
{
return 0;
}
if (!((buf == '$') && (buf == 'G') && (buf == 'N') && (buf == 'R') && (buf == 'M') && (buf == 'C')))
{
return 0;
}
if ( type == (GPS_DATA_TYPE)GNRMC )
status = buf;
if ( status == 'A' )
{
getStringNumber(&buf, gps->latitude);
getStringNumber(&buf, gps->longitude);
return 1;
}
return 0;
}</code></pre>
<p> </p>
<h1>GPRM/GNRMC定位信息的读取与解析</h1>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="56">
<p align="center">帧头</p>
</td>
<td valign="top" width="81">
<p align="center">UTC时间</p>
</td>
<td valign="top" width="52">
<p align="center">状态</p>
</td>
<td valign="top" width="76">
<p align="center">纬度</p>
</td>
<td valign="top" width="76">
<p align="center">北纬/南纬</p>
</td>
<td valign="top" width="76">
<p align="center">经度</p>
</td>
<td valign="top" width="75">
<p align="center">东经/西经</p>
</td>
<td valign="top" width="76">
<p align="center">速度</p>
</td>
</tr>
<tr>
<td valign="top" width="56">
<p align="center">$GPRMC</p>
</td>
<td valign="top" width="81">
<p align="center">hhmmss.sss</p>
</td>
<td valign="top" width="52">
<p align="center">A/V</p>
</td>
<td valign="top" width="76">
<p align="center">ddmm.mmmm</p>
</td>
<td valign="top" width="76">
<p align="center">N/S</p>
</td>
<td valign="top" width="76">
<p align="center">dddmm.mmmm</p>
</td>
<td valign="top" width="75">
<p align="center">E/W</p>
</td>
<td valign="top" width="76">
<p align="center">节</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="73">
<p align="center">方位角</p>
</td>
<td valign="top" width="87">
<p align="center">UTC日期</p>
</td>
<td valign="top" width="95">
<p align="center">磁偏角</p>
</td>
<td valign="top" width="85">
<p align="center">磁偏角方向</p>
</td>
<td valign="top" width="92">
<p align="center">模式</p>
</td>
<td valign="top" width="66">
<p align="center">校验</p>
</td>
<td valign="top" width="70">
<p align="center">回车换行</p>
</td>
</tr>
<tr>
<td valign="top" width="73">
<p align="center">度</p>
</td>
<td valign="top" width="87">
<p align="center">ddmmyy</p>
</td>
<td valign="top" width="95">
<p align="center">000 - 180</p>
</td>
<td valign="top" width="85">
<p align="center">E/W</p>
</td>
<td valign="top" width="92">
<p align="center">A/D/E/N</p>
</td>
<td valign="top" width="66">
<p align="center">*hh</p>
</td>
<td valign="top" width="70">
<p align="center">CR+LF</p>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>格 式: $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF><br />
$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50<br />
说 明:<br />
字段 0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息<br />
字段 1:UTC时间,hhmmss.sss格式<br />
字段 2:状态,A=定位,V=未定位<br />
字段 3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)<br />
字段 4:纬度N(北纬)或S(南纬)<br />
字段 5:经度dddmm.mmmm,度分格式(前导位数不足则补0)<br />
字段 6:经度E(东经)或W(西经)<br />
字段 7:速度,节,Knots(一节也是1.852千米/小时)<br />
字段 8:方位角,度(二维方向指向,相当于二维罗盘)<br />
字段 9:UTC日期,DDMMYY格式<br />
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)<br />
字段11:磁偏角方向,E=东,W=西<br />
字段12:模式,A=自动,D=差分,E=估测,N=数据无效(3.0协议内容)<br />
字段13:校验值</p>
<p>解析经纬度暴露位置了,哈哈哈,解析时间就挺好的</p>
<pre>
<code> tmp = getComma(1, buf);
gps->DT.hour = (buf - '0') * 10 + (buf - '0');
gps->DT.minute = (buf - '0') * 10 + (buf - '0');
gps->DT.second = (buf - '0') * 10 + (buf - '0');
tmp = getComma(9, buf);
gps->DT.day = (buf - '0') * 10 + (buf - '0');
gps->DT.month = (buf - '0') * 10 + (buf - '0');
gps->DT.year = (buf - '0') * 10 + (buf - '0') + 2000;</code></pre>
<p></p>
<p>使用UBX协议不更简单吗?</p>
用的是有源天线还是无源天线? 感谢分享 谢谢 <p>感谢分享!!!!!!</p>
页:
[1]