Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Вс июл 17, 2022 12:29:06

Всем привет.

У меня модуль SIM800 отправляет SMS при работе с ним через терминал и USB/UART-преобразователь. При работе с STM32 он вообще отвечает на АТ-команды, но SMS отказывается отсылать. Баланс в норме, связь присутствует. В чем дело? Привожу код и лог, присылаемый STMко в отладчик.

Код:
char end_sms_cmd[] = {'\r','\n',26,'\0'};

      printf("SMS with GSM Module\r\n");
      
      printf("Checking Module...\r\n");
      
      uint8_t flag=1;
      
      while(flag==1){
         
         uint8_t RxData[64] = {0};
         
         printf("AT\r\n");
         strcpy((char *)TxData, "AT\r\n");
         HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
         HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
         osDelay(1000);
         printf(RxData);
         printf("\r\n");
         
      if(strstr((char *)RxData,"OK")){
            printf("Module Connected\r");
            flag=0;
         }
      else{printf("Module Unconnected\r");}
         osDelay(1000);
      }
      
      
      strcpy((char *)TxData, "ATI\r");
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      osDelay(1000);
      printf("ATI is \r\n");
      printf(RxData);
      printf("\r\n");
      
      osDelay(1000);
      
      strcpy((char *)TxData, "AT+CSQ\r");
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      osDelay(1000);
      printf("CSQ is \r\n");
      printf(RxData);
      printf("\r\n");
      
      osDelay(1000);
      
      strcpy((char *)TxData, "AT+CCID\r");
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      osDelay(1000);
      printf("Phone number is is \r\n");
      printf(RxData);
      printf("\r\n");
      
      osDelay(1000);
      
      strcpy((char *)TxData, "AT+CREG?\r");
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      osDelay(1000);
      printf("CREG is \r\n");
      printf(RxData);
      printf("\r\n");
      
      osDelay(1000);
      
      strcpy((char *)TxData, "AT+COPS?\r");
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      osDelay(1000);
      printf("COPS is \r\n");
      printf(RxData);
      printf("\r\n");
      
      osDelay(1000);
   
      strcpy((char *)TxData, "AT+CMGF=1\r");
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      osDelay(1000);
      printf("AT+CMGF is \r\n");
      printf(RxData);
      printf("\r\n");
      
      osDelay(1000);
      strcpy((char *)TxData, "AT+CMGS=\"+79999999999\"\r");
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      strcpy((char *)TxData, "SMS from SIM800");
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      strcpy((char *)TxData, end_sms_cmd);
      HAL_UART_Transmit(&huart1,(uint8_t *)TxData,strlen(TxData),1000);
      HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 1000);
      
      printf("SMS is sent\r\n");
      printf(RxData);
      printf("\r\n");

Вложения
2022-07-17_12-22-26.png
(9.33 KiB) Скачиваний: 40

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

Вс июл 17, 2022 21:23:51

После отправки номера модуль должен ответить символом >, только потом отправляем текст сообщения.
Раз не проверяете ответ модуля, то введите для проверки задержку секунд так на 5, что бы уж гарантированно было.
И перед end_sms_cmd то же задержку поставьте.

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

Пн июл 18, 2022 11:56:20

Добрый день!

Идея замечательная, спасибо.
Но почему-то даже с паузой и проверкой на знак ">" СМС фактически не отправляется. Фрагмент ответственного кода:

Код:
      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-18_11-50-58.png
(12.68 KiB) Скачиваний: 40
Ответить