主机操作系统:Centos 6.7
交叉编译器环境:arm-Linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询)
开发板平台: fl2440
Linux内核版本: linux-3.0 .54
交叉编译器环境:arm-Linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询)
开发板平台: fl2440
Linux内核版本: linux-3.0 .54
模块:安信可A7模块
上一篇我们用开发板在开发板通过命令microcom -s 9600 /dev/ttyUSB0监听到GPS发出的信息,紧接着我们通过程序获取GPS定位信息。
1.串口编程
由于A7模块获取到的GPS定位信息是通过串口发送到终端设备,我们在编程实现获取GPS定位信息中自然涉及到串口编程。
关于串口如何设置波特率,停止位。可以参考以下博客:
串口配置程序如下:
在该程序中,实现了对串口的波特率,数据位,停止位,奇偶校验位的设定
/*********************************************************************************
* Copyright: (C) 2017 Huang Weiming<710564672@qq.com>
* All rights reserved.
*
* Filename: set_ttyUSB0.c
* Description: This file
*
* Version: 1.0.0(2017年06月12日)
* Author: Huang Weiming <710564672@qq.com>
* ChangeLog: 1, Release initial version on "2017年06月12日 12时54分36秒"
*
********************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
int set_serial(int fd,int nSpeed,int nBits,char nEvent,int nStop) { struct termios newttys1,oldttys1;/*注释1*/ /*保存原有串口配置*/ if(tcgetattr(fd,&oldttys1)!=0) /*注释2*/ { perror("Setupserial 1"); return -1; } bzero(&newttys1,sizeof(newttys1)); newttys1.c_cflag|=(CLOCAL|CREAD );/*CREAD 开启串行数据接收,CLOCAL并打开本地连接模*/ newttys1.c_cflag &=~CSIZE;/*为了设置字符长度,首先用字符长度屏蔽标志CSIZE将表示字符长度的位清0*/ /*数据位选择*/ switch(nBits) { case 7: newttys1.c_cflag |=CS7; break; case 8: newttys1.c_cflag |=CS8; break; } /*设置奇偶校验位*/ switch( nEvent ) { case '0': /*奇校验*/ newttys1.c_cflag |= PARENB;/*开启奇偶校验*/ newttys1.c_iflag |= (INPCK | ISTRIP);/*INPCK打开输入奇偶校验;ISTRIP去除字符的第八个比特 */ newttys1.c_cflag |= PARODD;/*启用奇校验(默认为偶校验)*/ break; case 'E':/*偶校验*/ newttys1.c_cflag |= PARENB; /*开启奇偶校验 */ newttys1.c_iflag |= ( INPCK | ISTRIP);/*打开输入奇偶校验并去除字符第八个比特*/ newttys1.c_cflag &= ~PARODD;/*启用偶校验*/ break; case 'N': /*无奇偶校验*/ newttys1.c_cflag &= ~PARENB; break; } /*设置波特率*/ switch( nSpeed ) { case 2400: cfsetispeed(&newttys1, B2400); cfsetospeed(&newttys1, B2400); break; case 4800: cfsetispeed(&newttys1, B4800); cfsetospeed(&newttys1, B4800); break; case 9600: cfseti