Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Приём ответов от gsm модема

Непрочитано 19.03.2017, 17:15  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Приём ответов от gsm модема

Всем привет! Столкнулся с такой проблемой. Есть модем siemens c35i, плата с stm32f100ret6b.
Суть в том, что я посылаю команду на модем

Код:
char Buffer_CSCA[] = "AT+CSCA?\r";
GSM_COMM_SEND_SMS_SERVICE();

void GSM_COMM_SEND_SMS_SERVICE(){
		DMA1_Channel4-›CMAR = (uint32_t)Buffer_CSCA;
		DMA1_Channel4-›CNDTR = sizeof(Buffer_CSCA);
		DMA1_Channel4-›CCR |= DMA_CCR4_EN;
}
команда ушла, получаю ответ

Код:
void USART1_IRQHandler(void){ //Прерывание USART1
		if(USART1-›SR & USART_SR_RXNE){ //Если прерывание вызвано по приёму USART1
				USART1-›SR &= ~USART_SR_RXNE; //Сбрасываем флаг приёма USART1
				Buffer_Receive[i++] = USART1-›DR;
		}
}
То есть я просто набиваю массив, что бы на первом этапе пока посмотреть что приходит. В отладчике смотрю переменную Buffer_Receive приходит ответ как положено, примерно вот такой

Код:
\r\nAT+CSCA?\r\nAT+CSCA: 141, "+7911xxxxxxx", 20\r\nOK\r\n
А теперь прикол. Я не посылаю на модем команду, а жду звонок. Звоню на модем, а вместо \r\nRING\r\n в переменной оказывается вот что "Я0Еы". То есть просто четыре непонятных символа приходит при каждом ring. Одни и те же. Что это может быть?
Реклама:
supercelt вне форума  
Непрочитано 19.03.2017, 17:21  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

А если с модемом с компа пообщаться? И посмотреть терминалкой - чо он отвечает и чо ему надо? Это же проще. У ответов модема два варианта. Определение номера может быть не включено... Да и мало еще чего.
Вы уж пути накатайте, а потом контроллер запрягайте (когда точно будете знать, чего ожидать).
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 19.03.2017, 17:26  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

первое что я сделал это как раз и пообщался через терминал. И команды отправлял и принимал и RING через терминал принимается абсолютно нормально
supercelt вне форума  
Непрочитано 20.03.2017, 22:37  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

вопрос решён. При инициализации надо на модем что-нибудь отправлять, к примеру команду АТ. Это настраивает autobaud.
supercelt вне форума  
Непрочитано 20.03.2017, 23:56  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

Сообщение от supercelt Посмотреть сообщение
Это настраивает autobaud.
Никогда не пользуюсь этой хренью, как и прочими умолчаниями всегда и везде. Только четкое и однозначное определение. Потому и предположить такого не мог.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 21.03.2017, 10:33  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,284
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

Собственно приём по UART любого мусора первым делом должен вызывать сомнение в скорости передачи, а потом уже поиск других объяснений.
Использование автонастройка в таком варианте - источник дополнительных проблем. Только заданное/определённое значение скорости. Позволяет сильно сэкономить дни и нервные клетки .
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 12.10.2017, 01:00  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

Всем привет! Пришлось возродить старую тему, ибо возникла такая проблема

Код:
char *gsm_setup_command1 = "AT+CLIP=1\r";

//наполняю буфер так:
void USART1_IRQHandler(void){
	volatile static uint8_t gsm_buffer_count = 0;
	if(USART1-›SR & USART_SR_RXNE){
		gsm_buffer_receive[gsm_buffer_count++] = USART1-›DR;
	}
}

