sovenie 0 19 июля, 2022 Опубликовано 19 июля, 2022 (изменено) · Жалоба Всем привет. У меня модуль SIM800 отправляет SMS при работе с ним через терминал и USB/UART-преобразователь. При работе с STM32 он вообще отвечает на АТ-команды, но SMS отказывается отсылать. Баланс в норме, связь присутствует. В чем дело? Привожу код, отвечающий за отправку SMS, и лог, присылаемый STMкой в отладчик. Судя по логу, программа проходится по коду, отправляющему SMS и идёт дальше, высылая в лог "SMS is sent". На деле сообщение не отправляется. Почему, если на всё остальное модем реагирует адекватно? strcpy((char *)TxData, "AT+CMGF=1\r"); HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),100); HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 3000); printf("AT+CMGF is \r\n"); printf(RxData); printf("\r\n"); osDelay(10000); flag=1; while(flag==1){ uint8_t RxData[64] = {0}; osDelay(2000); strcpy((char *)TxData, "AT+CMGS=\"+799999999\"\r"); HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),100); HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 5000); printf("Poluchen simvol \r\n"); printf(RxData); printf("\r\n"); if(strstr((char *)RxData,">")){ printf("Phone number valid\r"); flag=0; } else{printf("Phone number invalid\r");} osDelay(1000); } strcpy((char *)TxData, "SMS from SIM800"); HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),100); HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000); osDelay(10000); strcpy((char *)TxData, end_sms_cmd); HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),100); HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 5000); printf("SMS is sent\r\n"); printf(RxData); printf("\r\n"); Изменено 19 июля, 2022 пользователем sovenie Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 232 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба В 19.07.2022 в 14:48, sovenie сказал: Привожу код, отвечающий за отправку SMS Это не "код работы с SIM800", а недоразумение какое-то. Читать мануал на AT-команды и всё переписать начисто, с 0! В 19.07.2022 в 14:48, sovenie сказал: if(strstr((char *)RxData,">")){ А здесь видимо автор сего быдлокода решил поискать заветный символ по всей памяти МК. До первого 0. Чего уж мелочиться! В 19.07.2022 в 14:48, sovenie сказал: Почему, если на всё остальное модем реагирует адекватно? Потому что где-то в памяти нашла искомый '>'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sovenie 0 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба On 7/19/2022 at 3:06 PM, jcxz said: Это не "код работы с SIM800", а недоразумение какое-то. Читать мануал на AT-команды и всё переписать начисто, с 0! Что не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 232 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба В 19.07.2022 в 15:11, sovenie сказал: Что не так? Всё не так. Где обработка "OK", "ERROR" и всех URC? Где парсинг потока символов от SIM800 на строки и последующий парсинг этих строк? Ещё раз - изучайте мануал по AT-командам. От корки до корки, а не выбранный абзац. Кроме того - даже в этом "коде" вы наделали кучу ошибок. Писал уже, читайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sovenie 0 19 июля, 2022 Опубликовано 19 июля, 2022 (изменено) · Жалоба On 7/19/2022 at 3:19 PM, jcxz said: Всё не так. Где обработка "OK", "ERROR" и всех URC? Где парсинг потока символов от SIM800 на строки и последующий парсинг этих строк? Ещё раз - изучайте мануал по AT-командам. От корки до корки, а не выбранный абзац. Кроме того - даже в этом "коде" вы наделали кучу ошибок. Писал уже, читайте. Спрошу иначе: почему при вводе АТ-команд из данного кода "руками" через переходник USB/UART модем отвечает всё то же самое, но отправка СМС происходит? Изменено 19 июля, 2022 пользователем sovenie Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба 4 часа назад, sovenie сказал: . . . . всё то же самое, но отправка СМС происходит? и что там в end_sms_cmd ? Приводите весь функциональный код, включая объявления и инициализацию, это сэкономит время. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самоделкин 0 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба On 7/19/2022 at 4:18 PM, sovenie said: Спрошу иначе: почему при вводе АТ-команд из данного кода "руками" через переходник USB/UART модем отвечает всё то же самое, но отправка СМС происходит? Терминал похоже автоматически добавляет нужные символы за вас. А STM32 об этом ничего не знает и не догадывается и модем очень ждет правильных команд полностью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 19 июля, 2022 Опубликовано 19 июля, 2022 (изменено) · Жалоба Естественно, если бы ТС в операционной системе работал, то у него и в терминале без настроек "\r\n" ничего не вышло бы! А так он в игровой прошивке попробовал, где '\r\n' автоматом добавляются, и думает, что если он на микроконтроллере не будет '\n' добавлять, то все так и будет хорошо! Я вот, наоборот, на проблему забывания '\r' неоднократно натыкался (т.к. в операционных системах она не используется, а вот в кривых терминалах вроде модемов - очень даже). P.S. За такой код нужно по рукам очень сильно бить. Прежде всего - за использование сами знаете чего! Изменено 19 июля, 2022 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sovenie 0 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба Давно я с такими хамами не общался Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба 7 минут назад, sovenie сказал: Давно я с такими хамами не общался Ну, лучше пообщаться с профессионально-подкованным, как Вы выразились, "хамом" чем с обходительным профаном. Кстати "быдло-код" - вполне устоявшийся термин. Не обращайте внимание на форму. Если обязателен "мягкий" подход - раздел "для начинающих". А здесь подразумеваются вопросы-ответы "кто плавал" и достаточно глубоко и далеко :))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба Если end_sms_cmd равен символу с кодом 0x1A, то вроде ок. Может, osDelay(10000) многовато? Попробуйте определять окончание передачи по флагам UART. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
celsio 0 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/19/2022 at 3:06 PM, jcxz said: Это не "код работы с SIM800", а недоразумение какое-то. Читать мануал на AT-команды и всё переписать начисто, с 0! А здесь видимо автор сего быдлокода решил поискать заветный символ по всей памяти МК. До первого 0. Чего уж мелочиться! Потому что где-то в памяти нашла искомый '>'. Что же вы хотите от хоббийщика. Заметил что в последнее время наплыв их на форуме. Точнее от остальных тишина. Первый признак ардуинщика - использование функций типа strcpy вместо strncpy. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба 16 часов назад, Eddy_Em сказал: . . . P.S. За такой код нужно по рукам очень сильно бить. Прежде всего - за использование сами знаете чего! На мой взгляд, это: 1. Использование задержек osDelay( xxx ); 2. Отсутствие проверок результата работы ф-ий приема в виде RetCode = HAL_UART_Receive( . . . ); if( RetCode . . . ) 3. Неоднократные повторы блоков кода, которые можно вынести в функцию или хотя-бы в макрос. 4. на что обращалось внимание выше. etc . . . ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба Мож, ТС делает сигнализацию на дачу ;) тогда вообще можно от STM отказаться и сделать на EAT, или на Ардуинке забацать. if(eat_send_text_sms(send_sms_number, (u8 *)mdm_cmd)) { eat_trace("Send init SMS Ok"); } else { eat_trace("Send init SMS Fail"); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 20 июля, 2022 Опубликовано 20 июля, 2022 (изменено) · Жалоба On 7/20/2022 at 2:53 PM, k155la3 said: etc . . . ? Функция printf и все функции, начинающиеся с HAL. Ну и, похоже, ТС пользуется ртосью. Кстати, в духе разработки охранной сигнализации (если, конечно, это - не одна точка в одном месте) дешевле было бы купить за ~2000р одноплатник, в него воткнуть "USB-свисток" (4G-модем), арендовать за пару сотен рублей в месяц сервер и спокойно данные отправлять на сервер. Заодно у ТС будет фото улыбающегося хмыря в балаклаве, ворующего его камеры видеонаблюдения ☺ А общаться СМСками… Ну, разве что сделать автосигнализацию, которая будет каждые минут 10-15 просыпаться (чтобы уменьшить вероятность обнаружения злоумышленниками) и ждать в течение минуты-другой командные СМС (скажем, с командой "где ты?", на которую высылается СМС с координатами GPS). Заодно проверять состояние, и в случае проблем слать хозяину СМС (скажем: "ахтунг, разбито боковое водительское стекло, вскрыт капот и сняты клеммы с аккумулятора"). Там - да, постоянное соединение только во вред. Изменено 20 июля, 2022 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться