Перейти к содержанию
    

SIM800 не шлет SMS при работе с STM32

Всем привет.

У меня модуль 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");

2022-07-19_13-23-22.thumb.png.1dedb2d687898166e1d3e19870246cf9.png

Изменено пользователем sovenie

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 19.07.2022 в 14:48, sovenie сказал:

Привожу код, отвечающий за отправку SMS

Это не "код работы с SIM800", а недоразумение какое-то.  :shok:

Читать мануал на AT-команды и всё переписать начисто, с 0!

 

В 19.07.2022 в 14:48, sovenie сказал:
if(strstr((char *)RxData,">")){

А здесь видимо автор сего быдлокода решил поискать заветный символ по всей памяти МК. До первого 0. Чего уж мелочиться!  :biggrin:

В 19.07.2022 в 14:48, sovenie сказал:

Почему, если на всё остальное модем реагирует адекватно?

Потому что где-то в памяти нашла искомый '>'.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/19/2022 at 3:06 PM, jcxz said:

Это не "код работы с SIM800", а недоразумение какое-то.  :shok:

Читать мануал на AT-команды и всё переписать начисто, с 0!

Что не так?

2022-07-19_15-17-02.thumb.png.37353b294412bc3c0d17daf7e8fa2098.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 19.07.2022 в 15:11, sovenie сказал:

Что не так?

Всё не так. Где обработка "OK", "ERROR" и всех URC? Где парсинг потока символов от SIM800 на строки и последующий парсинг этих строк?

Ещё раз - изучайте мануал по AT-командам. От корки до корки, а не выбранный абзац.

 

Кроме того - даже в этом "коде" вы наделали кучу ошибок. Писал уже, читайте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/19/2022 at 3:19 PM, jcxz said:

Всё не так. Где обработка "OK", "ERROR" и всех URC? Где парсинг потока символов от SIM800 на строки и последующий парсинг этих строк?

Ещё раз - изучайте мануал по AT-командам. От корки до корки, а не выбранный абзац.

 

Кроме того - даже в этом "коде" вы наделали кучу ошибок. Писал уже, читайте.

Спрошу иначе: почему при вводе АТ-команд из данного кода "руками" через переходник USB/UART модем отвечает всё то же самое, но отправка СМС происходит?

Изменено пользователем sovenie

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, sovenie сказал:

. . . . всё то же самое, но отправка СМС происходит?

и что там в  end_sms_cmd ? Приводите весь функциональный код, включая объявления и инициализацию, это сэкономит время.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/19/2022 at 4:18 PM, sovenie said:

Спрошу иначе: почему при вводе АТ-команд из данного кода "руками" через переходник USB/UART модем отвечает всё то же самое, но отправка СМС происходит?

 

 Терминал  похоже автоматически добавляет нужные символы за вас.

А STM32  об этом ничего не знает и не догадывается и модем очень ждет правильных команд полностью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Естественно, если бы ТС в операционной системе работал, то у него и в терминале без настроек "\r\n" ничего не вышло бы! А так он в игровой прошивке попробовал, где  '\r\n' автоматом добавляются, и думает, что если он на микроконтроллере не будет '\n' добавлять, то все так и будет хорошо!

Я вот, наоборот, на проблему забывания '\r' неоднократно натыкался (т.к. в операционных системах она не используется, а вот в кривых терминалах вроде модемов - очень даже).

P.S. За такой код нужно по рукам очень сильно бить. Прежде всего - за использование сами знаете чего!

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, sovenie сказал:

Давно я с такими хамами не общался

Ну, лучше пообщаться с профессионально-подкованным, как Вы выразились, "хамом" чем с обходительным профаном.

Кстати "быдло-код" - вполне устоявшийся термин. Не обращайте внимание на форму. Если обязателен "мягкий" подход - раздел "для начинающих". А здесь подразумеваются вопросы-ответы "кто плавал" и достаточно глубоко и далеко :))) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если end_sms_cmd равен символу с кодом 0x1A, то вроде ок.

Может, osDelay(10000) многовато? Попробуйте определять окончание передачи по флагам UART.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/19/2022 at 3:06 PM, jcxz said:

Это не "код работы с SIM800", а недоразумение какое-то.  :shok:

Читать мануал на AT-команды и всё переписать начисто, с 0!

А здесь видимо автор сего быдлокода решил поискать заветный символ по всей памяти МК. До первого 0. Чего уж мелочиться!  :biggrin:

Потому что где-то в памяти нашла искомый '>'.

Что же вы хотите от хоббийщика. Заметил что в последнее время наплыв их на форуме. Точнее от остальных тишина.

Первый признак ардуинщика - использование функций типа strcpy вместо strncpy.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 часов назад, Eddy_Em сказал:

. . . 

P.S. За такой код нужно по рукам очень сильно бить. Прежде всего - за использование сами знаете чего!

На мой взгляд, это:

1. Использование задержек osDelay( xxx );

2. Отсутствие проверок результата работы ф-ий приема в виде RetCode = HAL_UART_Receive( . . . ); if( RetCode . . . )

3. Неоднократные повторы блоков кода, которые можно вынести в функцию или хотя-бы в макрос.

4. на что обращалось внимание выше.

etc . . . ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мож, ТС делает сигнализацию на дачу ;) тогда вообще можно от 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");
						}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 2:53 PM, k155la3 said:

etc . . . ?

Функция printf и все функции, начинающиеся с HAL.

Ну и, похоже, ТС пользуется ртосью. Кстати, в духе разработки охранной сигнализации (если, конечно, это - не одна точка в одном месте) дешевле было бы купить за ~2000р одноплатник, в него воткнуть "USB-свисток" (4G-модем), арендовать за пару сотен рублей в месяц сервер и спокойно данные отправлять на сервер. Заодно у ТС будет фото улыбающегося хмыря в балаклаве, ворующего его камеры видеонаблюдения ☺

А общаться СМСками… Ну, разве что сделать автосигнализацию, которая будет каждые минут 10-15 просыпаться (чтобы уменьшить вероятность обнаружения злоумышленниками) и ждать в течение минуты-другой командные СМС (скажем, с командой "где ты?", на которую высылается СМС с координатами GPS). Заодно проверять состояние, и в случае проблем слать хозяину СМС (скажем: "ахтунг, разбито боковое водительское стекло, вскрыт капот и сняты клеммы с аккумулятора"). Там - да, постоянное соединение только во вред.

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...