void gsm_ini(void){
	uint32_t gsm_tmp_reg;
	//USART1 & DMA
	RCC-›AHB1ENR |= RCC_AHB1ENR_DMA2EN;
	__NOP();
	RCC-›APB2ENR |= RCC_APB2ENR_USART1EN;
	__NOP();
	gsm_tmp_reg = DMA2_Stream7-›CR;
	gsm_tmp_reg &= ~(DMA_SxCR_CHSEL | DMA_SxCR_MBURST | DMA_SxCR_PBURST | DMA_SxCR_PL | \
	DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | DMA_SxCR_DIR); //Очищаем регистр
	gsm_tmp_reg |= DMA_SxCR_CHSEL_2; //Выбираем канал 4 (USART_TX)
	gsm_tmp_reg |= DMA_SxCR_DIR_0; //Направление данных от памяти к перифрии
	gsm_tmp_reg |= DMA_SxCR_MINC; //Инкремент адреса данных в памяти (буфере)
	gsm_tmp_reg &= ~DMA_SxCR_PINC; //Запретить инкремент адреса периферии
	gsm_tmp_reg &= ~DMA_SxCR_MSIZE; //Размерность данных для памяти - 1 байт
	gsm_tmp_reg &= ~DMA_SxCR_PSIZE; //Размерность данных для периферии - 1 байт
	gsm_tmp_reg &= ~DMA_SxCR_CIRC; //Режим - нормальный (однократное срабатывание DMA)
	gsm_tmp_reg |= DMA_SxCR_PL_0; //Приоритет - средний
	gsm_tmp_reg &= ~(DMA_SxCR_MBURST | DMA_SxCR_PBURST); //Конфигурация передачи - single
	DMA2_Stream7-›PAR = (uint32_t)&(USART1-›DR);
	//DMA2_Stream7-›M0AR = (uint32_t)buffer;
	//DMA2_Stream7-›NDTR = sizeof(buffer); //Указываем размер данных для передачи
	DMA2_Stream7-›FCR &= ~DMA_SxFCR_DMDIS; //FIFO режим - откл
	DMA2_Stream7-›FCR &= ~DMA_SxFCR_FTH; //Пакетная передача 1/4 full FIFO
	DMA2_Stream7-›CR = gsm_tmp_reg; //Записываем все настройки в регистр
	DMA2_Stream7-›CR |= DMA_SxCR_TCIE; //Включаем прерывание DMA по завершению передачи
	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)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 //Включаем передатчик и приёмник
	USART1-›CR3 |= USART_CR3_DMAT | USART_CR3_CTSE | USART_CR3_RTSE; //Разрешаем DMA работать с USART, включаем аппаратный контроль данных CTS, RTS 
	NVIC_EnableIRQ(USART1_IRQn); //Разрешаем глобальные прерывания для USART1
	NVIC_EnableIRQ(DMA1_Stream7_IRQn); //Разрешаем прерывания DMA
	USART1-›CR1 |= USART_CR1_UE; //Включаем USART
	//DMA2_Stream7-›CR |= DMA_SxCR_EN; //Начать передачу
	gsm_send(gsm_setup_command1);
	//test1(gsm_setup_command[gsm_step]);
	
}

void gsm_send(char *buffer){
	DMA2_Stream7-›M0AR = (uint32_t)buffer;
	DMA2_Stream7-›NDTR = strlen(buffer); //Указываем размер данных для передачи
	DMA2_Stream7-›CR |= DMA_SxCR_EN; //Начать передачу
}
ответ от модема приходит такой (написал сокращённо):

яAT+CLIP=1\r\r +CME: ERROR

то есть эхо не выключено, сначала он показывает что получил, потом плюёт сам ответ. Судя по картине он не воспринял команду, потому что как бы впереди непонятный символ "я". В отладке у него код 0хFF

Как туда попадает символ непонятно. Причем это началось неожиданно и происходит примерно 5 раз из 6. На 6 почему-то все правильно. Чё это вообще может быть?
supercelt вне форума  
Непрочитано 12.10.2017, 01:53  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

Я смотрю автоопределение скорости на самом модеме ты так и не отключил?
Тогда в начале кидай ему "AT" много раз, пока "OK" не начнет сыпать.
Hives вне форума  
Сказали "Спасибо" Hives
mike-y-k (12.10.2017)
Непрочитано 12.10.2017, 04:19  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,284
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

supercelt, это только Чингачгук не наступает дважды на одни грабли?
Что сложного в установке скорости передачи?
Или выполнении ранее сделанного "открытия"?
В DS или дополнительных материалах по модему этот момент наверняка (100+%) отдельно описан…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 12.10.2017, 07:17  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

supercelt, Вам нужны шашечки или ехать? Нужно определить вхождение строки в содержимое буфера или "сбыча всех мечтей"? Ну, лишний байт. Так и что? Почему нельзя просто не обращать внимания? Остальное-то ведь то, что надо?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GSM модем: как остаться на связи когда вокруг полно работающих модемов GSM Mike121234 Автоматика и аппаратура связи 6 05.07.2015 11:09
GSM дозвонщик / попроще ArtemonX Микроконтроллеры, АЦП, память и т.д 16 13.10.2011 21:51
Помогите с сопряжением GSM модема и FXS Sash_g87 Автоматика и аппаратура связи 2 08.09.2011 15:29


Часовой пояс GMT +4, время: 03:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.