写代码,用SSCOM软件通过UART0一直往EasyARM1768发送GPS信息,采用中断方式接收GPS信息,并对信息进行解析,把经纬度解析出来。解析出来之后,通过UART0发回。
时间: 2024-05-12 19:18:34 浏览: 85
SSCOM串口调试_SSCOM_程序_receivedtofile_sscom用来干嘛_串口_
好的,您的问题是如何在EasyARM1768中解析GPS信息并发送回经纬度信息。首先,您需要编写一个程序来读取UART0端口上的GPS信息。在这个程序中,您需要使用中断处理程序来读取GPS信息并将其保存到缓冲区中。一旦收到完整的GPS信息,您可以使用一个简单的解析算法来提取经度和纬度信息。解析完毕后,您可以使用UART0端口将经纬度信息发送回给SSCOM软件。以下是一个简单的示例代码:
```c
#include <LPC17xx.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#define BUFFER_SIZE 128 //缓冲区的大小
volatile uint8_t gps_buffer[BUFFER_SIZE]; //GPS接收缓冲区
volatile uint8_t gps_index = 0; //缓冲区当前索引
volatile uint8_t gps_new_data = 0; //是否有新的GPS数据
volatile float longitude = 0.0; //经度
volatile float latitude = 0.0; //纬度
void UART0_IRQHandler(void)
{
uint8_t data = 0;
//读取接收数据寄存器
data = LPC_UART0->RBR;
//将数据放入GPS接收缓冲区
if (gps_index < BUFFER_SIZE - 1)
{
gps_buffer[gps_index++] = data;
}
else
{
//缓冲区已满,抛弃数据
}
//如果接收到了定位数据,则设置gps_new_data标志
if (gps_index > 8 && strstr((const char*)gps_buffer, "$GPGGA"))
{
gps_new_data = 1;
}
}
void parse_gps_data(void)
{
char* token = NULL;
char* next_token = NULL;
//分离经纬度信息
token = strtok_r((char*)gps_buffer, ",", &next_token);
token = strtok_r(NULL, ",", &next_token);
token = strtok_r(NULL, ",", &next_token);
latitude = atof(token);
token = strtok_r(NULL, ",", &next_token);
token = strtok_r(NULL, ",", &next_token);
longitude = atof(token);
}
int main()
{
//初始化UART0
LPC_SC->PCONP |= (1 << 3); //使能UART0电源
LPC_SC->PCLKSEL0 |= (1 << 6); //将UART0的时钟设为系统时钟
LPC_UART0->LCR |= (1 << 7); //使能DLAB
LPC_UART0->DLM = 0; //设置波特率
LPC_UART0->DLL = 13; //设置波特率
LPC_UART0->FDR = (1 << 0) | (1 << 4); //设置波特率误差
LPC_UART0->LCR &= ~(1 << 7); //关闭DlAB
LPC_UART0->LCR |= (3 << 0); //8位数据,无校验位,1位停止位
LPC_UART0->IER |= (1 << 0); //使能接收中断
NVIC_EnableIRQ(UART0_IRQn); //使能UART0中断
//主程序循环
while(1)
{
if (gps_new_data)
{
//收到新的GPS定位数据,进行解析
parse_gps_data();
//将经纬度信息发送回SSCOM软件
char str[64];
sprintf(str, "Longitude: %.6f, Latitude: %.6f\n", longitude, latitude);
int len = strlen(str);
for (int i = 0; i < len; i++)
{
while (!(LPC_UART0->LSR & (1 << 5))); //等待发送缓冲器就绪
LPC_UART0->THR = str[i]; //将数据发送出去
}
//重置GPS接收缓冲区
memset((void*)gps_buffer, 0, BUFFER_SIZE);
gps_index = 0;
gps_new_data = 0;
}
}
return 0;
}
```
此代码中,我们使用了EasyARM1768的UART0端口来读取GPS信息。我们将接收到的信息存储到缓冲区中,直到收到完整的GPS信息。一旦收到完整的GPS信息,我们使用一个简单的解析算法从中提取经度和纬度。然后,我们将经纬度信息发送回SSCOM软件。在这个过程中,我们使用了UART0发送缓冲区和LSR寄存器来发送数据。最后,我们重置了GPS接收缓冲区并等待下一个GPS定位数据。
阅读全文