GPS模块选择带有标准ttl电平NMEA标准输出的模块,这个实验只读取收的数据,不做解析,带解析的程序超出了keil 32k限制
由于GPS输出对时间要求不严格所以没有使用中断方式获得数据
#include <hw_memmap.h>
#include <hw_types.h>
#include <sysctl.h>
#include <string.h>
#include <uart.h>
#include <gpio.h>
#include <lm3s8962.h>
#include "rit128x96x4.h"
char strbuff[8][201];//8行缓存
char cThisChar;
unsigned int i=0,j=0,k=0,t=0;
char out[50];
int main(void){
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
RIT128x96x4Init(1000000);//初始化屏幕
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_3);
UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 9600,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
while(1)
{
while(UARTCharsAvail(UART1_BASE))
{
// Read the next character from the UART .
//
cThisChar=UARTCharGetNonBlocking(UART1_BASE);
if(cThisChar=='$' || i>200){ //$字符的是每一行的头字符,在此换行
i=0;
if(k<8)k++;else k=0;//换行
for(j=0;j<200;j++) strbuff[k][j]=' ';//清空将要写入的缓存
}
strbuff[k]=cThisChar;
i++;
}
RIT128x96x4StringDraw(strbuff[k], 0, k*10, 8);
//SysCtlDelay(SysCtlClockGet() / 12);
}
}
程序有点乱...这个会改进
另外这里有开源的NMEA格式数据解析的库http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4290303&bbs_page_no=1&bbs_id=3072
-