19.03.2017, 17:15
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Приём ответов от 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. Одни и те же. Что это может быть?
|
|
|
|
19.03.2017, 17:21
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,119
Сказал спасибо: 2,569
Сказали Спасибо 11,941 раз(а) в 5,989 сообщении(ях)
|
Re: Приём ответов от gsm модема
А если с модемом с компа пообщаться? И посмотреть терминалкой - чо он отвечает и чо ему надо? Это же проще. У ответов модема два варианта. Определение номера может быть не включено... Да и мало еще чего.
Вы уж пути накатайте, а потом контроллер запрягайте (когда точно будете знать, чего ожидать).
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
19.03.2017, 17:26
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Приём ответов от gsm модема
первое что я сделал это как раз и пообщался через терминал. И команды отправлял и принимал и RING через терминал принимается абсолютно нормально
|
|
|
|
20.03.2017, 22:37
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Приём ответов от gsm модема
вопрос решён. При инициализации надо на модем что-нибудь отправлять, к примеру команду АТ. Это настраивает autobaud.
|
|
|
|
20.03.2017, 23:56
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,119
Сказал спасибо: 2,569
Сказали Спасибо 11,941 раз(а) в 5,989 сообщении(ях)
|
Re: Приём ответов от gsm модема
Сообщение от supercelt
|
Это настраивает autobaud.
|
Никогда не пользуюсь этой хренью, как и прочими умолчаниями всегда и везде. Только четкое и однозначное определение. Потому и предположить такого не мог.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
21.03.2017, 10:33
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,260
Сказал спасибо: 11,170
Сказали Спасибо 3,860 раз(а) в 2,930 сообщении(ях)
|
Re: Приём ответов от gsm модема
Собственно приём по UART любого мусора первым делом должен вызывать сомнение в скорости передачи, а потом уже поиск других объяснений.
Использование автонастройка в таком варианте - источник дополнительных проблем. Только заданное/определённое значение скорости. Позволяет сильно сэкономить дни и нервные клетки .
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
12.10.2017, 01:00
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
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 почему-то все правильно. Чё это вообще может быть?
|
|
|
|
12.10.2017, 01:53
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Приём ответов от gsm модема
Я смотрю автоопределение скорости на самом модеме ты так и не отключил?
Тогда в начале кидай ему "AT" много раз, пока "OK" не начнет сыпать.
|
|
|
|
12.10.2017, 04:19
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,260
Сказал спасибо: 11,170
Сказали Спасибо 3,860 раз(а) в 2,930 сообщении(ях)
|
Re: Приём ответов от gsm модема
supercelt, это только Чингачгук не наступает дважды на одни грабли?
Что сложного в установке скорости передачи?
Или выполнении ранее сделанного "открытия"?
В DS или дополнительных материалах по модему этот момент наверняка (100+%) отдельно описан…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
12.10.2017, 07:17
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,119
Сказал спасибо: 2,569
Сказали Спасибо 11,941 раз(а) в 5,989 сообщении(ях)
|
Re: Приём ответов от gsm модема
supercelt, Вам нужны шашечки или ехать? Нужно определить вхождение строки в содержимое буфера или "сбыча всех мечтей"? Ну, лишний байт. Так и что? Почему нельзя просто не обращать внимания? Остальное-то ведь то, что надо?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:01.
|
|