1. 案例背景与硬件准备
GM-3568JHF开发板作为ARM+FPGA异构计算的典型代表,在工业导航、无人机控制等领域有着广泛应用。这次我们要测试的是其GPS模块的定位功能,这是许多嵌入式项目中获取位置信息的基础需求。
开发板上的UART4接口(TTL电平)专门用于连接GPS模块。根据实测,市面上常见的NEO-6M、NEO-7N等GPS模块都能良好兼容。接线时需要注意:
- GPS模块的TX接开发板的RX(UART4_RXD_M0)
- GPS模块的RX接开发板的TX(UART4_TXD_M0)
- 确保共地连接(GND对接)
重要提示:GPS天线应尽量放置在开阔区域,金属外壳或建筑物遮挡会显著影响信号质量。我们曾有个农业无人机项目,因天线安装在金属支架下方,导致首次定位时间(TTFF)长达15分钟,调整位置后缩短到45秒内。
2. 软件环境部署
2.1 获取测试程序
测试程序位于开发资料包的linux_demo/smdt_gps_demo目录下。建议先通过file命令检查可执行文件的架构兼容性:
bash复制file smdt_gps_demo
正常应显示为ARM架构的ELF文件。如果显示"x86-64"则需要重新交叉编译。
2.2 权限设置详解
为什么需要chmod +x?这是因为:
- 默认情况下,通过SD卡或网络传输的文件会丢失可执行属性
- Linux系统通过权限位控制文件可执行性
- 直接运行未授权文件会导致"Permission denied"错误
进阶技巧:可以使用chmod 755 smdt_gps_demo一次性设置所有者读写执行、组和其他用户读执行权限。
3. GPS数据解析实战
3.1 启动参数解析
执行./smdt_gps_demo -h显示的参数中:
-d指定设备节点,默认为/dev/ttyS4-b设置波特率,需与GPS模块保持一致(NEO系列默认9600)-v可开启详细调试输出
实测发现,某些国产GPS模块使用115200波特率,此时需要相应调整:
bash复制./smdt_gps_demo -d /dev/ttyS4 -b 115200
3.2 输出数据解读
成功获取的GPS数据包含多个关键字段:
code复制[GPS INFO] latitude: 31.2304° N
[GPS INFO] longitude: 121.4737° E
[GPS INFO] altitude: 12.5 m
[GPS INFO] speed: 0.2 km/h
[GPS INFO] satellites: 8
其中:
- 纬度/经度采用十进制度数表示
- 海拔高度单位为米
- 速度值可能因GPS模块不同显示km/h或m/s
- 卫星数≥4才能实现有效定位
4. 常见问题排查指南
4.1 无数据输出排查流程
-
检查物理连接
- 用万用表测量TX/RX电压(TTL电平应为3.3V)
- 尝试交换TX/RX线序
-
验证串口可用性
bash复制stty -F /dev/ttyS4 9600 cat /dev/ttyS4正常应看到NMEA协议原始数据(如$GPGGA开头)
-
GPS模块状态确认
- 观察定位指示灯(慢闪表示搜星中,快闪表示已定位)
- 首次使用可能需要15-30分钟冷启动时间
4.2 精度优化建议
- 更新GPS模块的EPO星历数据(可通过U-Center工具)
- 启用SBAS增强系统(如WAAS/EGNOS)
- 在开阔场地进行测试,避开高压线、基站等干扰源
5. 进阶开发指导
5.1 程序源码分析
测试程序的核心逻辑是:
- 初始化串口(设置波特率、数据位、停止位)
- 循环读取NMEA数据
- 解析GPRMC和GPGGA语句
- 提取经纬度、时间等信息输出
关键代码片段:
c复制int gps_fd = open(device, O_RDWR | O_NOCTTY);
struct termios options;
tcgetattr(gps_fd, &options);
cfsetispeed(&options, baud_rate);
cfsetospeed(&options, baud_rate);
options.c_cflag |= (CLOCAL | CREAD);
tcsetattr(gps_fd, TCSANOW, &options);
5.2 自主开发建议
如果需要二次开发,建议:
- 使用成熟的NMEA解析库(如minmea)
- 添加信号质量判断逻辑(HDOP值≤2为佳)
- 实现数据缓存机制应对信号短暂中断
- 考虑使用GPSD守护进程管理多应用访问
6. 实际项目经验分享
在智能物流箱项目中,我们遇到GPS数据更新延迟的问题。最终发现是默认的1秒输出间隔与业务需求不匹配。通过修改GPS模块的NMEA输出频率(使用PMTK命令):
bash复制echo -e "$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n" > /dev/ttyS4
将GPRMC和GPGGA语句输出频率提高到5Hz,满足了实时追踪需求。
另一个教训是关于电磁兼容性。在工业现场测试时,变频器导致GPS信号异常。解决方法包括:
- 为GPS模块单独供电
- 使用磁环抑制高频干扰
- 在软件端添加卡尔曼滤波算法
这些实战经验让我深刻体会到,嵌入式GPS开发不仅是接线和调用API那么简单,需要综合考虑硬件设计、环境因素和软件鲁棒性。
