转载请注明:http://blog.csdn.net/wang_zheng_kai

导航制导与控制实验室 2014年11月10日

好久没有写博客了,先从一个小小的程序开始一段新的历程吧;

最近的项目主要还是用的的是linux系统,这篇文章主要介绍如何从设置、读取BD+gps模块(um220),实际上主要是对串口(UART)的操作。

/** gps.c** um220 test** Author: Wang Zhengkai <449811900@qq.com>**/
#include <stdio.h>
#include <termios.h>
#include <strings.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
/*我用的是ubuntu的电脑测试的,使用的串口是ttyS0*/
#define DEV_NODE "/dev/ttyS0"
#define MAX_PACKET_SIZE 1024
</pre><pre code_snippet_id="478189" snippet_file_name="blog_20140930_2_1496439" name="code" class="objc">/************************************************
******* Initialize serial port options***********
************************************************/
static void setTermios(struct termios * pNewtio, int uBaudRate)
{bzero(pNewtio, sizeof(struct termios)); /* clear struct for new port settings *///8N1pNewtio->c_cflag = uBaudRate | CS8 | CREAD | CLOCAL;pNewtio->c_iflag = IGNPAR;pNewtio->c_oflag = 0;pNewtio->c_lflag = 0; //non ICANON
}/*************************************************
**设置um220串口的波特率9600,并刷新使其立即生效***
**************************************************/
void um220_uart_init(int ttyFd,struct termios *oldtio,struct termios *newtio)
{tcgetattr(ttyFd, oldtio); /* save current serial port settings */setTermios(newtio, B9600);tcflush(ttyFd, TCIFLUSH);tcsetattr(ttyFd, TCSANOW, newtio);
}/**************************************************
*************Analysis Data of um220****************
***************************************************/
void parseData(char *buf)
{int nQ, nN, nB, nC;char cX, cY, cM1, cM2;float fTime, fX, fY, fP, fH, fB, fD;if (buf == NULL){printf("error: Can't get buf!\n");return;}sscanf(buf,"$GNGGA,%f,%f,%c,%f,%c,%d,%02d,%f,%f,%c,%f,%c,%f,%04d%02x",&fTime,&fX,&cX,&fY,&cY,&nQ,&nN,&fP,&fH,&cM1,&fB,&cM2, &fD, &nB, &nC);printf("x: %c %f, y: %c %f, h %f, satellite: %d\n",cX, fX, cY, fY, fH, nN);
/*cX:N or S;fX:纬度;cY:E or W;fY:经度;fH:height;nN:卫星个数*/
}int main(void)
{int nb,command;int um220_fd = -1;char newbuf[MAX_PACKET_SIZE];char msg[20],*ret=NULL;struct termios oldtio, newtio;/*Open Um220 Module*/if ((um220_fd = open(DEV_NODE, O_RDWR)) < 0) {printf("error: Can't open serial port %s!\n", DEV_NODE);return -1;}/*Init Uart for Um220*/um220_uart_init(um220_fd,&oldtio,&newtio);/*Set Um220 options*/printf("Please select modules of um220\n");printf("1.BD module\n");printf("2.GPS module\n");printf("3.BD+GPS module\n");if(scanf("%d",&command) != 1){printf("error:input is wrong!\n");}switch(command){case 1:memset(msg, 0, sizeof(msg));strcpy(msg,"$cfgsys,h01");if(write(um220_fd,msg,sizeof(msg)) < 0)printf("Failed to set BD modules!\n");break;case 2:memset(msg, 0, sizeof(msg));strcpy(msg,"$cfgsys,h10");if(write(um220_fd,msg,sizeof(msg)) < 0)printf("Failed to set GPS modules!\n");break;case 3:memset(msg, 0, sizeof(msg));strcpy(msg,"$cfgsys,h11");if(write(um220_fd,msg,sizeof(msg)) < 0)printf("Failed to set BD+GPS modules!\n");break;default:printf("Can't identify command,set BD+GPS modules!\n");memset(msg, 0, sizeof(msg));strcpy(msg,"$cfgsys,h11");if(write(um220_fd,msg,sizeof(msg)) < 0)printf("Failed to set BD+GPS modules!\n");}for(;;){/*Read Data from Um220*/memset(newbuf, 0, 1024);nb = read(um220_fd, newbuf, MAX_PACKET_SIZE);if (nb == -1){perror("read uart error");return -1;}if ((ret=strstr(newbuf, "$GNGGA")) != NULL){/*Analysis Data*/parseData(ret);}sleep(1);}/*Recover Settings Of Serial Port*/tcsetattr(um220_fd,TCSANOW,&oldtio);/*Close Um220_fd*/close(um220_fd);
 return 0;
}

