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

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

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

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

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

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


 
Опции темы
Непрочитано 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,119
Сказал спасибо: 2,569
Сказали Спасибо 11,941 раз(а) в 5,989 сообщении(ях)
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,119
Сказал спасибо: 2,569
Сказали Спасибо 11,941 раз(а) в 5,989 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

Сообщение от supercelt Посмотреть сообщение
Это настраивает autobaud.
Никогда не пользуюсь этой хренью, как и прочими умолчаниями всегда и везде. Только четкое и однозначное определение. Потому и предположить такого не мог.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 21.03.2017, 10:33  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,260
Сказал спасибо: 11,170
Сказали Спасибо 3,860 раз(а) в 2,930 сообщении(ях)
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.RU
 
Регистрация: 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
Адрес: Москва СЗАО
Сообщений: 11,260
Сказал спасибо: 11,170
Сказали Спасибо 3,860 раз(а) в 2,930 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Приём ответов от gsm модема

supercelt, это только Чингачгук не наступает дважды на одни грабли?
Что сложного в установке скорости передачи?
Или выполнении ранее сделанного "открытия"?
В DS или дополнительных материалах по модему этот момент наверняка (100+%) отдельно описан…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 12.10.2017, 07:17  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,119
Сказал спасибо: 2,569
Сказали Спасибо 11,941 раз(а) в 5,989 сообщении(ях)
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, время: 11:01.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot