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

 
 
> UART STM32F100Rxx и определение окончание приема "пакета" данных
alexdos
сообщение Mar 12 2013, 08:14
Сообщение #1


Местный
***

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



По какому признаку можно определить что "пакет" данных в буфер по прерыванию принят. Данные идут от GPS приёмника, их количество не фиксировано. Тоесть может быть к примеру 146 байт, а может быть 152 байта.
Пробую через (USART_GetITStatus(USART2,USART_IT_IDLE) != RESET), но неверно определяет окончание приёма, данные не приняты все, а мне уже симафорит что принято.
Или по старинке, использовать таймер для определения окончания приёма?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
drum1987
сообщение Mar 12 2013, 09:48
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



вы когда байт складываете в буфер попутно проверяйте не символ ли это переноса строки...если нет то ждете дальше, а если да, то значит вы приняли посылку полностью...можно выставить флаг или сразу обрабатывать принятые данные.
Go to the top of the page
 
+Quote Post
alexdos
сообщение Mar 12 2013, 10:06
Сообщение #3


Местный
***

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



Цитата(drum1987 @ Mar 12 2013, 12:48) *
вы когда байт складываете в буфер попутно проверяйте не символ ли это переноса строки...если нет то ждете дальше, а если да, то значит вы приняли посылку полностью...можно выставить флаг или сразу обрабатывать принятые данные.

Я уже писал, что в общем пакете данных находится несколько NMEA, каждый с которых оканчивается символом переноса строки.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 12 2013, 10:44
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (alexdos @ Mar 12 2013, 12:06) *
Я уже писал, что в общем пакете данных находится несколько NMEA, каждый с которых оканчивается символом переноса строки.
Поставьте себя на место процессора. По какому признаку вы опредлелили бы, что пакет закончился? По паузе? Так и спрашивайте - "есть ли механизм обнаружения пауз в посылке?". Специального механизма отслеживания пауз в UART нет. Да, можно городить на дополнительном таймере.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
alexdos
сообщение Mar 12 2013, 13:49
Сообщение #5


Местный
***

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



Сергей Борщ , спасибо за понятный ответ.
Теперь осталось разобратся что ж за прерывание USART_IT_IDLE. Когда оно происходит.


Цитата(KnightIgor @ Mar 12 2013, 17:12) *
Вам код дать?



Спасибо за предложения кода. Но он мне не нужен. На PIC18F46J50, у меня все реализовано, и работает в сотнях устройств без нареканий. Да, я принудительно оключил ("заглушил") передачу ненужных мне данных с GPS. Да, я знаю про кольцевые буферы, про парсеры и тому подобное. Я следую логике, что приняв весь пакет от GPS за времмя приблизительно 17 милиСек (не более 200 байт) у меня будет времени разобратся с этим пакетом 1 - 0.017 = 0.983 Сек. В случае же к примеру использования методики отлавливания конца строки, и если буфер не достаточной величины (или указатель обнуляется) , мне желательно вложится в время кратное приёму одного байта, для обработки принятого NMEI, а это составляет приблизительно 86 микроСек. Вот поэтому я и хочу принять весь пакет, чтоб потом неспешно, его разобрать.

