学习lm3s8962之uart读取GPS数据实验

ssawee   2010-11-7 17:09 楼主
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

  • DSC_0039.JPG

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复