12.10.2017, 21:30
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Приём ответов от gsm модема
Подключил usb-›rs232 На модем уходит четко "AT\r", а приходит с модема "яAT\r +CME: ERROR: 58\r\n"
С железом все ок, как уже говорил, если подрубить модем к компу, то из терминала управление хорошо работает, без вот таких глюков.
Последний раз редактировалось supercelt; 12.10.2017 в 21:35.
|
|
|
|
12.10.2017, 21:50
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,771 раз(а) в 5,896 сообщении(ях)
|
Re: Приём ответов от gsm модема
Сообщение от supercelt
|
На модем уходит четко "AT\r", а приходит с модема "яAT\r +CME: ERROR: 58\r\n"
|
А что с Rx? Какие настройки?
Хотя... Rx тут ни при чем. Смотрите уровень Тх при отсутствии передачи.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 12.10.2017 в 21:57.
|
|
|
|
12.10.2017, 21:55
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Приём ответов от gsm модема
Сообщение от akegor
|
А что с Rx? Какие настройки?
|
Код:
|
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
__NOP();
GPIOA-›MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1;/* | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER12_1;*/ //альтернативная функуия для выводов, на которых сидит USART1
GPIOA-›AFR[1] = (uint32_t)0x770; //0x77770; //AFRH = AFR[1], AF7 - USART1 (rx,tx,cts,rts/pa9, pa10, pa11, pa12) alt table function
USART1-›BRR = 0x2D9; //скорость 115200
USART1-›CR1 |= USART_CR1_RXNEIE | USART_CR1_RE | USART_CR1_TE; //Разрешаем локальные прерывания по приёму USART //Включаем передатчик и приёмник |
|
|
|
|
13.10.2017, 00:29
|
|
Временная регистрация
Регистрация: 12.11.2008
Адрес: LT
Сообщений: 69
Сказал спасибо: 12
Сказали Спасибо 33 раз(а) в 23 сообщении(ях)
|
Re: Приём ответов от gsm модема
Сообщение от supercelt
|
Подключил usb-›rs232 На модем уходит четко "AT\r", а приходит с модема "яAT\r +CME: ERROR: 58\r\n"
|
Можно попробовать установить двойной стоп бит. Или сделать задержку между выводом отдельных символов.
|
|
|
|
13.10.2017, 00:30
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Приём ответов от gsm модема
Слушайте, а такой вопрос: Если допустим у меня настроен аппаратный контроль, ну....альтернативная функция и так далее, то как мне принудительно выставить RTS руками? что бы притормозить передачу от устройства на то время пока я что-то там делаю... Через обычные BSSR или ODR регистры? Или они не будут действовать, потому что выводы сидят на альтернативной функции?
Последний раз редактировалось supercelt; 13.10.2017 в 00:36.
|
|
|
|
13.10.2017, 04:05
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Приём ответов от gsm модема
Переключи вывод назад в GPIO/AF0 и делай что хочешь.
|
|
|
|
14.10.2017, 00:31
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Приём ответов от gsm модема
Сделал, RTS отлично справляется. Спасибо. Ещё вопросик. Вы более опытные, просто подскажите как будет быстрее? Я все о той же кофемолке, в которую отправляются данные из приёмного буфера для парсинга.
Условия не изменились. Мне приходят строки вида:
\r\n Заголовок \r\n \r\n Данные \r\n \r\n Статус (ОК или ERROR)\r\n
Вот я наполняю буфер:
Код:
|
void USART1_IRQHandler(void){
if(USART1-›SR & USART_SR_RXNE){
gsm_buffer_receive[gsm_buffer_in] = USART1-›DR;
gsm_buffer_in++;
gsm_buffer_count++;
}
} |
2 варианта:
Первый)
Вот в этом прерывании посимвольно проверять, если встретили "\n", то поднимаем RTS и ставим флаг отправки в кофемолку. А уже в майне ловим этот флаг и парсим то что пришло в буфер. Естественно до ОК мы ещё не дойдём и проверив, что там ОК нету, опускаем RTS и продолжаем приём до следующего "\n". И так повторятся пока мы не увидим ОК. Естественно + реализовать таймаут.
Второй)
В прерывании просто тупо наполняем буфер и все, а в майне в while(1) ставим функцию чтения буфера. И при каждой итерации майна ищем в буфере ОК. Если нам просто нужен был ОК, то делаем что-то и уходим. Если ждали ответа с данными, то как получили ОК, то поднимаем RTS и ответ в кофемолку. Вытащили данные, опустили RTS.
Короче Склифасовский, ну вы поняли. ))) Как будет быстрее и экономичнее? каждый раз проверять в майне или по флагу от прерывания?
В флаге есть например минус, допустим, если "\n" потеряется.... но есть же таймаут. Вобщем такие мысли на ночь)
Всем здоровья!)
|
|
|
|
14.10.2017, 00:57
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 681
Сказал спасибо: 362
Сказали Спасибо 755 раз(а) в 358 сообщении(ях)
|
Re: Приём ответов от gsm модема
supercelt, вечер, пятница, 13-е..
Утро вечера мудренЕе
|
|
|
|
14.10.2017, 03:29
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Приём ответов от gsm модема
Только по второму варианту.
И концом строки считать и "\r" и "\n", затем удаление из строки начальных/конечных пробелов, анализ строки на пустоту и передача в обработку остатка.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:12.
|
|