新加入gps数据解析,使用GDMA1---CHANNEL3

This commit is contained in:
2025-06-10 15:04:02 +08:00
parent f48b55fe1d
commit 346aa5c324
229 changed files with 5871 additions and 5218 deletions

View File

@@ -1,5 +1,12 @@
#include "HCBle.h"
/**
<EFBFBD><EFBFBD>ʾ: <20><>Ȼ BLE <20>Լ<EFBFBD> GPS<50><53><EFBFBD><EFBFBD>DMA+ UART<52><54><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
BLE --- DMA + IDLE <20>ж<EFBFBD> ѭ<><D1AD> DMA + <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART IDLE
GPS --- DMA +<2B>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD> + TC<54>ж<EFBFBD> <20><><EFBFBD>ù̶<C3B9><CCB6><EFBFBD><EFBFBD><EFBFBD> DMA DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
**/
// <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern UART_HandleTypeDef huart1;
extern DMA_HandleTypeDef handle_GPDMA1_Channel5;

193
fun/gps.c Normal file
View File

@@ -0,0 +1,193 @@
#include "gps.h"
/**
<EFBFBD><EFBFBD>ʾ: <20><>Ȼ BLE <20>Լ<EFBFBD> GPS<50><53><EFBFBD><EFBFBD>DMA+ UART<52><54><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
BLE --- DMA + IDLE <20>ж<EFBFBD> ѭ<><D1AD> DMA + <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART IDLE
GPS --- DMA +<2B>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD> + TC<54>ж<EFBFBD> <20><><EFBFBD>ù̶<C3B9><CCB6><EFBFBD><EFBFBD><EFBFBD> DMA DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
**/
//<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
extern UART_HandleTypeDef huart2;
extern DMA_HandleTypeDef handle_GPDMA1_Channel3;
//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t GPS_DMA_RX_BUF[GPS_DMA_RX_BUF_LEN]; //<2F><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
_GPSData GPS;
// TEST <20>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ĵ<EFBFBD><C4B4>룬else֮<65><D6AE><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC>뵽Thread X<><58>ʵ<EFBFBD>ʿ<EFBFBD><CABF>ƴ<EFBFBD><C6B4><EFBFBD>
#ifdef TEST
//void GPS_DMA_Start(void)
//{
// HAL_UART_Receive_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
// __HAL_DMA_ENABLE_IT(huart2.hdmarx,DMA_IT_HT); //<2F><EFBFBD><EBB4AB><EFBFBD>ж<EFBFBD>
// __HAL_DMA_ENABLE_IT(huart2.hdmarx,DMA_IT_TC); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//}
void GPS_Init(void)
{
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, GPS_DMA_RX_BUF, GPS_DMA_RX_BUF_LEN);
__HAL_DMA_DISABLE_IT(&handle_GPDMA1_Channel3, DMA_IT_HT); // <20><><EFBFBD>ð봫<C3B0><EBB4AB>
}
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart->Instance == USART2)
{
// <20><><EFBFBD><EFBFBD> Size <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(GPS.GPS_Buffer,GPS_DMA_RX_BUF,Size);
GPS.GPS_Buffer[Size] = '\0';
GPS.isGetData = 1; //<2F><><EFBFBD>ݽ<EFBFBD><DDBD>ձ<EFBFBD>־λ<D6BE><CEBB>Ϊ1
//<2F><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAL_UARTEx_ReceiveToIdle_DMA(&huart2,GPS_DMA_RX_BUF,GPS_DMA_RX_BUF_LEN);
__HAL_DMA_DISABLE_IT(&handle_GPDMA1_Channel3,DMA_IT_HT);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GPS_Data_CLR(void)
{
memset(GPS_DMA_RX_BUF,0,GPS_DMA_RX_BUF_LEN);
}
#ifdef parse
// GPS<50><53><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
void parseGpsBuffer()
{
char *subString;
char *subStringNext;
char i = 0;
if(GPS.isGetData)
{
GPS.isGetData = 0; // <20>ѱ<EFBFBD>־λ<D6BE><CEBB>Ϊ1
char usefullBuffer[2] = {0};
for(i = 0; i <= 6; i++)
{
if(i == 0)
{
subString = strstr(GPS.GPS_Buffer,",");
if(!subString)return;
}
else
{
subString++;
subStringNext = strstr(subString,",");
if(!subStringNext)return;
switch(i)
{
case 1:
memcpy(GPS.UTCTime,subString,subStringNext - subString);
break;
case 2:
memcpy(usefullBuffer,subString,subStringNext - subString);
break;
case 3:
memcpy(GPS.latitude,subString,subStringNext - subString);
break;
case 4:
memcpy(GPS.N_S,subString,subStringNext - subString);
break;
case 5:
memcpy(GPS.longitude,subString,subStringNext - subString);
break;
case 6:
memcpy(GPS.E_W,subString,subStringNext - subString);
break;
default:break;
}
subString = subStringNext;
}
}
GPS.isParseData = 1;
GPS.isUsefull = (usefullBuffer[0] == 'A') ? 1 : 0;
}
}
#else // <20><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>ڸĽ<DAB8><C4BD><EFBFBD><EFBFBD><EFBFBD>parse <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
void parseGpsBuffer()
{
char *fields[7];
char *token;
int fieldIndex = 0;
if (GPS.isGetData)
{
GPS.isGetData = 0; // <20>ѱ<EFBFBD>־λ<D6BE><CEBB>Ϊ0
token = strtok(GPS.GPS_Buffer, ",");
while (token != NULL && fieldIndex < 7)
{
fields[fieldIndex++] = token;
token = strtok(NULL, ",");
}
if (fieldIndex == 7)
{
memcpy(GPS.UTCTime, fields[1], sizeof(GPS.UTCTime) - 1);
GPS.UTCTime[sizeof(GPS.UTCTime) - 1] = '\0';
memcpy(GPS.latitude, fields[3], sizeof(GPS.latitude) - 1);
GPS.latitude[sizeof(GPS.latitude) - 1] = '\0';
memcpy(GPS.N_S, fields[4], sizeof(GPS.N_S) - 1);
GPS.N_S[sizeof(GPS.N_S) - 1] = '\0';
memcpy(GPS.longitude, fields[5], sizeof(GPS.longitude) - 1);
GPS.longitude[sizeof(GPS.longitude) - 1] = '\0';
memcpy(GPS.E_W, fields[6], sizeof(GPS.E_W) - 1);
GPS.E_W[sizeof(GPS.E_W) - 1] = '\0';
GPS.isParseData = 1;
GPS.isUsefull = (fields[2][0] == 'A') ? 1 : 0;
}
}
}
/*
<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>
ʹ<EFBFBD><EFBFBD> strtok <20><><EFBFBD>зָ<D0B7><D6B8><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>طָ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶΣ<EFBFBD>
ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢ÿ<EFBFBD><EFBFBD><EFBFBD>ֶε<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ȷ<EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD>
<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ضϣ<EFBFBD>
ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> null <20><>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
#endif
// ת<><D7AA><EFBFBD>Ƕ<EFBFBD>
double Convert_to_degrees(char *data)
{
double temp = atof(data);
int deg = (int)(temp / 100);
double min = temp - deg * 100;
return deg + (min / 60.0);
}
#else // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Thread X
#endif

38
fun/gps.h Normal file
View File

@@ -0,0 +1,38 @@
#ifndef __GPS_H
#define __GPS_H
#include "headfile.h"
#define USART_REC_LEN 200
#define EN_USART2_RX 1 //ʹ<>ܽ<EFBFBD><DCBD><EFBFBD> --- 1 <20><>֮ 0
#define GPS_DMA_RX_BUF_LEN 200 //<2F>ɸ<EFBFBD><C9B8><EFBFBD>NMEA<45><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TEST 1 //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><><C8A5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ԽӴ<D4BD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
#define parse 1 // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
// <20><><EFBFBD><EFBFBD>gps<70><EFBFBD><E1B9B9>
#define GPS_Buffer_Length 80
#define UTCTime_Length 11
#define latitude_Length 11
#define N_S_Length 2
#define longitude_Length 12
#define E_W_Length 2
typedef struct GPSData
{
char GPS_Buffer[GPS_Buffer_Length];
char isGetData; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ȡ<EFBFBD><C8A1>GPS<50><53><EFBFBD><EFBFBD>
char isParseData; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char UTCTime[UTCTime_Length]; //UTCʱ<43><CAB1>
char latitude[latitude_Length]; //γ<><CEB3>
char N_S[N_S_Length]; //N/S
char longitude[longitude_Length]; //<2F><><EFBFBD><EFBFBD>
char E_W[E_W_Length]; //E/W
char isUsefull; //<2F><>λ<EFBFBD><CEBB>Ϣ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
} _GPSData;
extern _GPSData GPS;
extern uint8_t GPS_DMA_RX_BUF[GPS_DMA_RX_BUF_LEN];
#endif

View File

@@ -13,5 +13,6 @@
#include "string.h"
#include "HCBle.h"
#include "gps.h"
#endif