|
RottirBob
|
|
Определение конца передачи через UART21.05.2017, 18:35. Показов 4729. Ответов 11
Метки нет (Все метки)
Добрый день.
Докатился я до работы с GSM модулем. И возникла у меня проблема. Как определить, что GSM модуль передал всё что он хотел сказать и начать обрабатывать входной буфер? Все сообщения начинаются и оканчиваются <CR><LF>, можно было бы по ним, но есть некоторые сообщения где передаётся не одна строка, а несколько. Соответственно последовательностей <CR><LF> может быть больше чем две. Некоторые сообщения заканчиваются "OK<CR><LF>", некоторые "ERROR<CR><LF>", некоторые "CMS ERROR:<error><CR><LF>". Обрабатывать все возможные варианты устанешь. Существует ли какой-нибудь универсальный способ чтобы понять, что передача окончена, можно разбирать уже посылку? |
|
| 21.05.2017, 18:35 | |
|
Ответы с готовыми решениями:
11
UART настройка скорости передачи. Сжатие данных для передачи по UART STM32F4xx SPI (Master only) + DMA определение конца передачи |
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|
| 21.05.2017, 19:07 | |
|
Знать бы камень - подсказали бы.
А так бит idle и соответствующее прерывание. Но это пальцем в небо. Смотреть документацию на МК, что там есть.
0
|
|
|
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 65
|
|
| 21.05.2017, 19:11 | |
|
Если строк несколько и они "локализованы" в одном интервале с последующим "значительным" молчанием - то можно во время прихода начала пакета (каждой строки) запускать таймер на интервал приема строки/строк. По окончанию приема, сработавший таймер даст знать о том, что надо обрабатывать данные.
0
|
|
|
RottirBob
|
|
| 21.05.2017, 19:26 | |
|
otixsom, камень Atmega8. Ничего похожего на idle там нет (или я не вижу).
Mitior, спасибо за идею. Сам думал про таймауты. Но не знал к чему привязаться. Твоя идея стоящая, попробую реализовать. |
|
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
| 21.05.2017, 22:29 | |
|
Обычно у модулей есть вывод RING или сообщение по USORT , сообщающий пришло что-то не виданное. Нормально принятое сообщение заканчивается ОК , вот если в конце буфера сие есть, имеет смысл узнать , что прислали . Остальное в игнор.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 886
|
|
| 22.05.2017, 04:28 | |
|
Можно конечно, но тогда потеряются UNC
0
|
|
|
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
|
|
| 22.05.2017, 09:33 | |
|
При работе с SIM900 делали по таймауту. По концу строки бесполезно, может быть несколько cr lf в одной посылке.
0
|
|
|
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
|
|
| 22.05.2017, 09:59 | |
|
А это действительно надо - ждать конца передачи? Можно настроить прерывание на каждый символ, а по приходу конца строки идти обрабатывать строку и принимать решения. В это время модем может присылать что-то еще. Сообщения обычно несут примитивный смысл, и я не вижу необходимости их комбинировать в один пакет. Если очередное сообщение перебивает предыдущее по смыслу, то актуализировать состояние по последнему сообщению. Единицей для нарезки естественным образом является строка.
Если же это данные пользователя, то этот поток форматируется как нам удобно.
0
|
|
|
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
|
|
| 22.05.2017, 10:37 | |
|
Удобнее оперировать с готовым пакетом. Например, при приеме данных по gprs там этих cr lf может быть несколько десятков, при приеме смс на каждую строчку в смс тоже будет свой cr lf. Сейчас открыл исходники - работает по таймауту, но для ускорения отлавливаем еще cr lf OK cr lf в конце буфера, и тогда не ждем таймаут. Хотя как показала практика, следующую команду все равно лучше отправить через 50-100 мс. Пытались без паузы - то ли у модема входной буфер забивается, то ли еще что - просто зависал. Косяков с SIM900 хватало. И да, atmega8 врядли хватит для полноценной работы с модемом, слишком мало оперативки.
0
|
|
|
RottirBob
|
|
| 22.05.2017, 13:23 | |
|
Atmega8 для моих задач вполне достаточно. Через GSM модуль работа идёт только посредством СМС, коих всего-то четыре штуки. Ну и ответ отправить. Вчера накидал работу с буфером по таймауту. Вполне рабочий вариант. Учитывая что сам GSM модуль тот еще молчун. Сам ничего не говорит, только в ответ на АТ-запросы.
Суть такова. Посылаю АТ-команду. Обработчик прерываний по приёму байта с UART выставляет програмный флаг RCVB и сбрасывает таймер uartTimer. Я всегда завожу внутренний таймер на 50 прерываний в секунду. Какие-нибудь секундные таймеры посчитать, опрос кнопок сделать, дисплей обновить. Удобная вещь в хозяйстве одним словом. Во время такого прерывания проверяется флаг RCVB и, если он установлен, то увеличивается uartTimer раз в секунду. Если он дотикал до какой-нибудь константы заданной в дефайнах значит приёма байт не было уже количество секунд заданной в константе. Снимаю флаг RCVB, выставляю флаг RCVD - прём пакета окончен. В основном цикле по выставлению этого флага можно начинать обрабатывать входной буфер. |
|
|
Tordirom
|
|
| 03.10.2017, 21:19 | |
|
Привет всем!
Попался и мне GSM A6. Дня три я с ним воевал, пока не нашёл код устанавливающий скорость обмена. Теперь то же встал вопрос определять есть ли СМС, и принимать его в переменную val. Никаких таймеров не нужно. Всё предельно просто. Есть вот такая функция Serial.available() . Которая выдаёт количество байт доступных для считывания через последовательный порт. Читаем СМС пока не станет равно нулю. И наоборот начинаем читать как только стало больше нуля. |
|
| 03.10.2017, 21:19 | |
|
Помогаю со студенческими работами здесь
12
STM32F103XXXX UART с контролем передачи через RTS и CTS st8s105 задержка вывода через uart после передачи UART Tx complete interrupt происходит без передачи Софтварный uart на tiny 26. Частота передачи данных.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|