现在手上有一块Arduino平台的GPS模块,芯片是EB-365,为了减少开发难度,采用了CooCox官方推出的一套针对M3和M0的固件库,该固件库具有使用简单,顶层设计接口简单、一致,在M3和M0内核的芯片之间移植,只需要更改部分管脚编号和时钟频率大小,移植性非常好。详细可见CooCox官网的说明http://www.coocox.org/COX.html。
此次主控板采用CooCox推出的Cookie板http://www.coocox.org/Cookie.html,该主控板完全兼容arduino接口,同时还扩展和丰富了其功能。
GPS芯片是EB-365,该芯片完全兼容U-Blox。 GGA:时间、位置、定位类型 GLL:UTC时间、经度、纬度 GSA:GPS接收机操作模式、定位使用的卫星、DOP值 GSV:可见GPS卫星信息、仰角、方位角、信噪比(SNR) RMC:时间、日期、位置、速度 注意:输出的信息、频率与设置有关
同时注意北京时间比UTC时间快8小时,因此在处理时间时应特别注意时间变换和闰平年的问题。
先将UART这部分程序贴出来,剩下的还在开发。会陆续贴出来的。 串口1采用9600,8,1,0,中断接收,因为GPS每一帧数据最大只有60至70之间,故我们定义了一个全局数组rev_buf[80]用来接收GPS的信息,详细程序如下:
//*****************************************************************************
//
//! \brief UART1 Interrupt Receive Service.
//!
//! \param None.
//!
//! \return None.
//
//*****************************************************************************
unsigned char num = 0;
//
//! You need to define these variables in the main.c and initialize to 0.
//
extern char rev_buf[80]; //Receive Buffer
extern unsigned char rev_start, //Receiving start flag
rev_stop, //Receiving end flag
gps_flag; //GPS Processed flag
unsigned long
uart1CallbackFunc(void *pvCBData, unsigned long ulEvent,
unsigned long ulMsgParam, void *pvMsgData)
{
unsigned char ch;
ch = UARTCharGet(sUART_BASE);
if ((ch == '$') && (gps_flag == 0))
{
rev_start = 1;
rev_stop = 0;
}
if (rev_start == 1)
{
rev_buf[num++] = ch;
if (ch == '\n')
{
rev_buf[num] = '\0';
rev_start = 0;
rev_stop = 1;
gps_flag = 1;
num = 0;
}
}
return 0;
}
//*****************************************************************************
//
//! \brief UART1 Initialize.
//!
//! \param ulBaudrate is the baud rate of UART1.
//!
//! \return None.
//
//*****************************************************************************
void
UART1_Init(unsigned long ulBaudrate) //9600
{
xSysCtlPeripheralReset(xSYSCTL_PERIPH_UART1);
xSysCtlPeripheralEnable(xSYSCTL_PERIPH_UART1);
xSysCtlPeripheralClockSourceSet(xSYSCTL_UART0_MAIN, 1);
xSysCtlPeripheralEnable(xGPIOSPinToPeripheralId(sD0));
sPinTypeUART(sUART_BASE);
xUARTConfigSet(sUART_BASE, ulBaudrate, (UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
xUARTIntEnable(sUART_BASE, xUART_INT_RX);
UARTIntCallbackInit(sUART_BASE, uart1CallbackFunc);
xUARTEnable(sUART_BASE, (UART_BLOCK_UART | UART_BLOCK_TX | UART_BLOCK_RX));
xIntEnable(xINT_UART1);
}
//*****************************************************************************
//
//! \brief GPS Initialize.
//!
//! \param ulBaudrate is the baud rate of GPS.
//!
//! \return None.
//
//*****************************************************************************
void
GPS_Init(unsigned long ulBaudrate)
{
UART1_Init(ulBaudrate);
}
|