Сообщение отредактировал alexdos - Mar 12 2013, 13:51
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 12 2013, 14:05
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (alexdos @ Mar 12 2013, 15:49) *
Теперь осталось разобратся что ж за прерывание USART_IT_IDLE. Когда оно происходит.
Оно возникает если с момента последнего стопа не возникло нового старта за время 10 битовых интервалов. Вы уверены, что приемник не сделает такую паузу в середине пакета? Я бы не стал на это закладываться. Вы можете, конечно, идти своим путем. Но если в спецификации протокола сказано, что признаком конца посылки является символ перевода строки, я бы не стал придумывать какие-то еще косвенные никем не гарантированные признаки. Откуда вы взяли 86 мкс? У вас буфер. Большой. Пока вы выгребаете-разбираете из него пакет с одной стороны, прерывание складывает в него новые байты с другой. И время обработки определяется размером этого буфера. Никаких проблем. Если вы сделаете размер этого буфера таким же, как и в вашем варианте с приемом всего-всего, то и времени на обработку у вас будет не меньше, а даже больше на время передачи этого пакета сообщений - ведь пока приходит очередное сообщение в пакете вы уже можете обрабатывать предыдущее.
Но вы можете идти своим путем.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alexdos   UART STM32F100Rxx и определение окончание приема "пакета" данных   Mar 12 2013, 08:14
- - uriy   ЦитатаТоесть может быть к примеру 146 байт, а може...   Mar 12 2013, 08:39
|- - alexdos   "NMEA пакеты заканчиваются символом переноса ...   Mar 12 2013, 09:36
|- - KnightIgor   Цитата(alexdos @ Mar 12 2013, 10:36) Knig...   Mar 12 2013, 13:12
- - KnightIgor   Цитата(alexdos @ Mar 12 2013, 09:14) По к...   Mar 12 2013, 08:50
|- - mempfis_   Цитата(alexdos @ Mar 12 2013, 13:06) Я уж...   Mar 12 2013, 10:26
|- - KnightIgor   Цитата(alexdos @ Mar 12 2013, 14:49) знаю...   Mar 12 2013, 14:07
- - Golikov A.   Думаю все тянется со старого пика, который работае...   Mar 12 2013, 16:57
|- - alexdos   Цитата(Golikov A. @ Mar 12 2013, 20:57) П...   Mar 12 2013, 17:38
- - richie   А это зависит от самих данных, соглашения об их ор...   Mar 12 2013, 18:10
|- - alexdos   Цитата(richie @ Mar 12 2013, 22:10) P.S. ...   Mar 12 2013, 18:31
|- - richie   Цитата(alexdos @ Mar 12 2013, 22:31) СRC ...   Mar 14 2013, 05:35
|- - demiurg_spb   разговор ни о чём...   Mar 14 2013, 05:48
|- - Golikov A.   Цитата(richie @ Mar 14 2013, 09:35) P.S. ...   Mar 14 2013, 06:05
|- - alexdos   Наверное я не так изначально поставил вопрос. Но т...   Mar 14 2013, 08:38
- - Golikov A.   можно делать выводы что вы их не нашли. Я больше ...   Mar 12 2013, 19:55
|- - DmitryM   Цитата(Golikov A. @ Mar 12 2013, 23:55) м...   Mar 13 2013, 04:35
- - Golikov A.   но только потому что на каждое сообщение должен бы...   Mar 13 2013, 14:57
|- - DmitryM   Цитата(Golikov A. @ Mar 13 2013, 18:57) н...   Mar 13 2013, 15:48
- - Golikov A.   в этом и фишка, что если устройство ответит то мож...   Mar 13 2013, 16:56
|- - alexdos   Цитата(Golikov A. @ Mar 13 2013, 20:56) П...   Mar 13 2013, 20:29
|- - _Артём_   Цитата(alexdos @ Mar 13 2013, 22:29) Да г...   Mar 13 2013, 21:11
- - vlad_new   ЦитатаСпециального механизма отслеживания пауз в U...   Mar 13 2013, 17:02
- - Golikov A.   Не тут что-то не так. Любой протокол на базе УАРТ...   Mar 14 2013, 03:27
- - Golikov A.   Ну хотелось бы разделить лавры с другими участника...   Mar 14 2013, 15:28
|- - alexdos   Цитата(Golikov A. @ Mar 14 2013, 19:28) Н...   Mar 14 2013, 18:48
- - Golikov A.   весьма познавательно, спасибо. Надо будет где нибу...   Mar 14 2013, 18:57


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

 


RSS Текстовая версия Сейчас: 7th August 2025 - 17:14
Рейтинг@Mail.ru


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