NMEA парсер для обработки данных GPS/ГЛОНАСС приемника

При разработке микроконтроллерной системы, содержащей GPS/ГЛОНАСС приемник, необходимо получать и декодировать его сообщения, превращая текстовые посылки в удобочитаемый формат. Как правило, GPS приемник выдает сообщения через последовательный порт в формате NMEA. NMEA парсер превращает данные в формате NMEA, получаемые от GPS-приемника, в массив более удобоваримой информации (широта, долгота, высота над уровнем моря и т. д.).

Программа тестировалась на микроконтроллере STM32F217 при совместной работе с GPS/ГЛОНАСС модулем Geos-1M, но, думаю, с минимальными переделками подойдет для любого другого контроллера, так как не использует никаких специфических ресурсов STM32. При использовании другого микроконтроллера необходимо только переписать процедуру void USART1_IRQHandler(void) (т. е. собственно процедуру получения данных из UART).


Вид структуры, получаемой из NMEA, показан на иллюстрации справа. В структуру транслируются все имеющиеся данные, от времени и географических координат до списка видимых спутников. Ключевые показатели, вычлененные из NMEA-посылки, показаны на иллюстрации красными прямоугольниками. NMEA посылка содержит множество данных, часть из которых может показаться вам избыточной. Исходный код ниже представляет собой фактически три отдельных парсера: uint8_t NMEA_Parser_GGA(void), uint8_t NMEA_Parser_ZDA(void) и uint8_t NMEA_Parser_GSV(void), которые соответственно обрабатывают GGA, ZDA и GSV сентенции NMEA последовательности.

Разумеется, если часть этой информации вам не нужна, то и соответствующий парсер можно не использовать. Кроме того, как правило, GPS приемники поддерживают команды отключения выдачи части сентенций, так что вы можете блокировать выдачу по последовательному порту лишней для вас информации.

 

Добавить комментарий