404 lines
15 KiB
C
404 lines
15 KiB
C
|
|
#include "config.h"
|
|||
|
|
|
|||
|
|
volatile u8 GPSConnectRXTask_Flag = 0;//GPSConnect接受任务标志位,1允许运行
|
|||
|
|
volatile u8 GPSConnectTXTask_Flag = 0;//
|
|||
|
|
volatile u8 GPSConnect_RX_Buff[1000] = {0x01,0x03,0x00,0x02,0x00,0x09,0x00,0x00};;
|
|||
|
|
volatile u8 GPSConnect_TX_Buff[1000] = {0x01,0x03,0x00,0x02,0x00,0x09,0x00,0x00};;
|
|||
|
|
volatile u8 GPSConnect_DMA_RX_Len = 23;
|
|||
|
|
/*_____ D E F I N I T I O N __________________________________________________*/
|
|||
|
|
|
|||
|
|
u16 BigToLittle( u16 BigData)
|
|||
|
|
{
|
|||
|
|
return (BigData << 8 | BigData >> 8);
|
|||
|
|
}
|
|||
|
|
//u32 BigToLittle( u32 BigData)
|
|||
|
|
//{
|
|||
|
|
// union
|
|||
|
|
// {
|
|||
|
|
// u32 Temp;
|
|||
|
|
// u8 Buff[4];
|
|||
|
|
// }Dat;
|
|||
|
|
//
|
|||
|
|
// if(sizeof(BigData) == 2)
|
|||
|
|
// return (BigData << 8 | BigData >> 8);
|
|||
|
|
// else if(sizeof(BigData) == 4)
|
|||
|
|
// {
|
|||
|
|
// Dat.Buff[0] = (BigData >> 24) & 0xff;
|
|||
|
|
// Dat.Buff[1] = (BigData >> 16) & 0xff;
|
|||
|
|
// Dat.Buff[2] = (BigData >> 8) & 0xff;
|
|||
|
|
// Dat.Buff[3] = (BigData >> 0) & 0xff;
|
|||
|
|
// return (Dat.Temp);
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
/****************************************************
|
|||
|
|
函数名:GPSConnect_IO_Configuration
|
|||
|
|
功能 :GPSConnect卡通讯部分用到的IO初始化
|
|||
|
|
参数 :无
|
|||
|
|
返回值:无
|
|||
|
|
****************************************************/
|
|||
|
|
void GPSConnect_IO_Configuration(void)
|
|||
|
|
{
|
|||
|
|
GPIO_InitTypeDef GPIO_InitStructure; //定义GOIP配置结构体
|
|||
|
|
|
|||
|
|
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
|
|||
|
|
|
|||
|
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);
|
|||
|
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6);
|
|||
|
|
|
|||
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
|
|||
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|||
|
|
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
|||
|
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
|||
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
|||
|
|
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
|||
|
|
|
|||
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
|
|||
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
|
|||
|
|
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
|
|||
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
|
|||
|
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
|
|||
|
|
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化
|
|||
|
|
}
|
|||
|
|
/****************************************************
|
|||
|
|
函数名:GPSConnect_NVGPSConnect_Configuration
|
|||
|
|
功能 :GPSConnect卡通讯部分用到的中断向量配置
|
|||
|
|
参数 :无
|
|||
|
|
返回值:无
|
|||
|
|
****************************************************/
|
|||
|
|
void GPSConnect_NVIC_Configuration(void)
|
|||
|
|
{
|
|||
|
|
NVIC_InitTypeDef NVIC_InitStructure; //定义中断配置结构体
|
|||
|
|
|
|||
|
|
NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream6_IRQn; //USART6_TX_DMA
|
|||
|
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
|
|||
|
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
|||
|
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
|||
|
|
NVIC_Init(&NVIC_InitStructure);
|
|||
|
|
|
|||
|
|
|
|||
|
|
NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn; //USART??
|
|||
|
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //
|
|||
|
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //
|
|||
|
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ????
|
|||
|
|
NVIC_Init(&NVIC_InitStructure); //??NVIC_InitStruct???????????NVIC???USART1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/****************************************************
|
|||
|
|
函数名:GPSConnect_NVGPSConnect_Configuration
|
|||
|
|
功能 :GPSConnect卡通讯部分用到的串口配置
|
|||
|
|
参数 :无
|
|||
|
|
返回值:无
|
|||
|
|
****************************************************/
|
|||
|
|
void GPSConnect_USART_Configuration(u32 BaudRate)
|
|||
|
|
{
|
|||
|
|
USART_InitTypeDef USART_InitStructure;
|
|||
|
|
|
|||
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);
|
|||
|
|
USART_InitStructure.USART_BaudRate =BaudRate;// Baud;//?????
|
|||
|
|
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
|
|||
|
|
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
|||
|
|
USART_InitStructure.USART_Parity = USART_Parity_No;
|
|||
|
|
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
|||
|
|
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
|
|||
|
|
USART_Init(USART6, &USART_InitStructure);
|
|||
|
|
USART_Cmd(USART6, ENABLE);
|
|||
|
|
|
|||
|
|
USART_ITConfig(USART6, USART_IT_IDLE, ENABLE);
|
|||
|
|
USART_ClearFlag(USART6, USART_FLAG_IDLE);
|
|||
|
|
|
|||
|
|
USART_DMACmd(USART6, USART_DMAReq_Tx | USART_DMAReq_Rx,ENABLE);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
/*************************************************
|
|||
|
|
函数名 :DMA_Configuration()
|
|||
|
|
功能 :DMA初始化
|
|||
|
|
传入参数:无
|
|||
|
|
返回值 :无
|
|||
|
|
**************************************************/
|
|||
|
|
void GPSConnect_DMA_Configuration(void)
|
|||
|
|
{
|
|||
|
|
DMA_InitTypeDef DMA_InitStructure;
|
|||
|
|
|
|||
|
|
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
|
|||
|
|
|
|||
|
|
/*******************发送TX1*********************/
|
|||
|
|
DMA_DeInit(DMA2_Stream6);
|
|||
|
|
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
|||
|
|
//DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN;
|
|||
|
|
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
|||
|
|
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
|||
|
|
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
|||
|
|
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
|||
|
|
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
|||
|
|
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
|||
|
|
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
|||
|
|
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
|||
|
|
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
|||
|
|
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
|||
|
|
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART6->DR;
|
|||
|
|
DMA_InitStructure.DMA_Channel = DMA_Channel_5;
|
|||
|
|
//DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[0];
|
|||
|
|
|
|||
|
|
DMA_Init(DMA2_Stream6, &DMA_InitStructure);
|
|||
|
|
DMA_ITConfig(DMA2_Stream6, DMA_IT_TC, ENABLE);
|
|||
|
|
/*******************RX*********************/
|
|||
|
|
DMA_DeInit(DMA2_Stream1);
|
|||
|
|
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
|
|||
|
|
DMA_InitStructure.DMA_BufferSize = 1000;
|
|||
|
|
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
|||
|
|
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
|||
|
|
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
|||
|
|
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
|||
|
|
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
|
|||
|
|
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
|||
|
|
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
|||
|
|
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
|
|||
|
|
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
|||
|
|
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
|||
|
|
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART6->DR;
|
|||
|
|
DMA_InitStructure.DMA_Channel = DMA_Channel_5;
|
|||
|
|
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)GPSConnect_RX_Buff;
|
|||
|
|
|
|||
|
|
DMA_Init(DMA2_Stream1, &DMA_InitStructure);
|
|||
|
|
DMA_Cmd(DMA2_Stream1, ENABLE);
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//F*****************************************************************************
|
|||
|
|
//* NAME: GPSConnect_TXDataCheck
|
|||
|
|
//* PURPOSE: GPSConnect卡键盘通信校验函数
|
|||
|
|
//* PARAMS: pData需要检验的数组地址,len数据长度
|
|||
|
|
//* return: 无
|
|||
|
|
//******************************************************************************
|
|||
|
|
u8 GPSConnect_TXDataCheck(volatile u8* pData, u8 len)
|
|||
|
|
{
|
|||
|
|
u8 result;
|
|||
|
|
if(len == 0) len = 16;
|
|||
|
|
result = *pData++;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
result ^= *pData++;
|
|||
|
|
}while(--len);
|
|||
|
|
|
|||
|
|
return result & 0x7f;
|
|||
|
|
}
|
|||
|
|
void GPSConnect_DMATX_IRQHandler(void)
|
|||
|
|
{
|
|||
|
|
u16 i = 0;
|
|||
|
|
DMA_ClearFlag(DMA2_Stream6, DMA_IT_TCIF6);
|
|||
|
|
GPSCount_TX_DMAStop(); //关闭DMA传输
|
|||
|
|
while(! USART_GetFlagStatus(USART6, USART_FLAG_TC))NULL;
|
|||
|
|
DMA_ClearFlag(DMA2_Stream1, DMA_IT_TCIF1);
|
|||
|
|
GPSCount_RX_DMAStart(); //打开DMA传输(Gas就收)长度在选择发送队列时设置
|
|||
|
|
GPSConnectTXTask_Flag = 1;
|
|||
|
|
}
|
|||
|
|
//F*****************************************************************************
|
|||
|
|
//* NAME: GPSConnect_DMARX_IRQHandler
|
|||
|
|
//* PURPOSE: DMA传输完成中断,Gas ModBus
|
|||
|
|
//* PARAMS: 无
|
|||
|
|
//* return: 无
|
|||
|
|
//******************************************************************************
|
|||
|
|
|
|||
|
|
void GPSConnect_DMARX_IRQHandler(void)
|
|||
|
|
{
|
|||
|
|
u8 i = 0;
|
|||
|
|
u16 CRC_Temp = 0;
|
|||
|
|
if(USART_GetITStatus(USART6, USART_IT_IDLE) != RESET)//?????????
|
|||
|
|
{
|
|||
|
|
USART_ClearFlag(USART6, USART_IT_IDLE);
|
|||
|
|
GPSCount_RX_DMAStop(); //DMA接收
|
|||
|
|
USART_ClearFlag(USART6, USART_IT_IDLE);
|
|||
|
|
DMA_ClearFlag(DMA2_Stream1, DMA_IT_TCIF1);
|
|||
|
|
i = USART6->SR;
|
|||
|
|
i = USART6->DR;
|
|||
|
|
GPSCount_RX_DMALenSet(1000);//重置接受长度
|
|||
|
|
GPSCount_RX_DMAStart();
|
|||
|
|
GPSConnectRXTask_Flag = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
void StringToHex(u8 *Str,u8 *H,u8 Len)
|
|||
|
|
{
|
|||
|
|
u8 i = 0;
|
|||
|
|
for(i = 0;i < Len;i += 2)
|
|||
|
|
{
|
|||
|
|
if(*(Str + i) > 0x39)
|
|||
|
|
*(H + (i / 2)) = (*(Str + i) - 0x37) << 4;
|
|||
|
|
else
|
|||
|
|
*(H + (i / 2)) = (*(Str + i) - 0x30) << 4;
|
|||
|
|
|
|||
|
|
if(*(Str + i + 1) > 0x39)
|
|||
|
|
*(H + (i / 2)) |= (*(Str + i + 1) - 0x37) & 0x0f;
|
|||
|
|
else
|
|||
|
|
*(H + (i / 2)) |= (*(Str + i + 1) - 0x30) & 0x0f;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
u16 mystrstr(u8 *s1,u8 *s2)
|
|||
|
|
{
|
|||
|
|
int len2;
|
|||
|
|
u16 i= 0;
|
|||
|
|
if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
|
|||
|
|
return 1;
|
|||
|
|
for(;*s1;++s1)
|
|||
|
|
{
|
|||
|
|
i ++;
|
|||
|
|
if(*s1==*s2 && strncmp(s1,s2,len2)==0)
|
|||
|
|
return i;
|
|||
|
|
}
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
//F*****************************************************************************
|
|||
|
|
//* NAME: GPSConnect_Init
|
|||
|
|
//* PURPOSE: GPSConnect通讯初始化
|
|||
|
|
//* PARAMS: 无
|
|||
|
|
//* return: 无
|
|||
|
|
//******************************************************************************
|
|||
|
|
char Bluetooth_AT_UART[]="AT+UART=9600\r\n ";
|
|||
|
|
char Bluetooth_AT_NAME[]="AT+NAME=TXH_V1.1.2_0000\r\n ";
|
|||
|
|
char Print_Language[]={0x1b,0x74,0x23};
|
|||
|
|
void GPSConnect_Init(void)
|
|||
|
|
{
|
|||
|
|
u8 i = 0;
|
|||
|
|
GPSConnect_IO_Configuration(); //流量计相关IO初始化
|
|||
|
|
GPSConnect_USART_Configuration(115200); //相关串口初始化
|
|||
|
|
GPSConnect_DMA_Configuration(); //流量计相关DMA初始化
|
|||
|
|
GPSConnect_NVIC_Configuration(); //流量计相关中断初始化
|
|||
|
|
TXHData.GPSDataTimer.Init = 0; //清除初始化标志
|
|||
|
|
TXHData.GPSDataTimer.Flag = 0; //清除到时标志
|
|||
|
|
TXHData.GPSDataTimer.ON_OFF = 1; //打开
|
|||
|
|
TXHData.GPSDataTimer.Cycle = 1; //设置为循环模式,发送时启动
|
|||
|
|
TXHData.GPSDataTimer.TimerCountMax = 10*1000;//(10S)
|
|||
|
|
|
|||
|
|
GPSCount_TX_DMAAddrSet((u32)Print_Language);
|
|||
|
|
GPSCount_TX_DMALenSet(3);
|
|||
|
|
GPSCount_TX_DMAStart();
|
|||
|
|
// while(!GPSConnectTXTask_Flag);
|
|||
|
|
// delay_ms(500);
|
|||
|
|
// GPSConnect_USART_Configuration(9600);
|
|||
|
|
// for(i = 0;i < 10;i ++)
|
|||
|
|
// Bluetooth_AT_NAME[8+i] = BoxVersion[i];
|
|||
|
|
// for(i = 0;i < 4;i ++)
|
|||
|
|
// Bluetooth_AT_NAME[19+i] = TXHData.POSData.WirelessData.IMEI[16+i];
|
|||
|
|
// GPSCount_TX_DMAAddrSet((u32)Bluetooth_AT_NAME);
|
|||
|
|
// GPSCount_TX_DMALenSet(25);
|
|||
|
|
// GPSCount_TX_DMAStart();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void GPSConnectTast(void)
|
|||
|
|
{
|
|||
|
|
u16 i = 0,j = 0,k = 0;
|
|||
|
|
u32 Temp = 0;
|
|||
|
|
u8 Buff[20];
|
|||
|
|
u16 POS_ConnectRX_Len=0;
|
|||
|
|
u16 POS_ConnectRX_CMD = 0;
|
|||
|
|
if(GPSConnectRXTask_Flag == 1)
|
|||
|
|
{
|
|||
|
|
GPSConnectRXTask_Flag = 0;
|
|||
|
|
if(GPSConnect_RX_Buff[0] == 0xF5) // 判断接收缓冲区中的第一个字节是否为 0xF5
|
|||
|
|
{
|
|||
|
|
POS_ConnectRX_Len = (GPSConnect_RX_Buff[1] << 8) | GPSConnect_RX_Buff[2]; // 提取长度码
|
|||
|
|
Temp = CRC_Check(&GPSConnect_RX_Buff[0] , POS_ConnectRX_Len); // 计算数据包 CRC 校验码
|
|||
|
|
if(Temp == ((GPSConnect_RX_Buff[POS_ConnectRX_Len] << 8) | GPSConnect_RX_Buff[POS_ConnectRX_Len + 1])) // 判断 CRC 校验码是否正确
|
|||
|
|
{
|
|||
|
|
POS_ConnectRX_CMD = GPSConnect_RX_Buff[3]; // 提取命令字节
|
|||
|
|
switch (POS_ConnectRX_CMD) // 根据命令字节进行不同的操作
|
|||
|
|
{
|
|||
|
|
case 0xF1: // 配置APN
|
|||
|
|
{
|
|||
|
|
for(i = 0;i < sizeof(TXHData.POSData.WirelessData.APN);i ++) // 将 APN 缓冲区清零
|
|||
|
|
TXHData.POSData.WirelessData.APN[i] = 0;
|
|||
|
|
for(i = 0;i < POS_ConnectRX_Len - 4;i ++) // 从接收缓冲区中提取 APN 数据
|
|||
|
|
TXHData.POSData.WirelessData.APN[i] = GPSConnect_RX_Buff[4+i];
|
|||
|
|
if(FMItemWrite(CF_POSData,0)) // 写入 APN 数据到 Flash 存储器中
|
|||
|
|
{
|
|||
|
|
POS_Network_APN_Set(); // 设置网络 APN 参数
|
|||
|
|
GPSConnect_TX_Buff[0] = 0xF5; // 将发送缓冲区初始化
|
|||
|
|
GPSConnect_TX_Buff[1] = 0x00;
|
|||
|
|
GPSConnect_TX_Buff[2] = 0x05;
|
|||
|
|
GPSConnect_TX_Buff[3] = 0xF1;
|
|||
|
|
GPSConnect_TX_Buff[4] = 0x59;
|
|||
|
|
Temp = CRC_Check(&GPSConnect_TX_Buff[0] , 5); // 计算发送数据包的 CRC 校验码
|
|||
|
|
GPSConnect_TX_Buff[5] = (Temp >> 8) & 0xff; // 将 CRC 校验码写入发送缓冲区
|
|||
|
|
GPSConnect_TX_Buff[6] = Temp & 0xff;
|
|||
|
|
GPSCount_TX_DMAAddrSet((u32)GPSConnect_TX_Buff); // 设置发送 DMA 的地址和长度
|
|||
|
|
GPSCount_TX_DMALenSet(7);
|
|||
|
|
GPSCount_TX_DMAStart(); // 启动 DMA 发送数据
|
|||
|
|
}
|
|||
|
|
}break;
|
|||
|
|
case 0xF2: // 配置LORA子模块
|
|||
|
|
{
|
|||
|
|
TXHData.MD_LORA_Slave_Flag = 1;
|
|||
|
|
TXHData.MD_LORA_SlaveTimer.ON_OFF = 1;
|
|||
|
|
// delay_ms(200);
|
|||
|
|
// MD_Port_LORASet(0);
|
|||
|
|
// MD_Port_LORASet(1);
|
|||
|
|
// MD_Port_LORASet(2);
|
|||
|
|
// MD_Port_LORASet(3);
|
|||
|
|
{
|
|||
|
|
GPSConnect_TX_Buff[0] = 0xF5; // 将发送缓冲区初始化
|
|||
|
|
GPSConnect_TX_Buff[1] = 0x00;
|
|||
|
|
GPSConnect_TX_Buff[2] = 0x05;
|
|||
|
|
GPSConnect_TX_Buff[3] = 0xF2;
|
|||
|
|
GPSConnect_TX_Buff[4] = 0x59;
|
|||
|
|
Temp = CRC_Check(&GPSConnect_TX_Buff[0] , 5); // 计算发送数据包的 CRC 校验码
|
|||
|
|
GPSConnect_TX_Buff[5] = (Temp >> 8) & 0xff; // 将 CRC 校验码写入发送缓冲区
|
|||
|
|
GPSConnect_TX_Buff[6] = Temp & 0xff;
|
|||
|
|
GPSCount_TX_DMAAddrSet((u32)GPSConnect_TX_Buff); // 设置发送 DMA 的地址和长度
|
|||
|
|
GPSCount_TX_DMALenSet(7);
|
|||
|
|
GPSCount_TX_DMAStart(); // 启动 DMA 发送数据
|
|||
|
|
}
|
|||
|
|
}break;
|
|||
|
|
case 0xF3: // 配置LORA子模块
|
|||
|
|
{
|
|||
|
|
TXHData.MD_LORA_Slave_Flag = 0;
|
|||
|
|
TXHData.MD_LORA_SlaveTimer.Init = 1;
|
|||
|
|
{
|
|||
|
|
GPSConnect_TX_Buff[0] = 0xF5; // 将发送缓冲区初始化
|
|||
|
|
GPSConnect_TX_Buff[1] = 0x00;
|
|||
|
|
GPSConnect_TX_Buff[2] = 0x05;
|
|||
|
|
GPSConnect_TX_Buff[3] = 0xF3;
|
|||
|
|
GPSConnect_TX_Buff[4] = 0x59;
|
|||
|
|
Temp = CRC_Check(&GPSConnect_TX_Buff[0] , 5); // 计算发送数据包的 CRC 校验码
|
|||
|
|
GPSConnect_TX_Buff[5] = (Temp >> 8) & 0xff; // 将 CRC 校验码写入发送缓冲区
|
|||
|
|
GPSConnect_TX_Buff[6] = Temp & 0xff;
|
|||
|
|
GPSCount_TX_DMAAddrSet((u32)GPSConnect_TX_Buff); // 设置发送 DMA 的地址和长度
|
|||
|
|
GPSCount_TX_DMALenSet(7);
|
|||
|
|
GPSCount_TX_DMAStart(); // 启动 DMA 发送数据
|
|||
|
|
}
|
|||
|
|
}break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(GPSConnect_RX_Buff[25] == 'O' && GPSConnect_RX_Buff[26] == 'K') // 判断接收缓冲区中“OK\r\n”判断是不是蓝牙设置回复
|
|||
|
|
{
|
|||
|
|
TXHData.USART6_Drive = Bluetooth;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Temp = mystrstr(GPSConnect_RX_Buff,"RMC");
|
|||
|
|
if(Temp)
|
|||
|
|
TXHData.USART6_Drive = GPS;
|
|||
|
|
if(GPSConnect_RX_Buff[Temp + 14] == 'A')//则提取经度和纬度信息
|
|||
|
|
{
|
|||
|
|
for(k = 0;k < 9;k ++)// 提取经度类型信息,保存到TXHData结构体中
|
|||
|
|
Buff[k] = GPSConnect_RX_Buff[Temp + 16 + k];
|
|||
|
|
TXHData.GPSData.GPS.Longitude = (float)atof(Buff) / 100;
|
|||
|
|
TXHData.GPSData.GPS.LongitudeType = GPSConnect_RX_Buff[Temp + 26];
|
|||
|
|
|
|||
|
|
for(k = 0;k < 9;k ++)// 提取维度类型信息,保存到TXHData结构体中
|
|||
|
|
Buff[k] = GPSConnect_RX_Buff[Temp + 28 + k];
|
|||
|
|
TXHData.GPSData.GPS.Latitude = (float)atof(Buff) / 100;
|
|||
|
|
TXHData.GPSData.GPS.LatitudeType = GPSConnect_RX_Buff[Temp + 39];
|
|||
|
|
}
|
|||
|
|
else if(GPSConnect_RX_Buff[Temp + 14] == 'V')// 如果第15个字符是'V',则经纬度信息无效,置为0
|
|||
|
|
{
|
|||
|
|
TXHData.GPSData.GPS.Latitude = 0;
|
|||
|
|
TXHData.GPSData.GPS.LatitudeType = 0;
|
|||
|
|
TXHData.GPSData.GPS.Latitude = 0;
|
|||
|
|
TXHData.GPSData.GPS.LatitudeType = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|