|
38 / 31 / 9
Регистрация: 29.03.2019
Сообщений: 345
|
|||||||||||
Разбор NMEA сообщений26.06.2019, 13:14. Показов 12804. Ответов 34
Товарищи, подскажите, что не так делаю.
Решил распарсить данные с GPS приемника. Принимаю с помощью USART на скорости 9600. Проблема в том что данные обновляются с периодичностью 2-10 секунд. Надеялся, что хотябы 1 сек. будет. Нашел такой код.
0
|
|||||||||||
| 26.06.2019, 13:14 | |
|
Ответы с готовыми решениями:
34
проблема с принятием NMEA сообщений
парсер NMEA |
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 27.06.2019, 11:51 | |
|
Ethereal, да можно и так. Я так тоже делал, правда мне нужна была одна конкретная строка. А GPS отсылает пачку из 5-6 этих строк каждая из которых начинается с $ и заканчивается переводом строки. Между ними нет времени на разбор ибо они идут потоком.
Либо можно после принятия одной строки копировать ее в другой буффер и там парсить, а в это время набивать основной буффер.
1
|
|
|
38 / 31 / 9
Регистрация: 29.03.2019
Сообщений: 345
|
|
| 27.06.2019, 12:03 [ТС] | |
|
0
|
|
|
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
|
||
| 27.06.2019, 12:03 | ||
|
[quote="northcitizen;13684993"]Это для модуля Sim800L такой таймаут выбран?[/quo
1
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||||
| 27.06.2019, 17:12 | ||||
Вернее тайм-аут желателен, но не для того чтобы определять конец пакета. После обработки принятого байта посылки счетчик времени делаем t=0 и далее инкрементируем его в моменты тика некоего таймера. Если t переполяется, а очередной байт все еще не пришел, то связь вообще пропала и идем на пункт 1. Если очередной байт пришел в момент когда t неприлично большой, то верить посылке тоже нельзя, в ней была большая пауза, а значит возможно мы приняли начало одной посылки, потом на время потеряли связь и теперь принимаем хвост другой. Тогда если пришел $ начинаем пункт 2 с начала, а если не $, то идем на пункт 1. Вполне строгий на проверки и весьма простой алгоритм. Добавлено через 12 минут
Добавлено через 5 минут
1
|
||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
||
| 27.06.2019, 17:16 | ||
|
Ethereal,
0
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
| 27.06.2019, 17:26 | |
|
Подумал и согласился, что если несколько строк непрерывным потоком, то тайм-аут как определение конца пачки строк хорошо. Ну а если делаем так. Имеем два буфера по 80 байт. Сначала принимаем в один, на лету порубая поток символов на строки тем алгоритмом, что я предложил. Как пришел перевод строки проверяем три байта в заголовке. Если это нужная нам строка, то переключаемся на прием во второй буфер (переставляем указатель). И вот наконец когда тайм-аут который говорит нам о том, что пачка строк закончилась, в первом буфере на лету вырезанная нужная нам строка.
0
|
|
|
0 / 0 / 0
Регистрация: 07.05.2020
Сообщений: 7
|
|
| 07.05.2020, 13:43 | |
|
Здравствуйте, я начинающий. Подскажите, пожалуйста где и как необходимо описать структуру GPSFixData
Спасибо!
0
|
|
|
38 / 31 / 9
Регистрация: 29.03.2019
Сообщений: 345
|
||||||
| 07.05.2020, 19:08 [ТС] | ||||||
|
Almaz72,
0
|
||||||
|
0 / 0 / 0
Регистрация: 07.05.2020
Сообщений: 7
|
|
| 08.05.2020, 09:43 | |
|
Спасибо большое! Только я все равно не могу понять, почему структура называется GPGGA_Struct, а обращение к ней в программе идет по названию GPSFixData. И компилятор (Keil) ругается). Извините, еще раз, если задаю глупые вопросы, до этого писал только на Ассемблере. Попробовал поменять GPGGA_Struct на GPSFixData, компилятор все равно ругается)
0
|
|
|
38 / 31 / 9
Регистрация: 29.03.2019
Сообщений: 345
|
|||||||||||
| 08.05.2020, 10:53 [ТС] | |||||||||||
|
Almaz72, потому что struct GPGGA_Struct это тип, вам нужно создать GPSFixData типа GPGGA_Struct.
P.S. Так же как и для создания переменной а типа int вы пишите
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 07.05.2020
Сообщений: 7
|
|
| 08.05.2020, 14:02 | |
|
спасибо огромное!
0
|
|
|
42 / 35 / 11
Регистрация: 22.09.2017
Сообщений: 125
|
||||||
| 08.05.2020, 18:08 | ||||||
|
Ненужные сообщения можно отключить.
В ublox это делается посылкой в GPS модуль таких команд:
0
|
||||||
|
0 / 0 / 0
Регистрация: 07.05.2020
Сообщений: 7
|
||||||
| 13.05.2020, 13:22 | ||||||
|
Здравствуйте! Всем спасибо за ответы!
Появился еще один вопрос: На Stm32f030 хотел сделать так: один раз в 10(время настраиваемое) устройство просыпается. считывает время с gnss модуля(mc60), это время записывается в RTC, далее устанавливается время будильника + 20 сек(например), включается прерывания от RTC и устройство уходит в спящий режим(HAl_Pwr_enterStanbyMode()). При загрузке программы или первом включении работает правильно - пробуждается через 10 сек. Затем начинается что то непонятное для меня - оно начинает просыпаться каждую секунду. В rtc.c установку времени, даты , параметров, будильника убрал. Попробую вставить код, если получится) Как писал выше . до этого работал только на ассемблере и больше всего с AVR и MCS51, прошу , сильно не ругайте В терминале - первое сообщение - нормальное, через 10 секунд, остальные через секунду или две( в программе задержка была)
0
|
||||||
|
0 / 0 / 0
Регистрация: 07.05.2020
Сообщений: 7
|
|
| 16.05.2020, 10:38 | |
|
Добрый день! Вообщем, разобрался, может кому-то поможет-
надо было сбросить флаг _ HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU) до бесконечного цикла while(1)
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 16.05.2020, 10:56 | |
|
1
|
|
| 16.05.2020, 10:56 | |
|
nmea over ethetnet Перевод координат NMEA Отправка nmea на сервер
$GPVTG протокола NMEA в GPS Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|