Fix of GPS parsing.

pull/2/head
sq2ips 2025-02-26 17:50:04 +01:00
rodzic 9a1043bcca
commit 7ef2e891e6
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: C383A71588BA55F5
2 zmienionych plików z 26 dodań i 52 usunięć

Wyświetl plik

@ -45,7 +45,6 @@
/* USER CODE BEGIN PV */
uint8_t GpsRxBuffer[GpsRxBuffer_SIZE];
uint8_t GpsDataBuffer[GpsRxBuffer_SIZE];
uint16_t GpsBufferCounter = 0;
bool GpsBufferReady = false;
@ -111,15 +110,6 @@ void main_loop(void){
#ifdef DEBUG
printf("Frame: %d\r\n", HorusPacket.PacketCount);
#endif
while(GpsBufferReady){}
// Parsing GPS depending on type set
#if GPS_TYPE == 1
ParseNMEA(&NmeaData, GpsDataBuffer);
#elif GPS_TYPE == 2
parseXMframe(&GpsData, GpsDataBuffer);
#endif
// Payload ID
HorusPacket.PayloadID = PAYLOAD_ID;
@ -136,8 +126,8 @@ void main_loop(void){
HorusPacket.Alt = NmeaData.Alt;
HorusPacket.Sats = NmeaData.Sats;
#ifdef DEBUG
printf("\r\nFix: %d, Lat: %d, Lon: %d, Alt: %d m, Speed: %d km/h, Ascent rate: %d m/s Satellites: %d, Time: %d:%d:%d, correct frames: %d\r\n",
NmeaData.Fix, (uint32_t)(NmeaData.Lat*10e6), (uint32_t)(NmeaData.Lon*10e6), NmeaData.Alt, NmeaData.Speed, (int16_t)round(NmeaData.AscentRate*100), NmeaData.Sats, NmeaData.Hours, NmeaData.Minutes, NmeaData.Seconds, NmeaData.Corr);
printf("\r\nFix: %d, Lat: %d, Lon: %d, Alt: %d m, Speed: %d km/h, Ascent rate: %d m/s Satellites: %d, Time: %d:%d:%d\r\n",
NmeaData.Fix, (uint32_t)(NmeaData.Lat*10e6), (uint32_t)(NmeaData.Lon*10e6), NmeaData.Alt, NmeaData.Speed, (int16_t)round(NmeaData.AscentRate*100), NmeaData.Sats, NmeaData.Hours, NmeaData.Minutes, NmeaData.Seconds);
#endif
// GPS type 2 data
@ -177,6 +167,21 @@ void main_loop(void){
HorusPacket.PacketCount++;
LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
void GPS_Handler(void){
if(LL_LPUART_IsEnabledIT_RXNE(LPUART1) && LL_LPUART_IsActiveFlag_RXNE(LPUART1)){
if (GpsBufferCounter >= GpsRxBuffer_SIZE){
GpsBufferCounter = 0;
GpsBufferReady = true;
}
GpsRxBuffer[GpsBufferCounter] = LL_LPUART_ReceiveData8(LPUART1);
GpsBufferCounter++;
}else if(LL_LPUART_IsActiveFlag_ORE(LPUART1)){
LL_LPUART_ClearFlag_ORE(LPUART1);
#ifdef DEBUG
printf("ORE!\r\n");
#endif
}
}
/* USER CODE END 0 */
/**
@ -250,9 +255,14 @@ int main(void)
/* USER CODE BEGIN 3 */
LL_IWDG_ReloadCounter(IWDG);
if(GpsBufferReady){
for(uint16_t cnt = 0; cnt<GpsRxBuffer_SIZE; cnt++){
GpsDataBuffer[cnt] = GpsRxBuffer[cnt];
}
#if GPS_TYPE == 1
ParseNMEA(&NmeaData, GpsRxBuffer);
#elif GPS_TYPE == 2
parseXMframe(&GpsData, GpsRxBuffer);
#endif
#ifdef DEBUG
printf("Correct gps frames: %d\r\n", NmeaData.Corr);
#endif
GpsBufferReady = false;
}
LL_mDelay(10);
@ -850,39 +860,6 @@ static void MX_GPIO_Init(void)
}
/* USER CODE BEGIN 4 */
void GPS_Handler(void){
if(LL_LPUART_IsEnabledIT_RXNE(LPUART1) && LL_LPUART_IsActiveFlag_RXNE(LPUART1)){
//LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);
if (GpsBufferCounter >= GpsRxBuffer_SIZE){
GpsBufferCounter = 0;
GpsBufferReady = true;
//LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);
}
GpsRxBuffer[GpsBufferCounter] = LL_LPUART_ReceiveData8(LPUART1);
GpsBufferCounter++;
//LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);
}else if(LL_LPUART_IsActiveFlag_ORE(LPUART1)){
#ifdef DEBUG
printf("ORE\r\n");
#endif
LL_LPUART_ClearFlag_ORE(LPUART1);
}else if(LL_LPUART_IsActiveFlag_NE(LPUART1)){
#ifdef DEBUG
printf("NE\r\n");
#endif
LL_LPUART_ClearFlag_NE(LPUART1);
}else if(LL_LPUART_IsActiveFlag_FE(LPUART1)){
#ifdef DEBUG
printf("FE\r\n");
#endif
LL_LPUART_ClearFlag_FE(LPUART1);
}else if(LL_LPUART_IsActiveFlag_PE(LPUART1)){
#ifdef DEBUG
printf("PE\r\n");
#endif
LL_LPUART_ClearFlag_PE(LPUART1);
}
}
/* USER CODE END 4 */
/**

Wyświetl plik

@ -282,9 +282,6 @@ void ParseNMEA(NMEA *nmea_data, uint8_t *buffer){
if (nmea_VTG(nmea_data, data[i])) correct++;
}
}
nmea_data->Corr = correct;
if(correct == 0){
nmea_data->Fix = 0;
}
nmea_data->Corr = correct;
}
}