реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> stm32 + ublox UC530M
VadimNic_nt
сообщение Oct 24 2014, 15:28
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Здравствуйте форумчане!

Может кто-нибудь поделиться ссылкой на библиотеку для работы с навигационным модулем ublox UC530M, заточенную для работы с stm32f103xx?
Написал собственный модуль, но столкнулся с тем, что иногда не проходит инициализация этих модулей ожидаемым образом и перестает работать парсинг
NMEA сообщений.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Oct 25 2014, 08:47
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(VadimNic_nt @ Oct 24 2014, 17:28) *
Может кто-нибудь поделиться ссылкой на библиотеку для работы с навигационным модулем ublox UC530M, заточенную для работы с stm32f103xx?
Написал собственный модуль, но столкнулся с тем, что иногда не проходит инициализация этих модулей ожидаемым образом и перестает работать парсинг
NMEA сообщений.

Мне кажется, такой библиотеки нет. Каждый пишет сам под себя. Возможно, следует лучше порыться в собственном коде и раскопать, что же не работает.

У меня есть некоторое устройство на STM32F103, к которому подключен модуль Navilock NL-552ETTL. Через UART, естественно. Он также выдает NMEA сообщения, которые анализируются в итоге с помощью sscanf(). Все написано мной. Код сильно завязан на мою рабочую библиотеку, поэтому он вряд ли сможет быть перенесен в ваш проект. Однако некоторые идеи я могу привести.

1. USART принимает по прерыванию и складывает все в быстрый буфер FIFO.
2. Некий синхронный процесс выбирает байты из FIFO и формирует строки; признак конца строки - <LF>.
3. Как только этот процесс собрал цельную строку воедино, он вызывает функцию, которая вычленяет параметры NMEA функцией sscanf() с правильно сформированной строкой формата. Конкретно меня интересует токен $GPRMC:

#define NMEA_GPRMC_FORMAT_STRING "$GPRMC,%f,%c,%f,%c,%f,%c,%*f,%*f,%d"

Из него я беру координаты и дату со временем. Это, собственно, и все.
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Oct 25 2014, 18:21
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



В моей задаче все гораздо проще. Необходимо только получать с навигационного модуля информацию о времени, соответственно анализировать сообщение типа $GPZDA - Date & Time. У модуля UC530M есть возможность отключить все сообщения кроме $GPZDA. Так я и сделал. Получился алгоритм с использованием прерывания и DMA c минимальным вмешательством в работу со стороны процессора. Но... в некоторых случаях UC530M продолжает выдавать "левые" сообщения (т.е. инициализация проходит не корректно) и мой алгоритм "падает". В документации на UC530M рекомендаций по инициализации практически нет. Поэтому я и интересуюсь этим вопросом...

Сообщение отредактировал IgorKossak - Oct 25 2014, 20:18
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post
x893
сообщение Oct 26 2014, 18:38
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



а чем nmealib не подходит, или TinyGPS ?
дп и свой парсер пишется максимум за день
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Oct 28 2014, 15:20
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Цитата(x893 @ Oct 26 2014, 21:38) *
а чем nmealib не подходит, или TinyGPS ?
дп и свой парсер пишется максимум за день

Мой вопрос скорее по начальной инициализации модулей чем по парсеру.
Было собрано несколько десятков устройств, но в некоторых модуль инициализируется как-будто не с первого раза.
В документации производителя этот вопрос практически не освещен....
Go to the top of the page
 
+Quote Post
x893
сообщение Oct 28 2014, 16:19
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



я несколько раз отправлял команды если ответа не пришло. Один раз было мало - терялись команды (или ответы)
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Oct 30 2014, 18:24
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Цитата(x893 @ Oct 28 2014, 20:19) *
я несколько раз отправлял команды если ответа не пришло. Один раз было мало - терялись команды (или ответы)

Видимо доставка команд иногда не проходит и для гарантии выполнения команды необходимо обязательно проверять ответ модуля...
Go to the top of the page
 
+Quote Post
alexdos
сообщение Oct 30 2014, 19:09
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Даже можно ничего не настраивать, главное чтоб скорость совпадала.
Принимаем строку, признак конца <LF>.
Строку копируем в буфер парсера.
Взводим флаг наличия текста в буфере парсера.
Проверяем заголовок, если не $GPRMC , игнор, в противном случае роскладываем данные ориентируясь по запятым. Всё.
Да, нужно наличие двух буферов.

Вариант второй.
Кольцевой буфер, принимаем данные, признак опять же <LF>, но проверка и разбор данных уже своими функциями, а не стандартными текстовыми.

Хотите универсальности, не уповайте на количество знаков между запятыми, к примеру в одних модулях может коордната быть 4250.55897 а в других 4250.5589. Ну и с курсом, высотой скоростью, те же яйца.
В общем задача на один вечер.

Если данные берутся с разных NMEA, нужно также учитывать что в разных модулей их последовательность может быть разной. И чтоб не получились данные от разных "точек" это тоже нужно учитывать.

Попадаются модули которые к примеру вместо $GPRMC могут слать $GNRMC, в одной партии так, в другой этак.

Попадаются модули с разными начальными настройками под заказчика (скорость uart к примеру).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 04:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016