从串口设置、读取、并分析um220模块的数据相关推荐

  1. STM32F103学习记录——通过额外添加串口接口来接入ZigBee/蓝牙模块实现数据的远程传输

    目录 项目场景 硬件准备 实现过程 实现缘由 原理展现 成果展现 USB-TTL模块有线数据展示 ZigBee模块远程传输数据展示 最后总结 项目场景 本人在做STM32硬件开发项目中,传输数据这一块 ...

  2. 【中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程】

    中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程 简介 准备工作 PC端需要用到的工具 代码下载地址 GD32F103C8T6最小系统板 代码实现 GD32串口引脚定义如下: 串口的初始化 ...

  3. 串口通信协议示例与分析

    串口通信协议示例与分析     作者:佚名    教程来源:不详    点击数:  变频器与个人电脑使用RS-232/RS-485 串行总线连接,如下所示: 在通讯操作中,通过个人电脑以命令方式控制仪 ...

  4. nginx源码分析之模块初始化

    在nginx启动过程中,模块的初始化是整个启动过程中的重要部分,而且了解了模块初始化的过程对应后面具体分析各个模块会有事半功倍的效果.在我看来,分析源码来了解模块的初始化是最直接不过的了,所以下面主要 ...

  5. python串口实时读取数据画图_python串口绘图

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! (已完成)pythonapi操作tecplot做数据处理(已完成)用pyauto ...

  6. s7300plc串口通信_西门子PLC300串口通信协议比较与分析

    西门子 PLC300 串口通信协议比较与分析 通信方式一: CP341 通信模块的通信方式 CP341 有三种不同的接口模式, 分别为: CP 341-RS 232C , CP 341-20mA TT ...

  7. MBD(一)-下载包-getstart-raspberry串口设置问题

    跟着官方文档做 1. matlab和simulink支持包下载 2. matlab-树莓派demo 2.1-通过matlab命令控制LED灯闪烁 2.2 matlab代码部署到raspberry上 2 ...

  8. MJKDZ PS2手柄控制OskarBot小车(三):STM32接收无线串口模块的数据并处理

    MJKDZ PS2手柄控制OskarBot小车(三):无线串口模块接收数据并处理 [目录] 1.硬件与软件设计思路 - 1.1 硬件资源 - 1.2 STM32串口接收数据的方法 2.源代码详解 - ...

  9. Android Audio音量设置原理流程分析

    Android Audio音量设置原理流程分析 简介 本篇文章主要介绍Android音量设置从App应用层到framework层执行流程,以及相关的细节和原理分析,建议在阅读此文章前去看博主的混音理论 ...

最新文章

  1. 单点登陆的技术实现机制
  2. struts2.0的工作原理
  3. 切换终端_首款搭载鸿蒙系统的终端来了:配自研芯片,能跟手机无缝切换
  4. 进度条的另外一种用法
  5. PKU A Simple Problem with Integers 3468
  6. java 向已存在的excel中追加数据 .
  7. 算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)
  8. java 读取webapp文件_在Java Webapp和Java Normal应用中读取公共外部属性文件
  9. Java中类变量(静态变量)和实例变量区别
  10. VS2008无法下断点调试的若干解决办法
  11. 如何将用户迁移到SQL Server中的部分包含的数据库
  12. Jquery实现搜索框提示功能
  13. Java语法总结 - 方法
  14. 【MATLAB信号处理】信号波形的产生及系统时域分析
  15. C# winform 中MessageBox用法大全(附效果图)
  16. 证券公司八大业务最全梳理
  17. JAVA实现126邮箱发送及部署后发送邮箱报错问题
  18. 程序员辉辉想裸辞,但又不太敢
  19. 3D游戏角色建模设计这样做,模型满分!
  20. 登录江苏人社网办大厅

热门文章

  1. python第一部分:Eclipse和PyDev搭建python开发环境
  2. 作为一名 程序员,怎样写出一份漂亮的简历?让招聘者眼前一亮,充满激动?...
  3. 天梯赛 L2 列车调度
  4. HDU - 1217 Arbitrage [最短路]
  5. Arbitrage(套利)
  6. 磁通计的测试原理及分类
  7. QAbstractSlider、QSlider、QDial、QScrollBar
  8. 命题和命题的否定可以同时成立吗?
  9. jar和war的区别
  10. driver failed programming external connectivity on endpoint