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 приемники поддерживают команды отключения выдачи части сентенций, так что вы можете блокировать выдачу по последовательному порту лишней для вас информации.

 

Закладка Постоянная ссылка.

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

  • Несколько случайная, но довольно любопытная информация:

    Можно ли пить океанскую и морскую воду? Однозначно нет. Еще в 60-х годах XX века ВОЗ официально заявила, что океанская вода непригодна для питья. Дело в том, что концентрация солей в человеческом организме примерно 1 %. В океанской же воде солей гораздо больше, до 3.6 %, поэтому при ее употреблении процессы вывода вредных веществ с мочой практически останавливаются, что в первую очередь сказывается на мозге. Галлюцинации, бред, расстройство психики и неизбежная смерть — вот удел несчастных, не выдерживавших жажды и начавших пить океанскую воду. Счастливое исключение можно сделать только для вод Черного и Балтийского морей, в которых солей около 0.4—0.8 %, что и доказал во время Второй мировой войны советский военно-морской врач П. Ересько, 36 дней употребляя морскую воду, дрейфуя на шлюпке в окрестностях Херсона.