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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

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

Сообщение kotarnold »

Всем привет.

У меня модуль 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 КБ) 60 скачиваний
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

После отправки номера модуль должен ответить символом >, только потом отправляем текст сообщения.
Раз не проверяете ответ модуля, то введите для проверки задержку секунд так на 5, что бы уж гарантированно было.
И перед end_sms_cmd то же задержку поставьте.
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

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

Сообщение kotarnold »

Добрый день!

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

Код: Выделить всё

		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 КБ) 71 скачивание
Ответить

Вернуться в «ARM»